对于具有单个提交的已完成分支的情况,不要使用--no-ff
,只需快进它,因为历史记录会更简单且不那么混乱。在这种情况下,很难争辩这--no-ff
会给你带来什么好处,因为看到一个并行的开发分支只有一个提交,而不是一个连续的提交,这很无趣:
# No fast-forward
$ git merge --no-ff awesome-feature
* 3aa649c Merge branch 'awesome-feature'
|\
| * 35ec88f Add awesome feature
|/
* 89408de Modify feature-001.txt and fix-001.txt
* c1abcde Add feature-003
# versus fast-forward
$ git merge awesome-feature
* 35ec88f Add awesome feature
* 89408de Modify feature-001.txt and fix-001.txt
* c1abcde Add feature-003
对于包含多个提交的已完成分支的情况,是否要保留分支开发并行与顺序发生的事实取决于您。我可能会使用--no-ff
不止一个提交,这样我就可以直观地看到这个分支的工作,并且git revert -m 1 <sha-of-merge-commit>
如果我需要的话,我可以用一个简单的操作来轻松地操作它。
# No fast-forward
$ git merge --no-ff epic-feature
* d676897 Merge branch 'epic-feature'
|\
| * ba40d93 Add octocat.txt
| * b09d343 Add bye.txt
| * 75e18c8 Add hello.txt
|/
* 89408de Modify feature-001.txt and fix-001.txt
* c1abcde Add feature-003
# versus fast-forward
$ git merge epic-feature
* ba40d93 Add octocat.txt
* b09d343 Add bye.txt
* 75e18c8 Add hello.txt
* 89408de Modify feature-001.txt and fix-001.txt
* c1abcde Add feature-003
看看在这种快进合并的情况下,在提交消息本身没有附加信息的情况下,很难说最后 3 次提交实际上属于一个特性吗?