Git 教程:实用命令、安装配置与进阶技巧

Git 与 GitHub:版本控制的利器
Git 与 GitHub:版本控制的利器

Git 是用于 Linux 内核开发的版本控制工具。与 CVS、Subversion 一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。Git 的速度很快,这对于诸如 Linux 内核这样的大项目来说自然很重要。Git 最为出色的是它的合并追踪(merge tracing)能力。

安装及配置

安装:

1
sudo apt install git

配置:

  1. 本地配置用户名与用户

    1
    2
    
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
  2. 生成 SSH 密钥,并与 GitHub 建立互信

    • 打开 Terminal,输入以下命令生成秘钥和公钥,并一路回车
    1
    
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 获取公钥,并复制到 GitHub
    1
    
    cat .ssh/id_rsa.pub
    • 测试
    1
    
    ssh -T git@github.com

    出现结果后,键入 yes,你将会看到

    1
    2
    
    > Hi username! You've successfully authenticated,but GitHub does not
    > provide shell access.

    这就表明成功了 🎉

提交常用命令

  • 创建版本库

    1
    
    git init
  • 提交

    1
    2
    
    git add filename
    git commit -m "description"
  • 提交信息查看

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # 显示工作树状态
    git status
    
    # 显示版本库和工作树之间的不同
    git diff
    
    # 撤销最近一次 commit
    git reset --hard HEAD^
    
    # 重写最近一次提交信息
    git commit --amend -m "description"
    
    # 查看提交历史
    git log
  • 合并多次提交

    1
    2
    3
    4
    5
    6
    7
    
    git rebase -i HEAD~n
    # 将 pick 改为 squash 或 s
    
    # 注释掉不想要的 commit message
    
    # 放弃合并
    git rebase --abort

分支操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 显示本地所有分支
git branch

# 显示远程所有分支
git branch -a

# 重命名当前分支
git branch -m new_branch_name

# 切换分支
git checkout other_branch_name

# 删除本地分支
git branch -d branch_name

# 强制删除本地分支
git branch -D branch_name

# 根据当前分支创建新分支
git checkout -b new_branch

项目协同

当我们要往其他人的仓库里贡献代码时,需要

  1. fork 他人的代码仓到自己的 GitHub 仓库
  2. clone 到本地修改代码
  3. 提交代码到自己的代码仓
  4. 合并到他人的仓库

同步远程仓变更

  1. 添加远程分支
    1
    2
    3
    4
    
    # 添加远程分支
    git remote add upstream
    # 查看远程分支
    git remote -v
  2. 同步远程修改
    1
    2
    3
    4
    5
    6
    7
    8
    
    # 获取远程仓更新
    git fetch upstream
    # 切换到目标分支 xxx
    git checkout xxx
    # 将远程修改 merge 到本地
    git merge upstream/xxx
    # 提交到自己远程代码仓
    git push

实战技巧:删除远程仓库中的文件夹

假如我们在提交中不小心把一个不需要的文件夹提交到了远程仓库,而此时再写入 .gitignored 已经为时已晚,为了解决这一问题,可以这样做:

GitHub 在提交了之后无法在线删除文件夹,但是在本地 Git 库中却可以,只要在 Git 库中删除对应的缓存,再 push 到 GitHub 服务器,文件夹的删除目的就达成了

以下是具体操作:

1
2
3
git rm -r --cached 目录名
git commit -m '描述'
git push -u origin master

其他

推荐配合 alias 命令别名,实现快捷操作