默认情况下,使用 git pull
拉取最新代码的时候,Git 会触发 git merge
来进行远端代码和本地代码的合并。如果两份代码之间没有冲突,那么 Merge 行为可以进行 Fast Forward,最终的结果是比较“干净”的 Commit;然而,如果 Fast Forward 无法进行,那么最终的显示效果,是 git 的历史中会多出一条 Merge 的 commit。
在绝大多数情况下,这类 Merge commit 都是多余的。这种时候,一般会建议使用 git pull --rebase
命令来拉取代码。这样,拿到最新代码后,Git 会使用 rebase 而不是 merge 来进行远端代码和本地代码的合并(关于 Merge 和 Rebase 的一些讨论,可以参考 Atlassian 的文章)。
当然,每次都这么写会比较繁琐。一个简单的方法,是通过 Shell 进行下面的 Git 配置:
git config --global pull.rebase true
或者,等价的,可以在 ~/.gitconfig
文件中,增加如下的配置信息:
[pull]
rebase = true
(针对 Git 版本小于 1.7.9 的情况,配置可以参考这里)
如此一来,git pull
的默认行为就会从 merge 变成 rebase。
在这种情况下,如果希望使用 merge 的行为,可以写 git pull --no-rebase
。