Skip to content

4个非常有用的Git命令

前言

注: 这是一篇英文翻译,加上一点自己的补充和发挥,原作者是System Design Newsletter网站的NK

Git有152个命令,但大部分人都没有用过功能最强大的那部分命令,下面4个必须知晓的命令会极大的帮助你提高工作效率。

命令1. git bisect

很多时候,我们发现某次提交代码后程序出现了bug,那么这个命令帮助快速定位到底是哪次提交引入了bug:

git-bisect - Use binary search to find the commit that introduced a bug

比如上一个版本6dba9d5b确定是工作良好的,而当前提交2829a8f6或HEAD存在bug,那么开始定位bug引入问题:

$ git bisect start 2829a8f6 6dba9d5b
Bisecting: 1 revision left to test after this (roughly 1 step)
[82db3e002] some commit messages

现在代码根据二分查找切换到上面两个提交之间位置的那个提交,然后现在你测试一下bug是否存在,如果不存在,那么说明bug和当前提交没有关系,标记一下:

$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[3e633428c3] some commit messages

它继续往前查找,你一次次的测试,发现切换到某个提交时,bug出现了,那么标记一下:

$ git bisect bad
3e633428c33 is the first bad commit

commit 3e633428c33
Author: someone <email>
Date:   commit time

    some commit messages

 file1     | 71 +++++++++++++++++++++++++++++
 file2     | 92 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 163 insertions(+)

现在定位到具体某次提交引入了bug,通知具体的开发人员查看即可;停止定位bug查找工作,恢复到之前分支:

$ git bisect reset

命令2. git add -i

相对于 git add . 来说,它会把很多不相干的修改或文件都暂存起来,这可能不是我们想要的。

$ git add --help

 -i, --interactive
           Add modified contents in the working tree interactively to the index. 
           Optional path arguments may be supplied to limit operation to a subset
           of the working tree. See “Interactive mode” for details.

如果使用 git add -i, 则可以选择性的只暂存我们确实想要的代码文件:

$ git add -i
           staged     unstaged path
  1:       +0/-29      nothing file1
  2:       +0/-63      nothing file2

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff       7: quit     8: help
What now>
What now> help
status        - show paths with changes
update        - add working tree state to the staged set of changes
revert        - revert staged set of changes back to the HEAD version
patch         - pick hunks and update selectively
diff          - view diff between HEAD and index
add untracked - add contents of untracked files to the staged set of changes
What now> quit

命令3. git blame

这个命令可以帮助你查看某个特定文件的修改历史,比如哪个人、哪个时间点、具体修改的代码行内容等,提高debug效率。

git-blame - Show what revision and author last modified each line of a file

命令4. git stash

想象一下,你正开发一个功能,突然有一个新的开发任务需要优先完成,但你目前的代码还不足以提交,那么 git stash 命令可以把当前的修改保存起来,创建一个干净的代码环境:

$ git stash

Saved working directory and index state WIP on v0.0.1: 3e63342 some commit messages

然后,等有空的时候,你回过头来想继续开发之前的功能,那么可以看看都保存了多少个只修改一半的代码:

$ git stash list

stash@{0}: WIP on v0.0.1: 3e63342 some commit messages

快速把之前修改到一半的代码拿出来:

$ git stash pop stash@{0}

Dropped stash@{0} (8646423361b9b0ee77be3a65ce6e2843f0f86a1c)

代码文件都恢复到之前的修改状态,现在可以继续在之前工作基础上继续开发了。