momo zone

调核人的blog

Monthly Archives: 十一月 2014

避免git自动合并提交的产生

使用git做过多人合作开发的人肯定会遇到这样的问题:

1.A向服务器推送了一个新提交

2.B生成了一个新提交,还未推送

3.B推送时被告知远程尚有新提交(A提交的)未拉下来

4.B执行git pull,本地内容与远程同步,同时产生一个新提交,内容是远程与B的提交的合并。

这样看起来是正常的,但长此以往在用gitk看历史记录的时候就会发现是这个样子:

gitk

一团糟。对于不需要分支的小项目开发,这种合并提交是没有意义的。那么怎么避免这种情况呢?

对于B来说,使用git pull –rebase会进行如下的工作:

git将回退(undo)所有本地未推送的提交,然后将远程提交在本地重放再在此基础上将本地未推送提交以补丁的形式打上去。打补丁的时候如果遇到无法自动处理的冲突则需要手动处理,然后执行git rebase –continue去刷新本地提交。

如果需要默认在git pull的时候自动rebase可以编辑.git/config

[branch “master”]
  rebase = true

或者git config branch.master.rebase true
如果要更改全局设置可以git config –global branch.autosetuprebase always

此外在本地进行分支合并时也会产生合并提交,可以使用git merge –no-commit –no-ff <local-branch>避免提交产生,然后再git commit -a。

Advertisements