在开发中,熟练使用 Git
是非常重要的,这里有五个小技巧,可以帮助你更好地使用 Git
。
配置别名
在 Git 中可以通过配置别名来简化常用的 Git 命令,提高工作效率。配置 Git 命令别名的方法有两种,一种是使用 git config
命令;一种是修改 .gitconfig
或者 .git/config
文件。
git config
命令
我们可以直接在命令行中使用git config
命令来设置别名。示例如下,我们把 git status
命令设置别名为 st
,可以执行以下命令:
git
git config --global alias.st status
这样我们就可以通过 git st
来代替输入 git status
命令了。效果如下图所示:
注意这里的
--global
参数表示全局配置,这个别名将在你的所有 Git 仓库中都可用。如果你只想在当前仓库中设置别名,可以省略--global
参数,使用git config alias.st status
。
修改配置文件
除了在命令行配置外,我们还可以直接修改配置文件。如果想要全局配置,需要修改 .gitconfig
文件;如果只是应用于当前仓库,则只需修改 .git/config
文件。例如,在文件中添加以下内容:
git
[alias]
st = status
cm = commit
cma = "commit --amend"
内容搜索
git
除了对代码分支管理外,还可以使用 git grep
对内容进行搜索。如下图所示,使用 git grep -i -n "onCreate"
来搜索 onCreate
方法的代码位置。其中-i
表示忽略大小写,-n
表示显示代码行数,双引号内是搜索的内容,内容可以是正则表达式。
除了常规的搜索能力外,git grep
的功能都是与 git 相关联。比如说,我们可以使用 git grep
来直接搜索指定分支的内容。如下图所示,当我们在当前分支搜索 methodInTestGitBranch
方法时,没有结果。当指定 搜索范围为 test_git
分支时就可以找到我们想要的结果了。
更多关于 git grep
的命令,可以看官方文档 Git - git-grep Documentation
比较分支和提交
一般情况下,我们会使用 git diff
来比较文件在暂存区和工作区的差异。但是 git diff
的本事不止如此,它还可以比较不同分支或者不同提交(commit)的区别。
使用 git diff master test_git
命令就可以比较 master
分支 和 test_git
分支区别。 如果你只想比较指定文件的区别,可以添加 -- path
来限制。效果如下图所示:
如果需要比较提交的区别,命令也是一样的,效果如下图:
二进制文件处理
在 Git 中,可以使用 .gitattributes
文件来指定如何识别二进制文件(如果文件不存在的话创建一个 .gitattributes
文件)。示例如下:
git
*.jpg binary
*.png binary
*.pdf binary
*.zip binary
这会告诉 Git,所有扩展名为 .jpg
、.png
、.pdf
和 .zip
的文件都是二进制文件。除此之外,你还可以指定特定文件的处理方式,比如说你想比较图片和pdf文件的区别,可以使用 exiftool
和 pdfmeta
来比较不同。配置示例如下:
git
*.png diff=exiftool
*.pdf diff=pdfmeta
问题提交定位
当不知道什么地方出现问题时,可以使用 git 自带的二分法命令 git bisect
查找出错的提交。使用方法很简单,最开始你输入 git bisect start
,在输入 git bisect bad
告诉当前commit 是错误的,然后在输入 git bisect good commit
告诉 git 哪个 commit 是正常的。
接下来 git 就会根据你的输入情况,使用二分法来查找可能造成问题的提交。当找到问题提交后,需要使用 git bisect reset
命令来恢复初始状态。示例如下图所示,其中 add error
是一个错误的提交
使用 git bisect
来查找问题,效果如下: