我阅读了有关git merge --no-ff的文档。
我尝试了一下,结果是:
Mini-de-MiniMac:ZtestGit minimac$ git branch
feature
* master
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
50d9f108d70798a13cc25fb7321d57ad5ba61854 three
d7163bc5320162689544293be1ac2228c6e3dc34 two
a7ba4c797d49d940a7d64a8ddaba787eb013622a one
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
|\
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three
| * d7163bc5320162689544293be1ac2228c6e3dc34 two
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one
|/
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
我对此感到惊讶并不理解:在主分支上使用git log显示所有提交(one,two,three),但这些提交位于特性分支而非主分支上。
我知道主分支上的最后一个提交是特性分支上先前提交链的一个子孙。我期望像在主分支上进行rebase一样,只能看到主分支上的第一个和最后一个提交。你能解释一下为什么会有所不同吗?
那么执行git merge --no-ff的好处是为了使用git log --graph而不是仅使用git log吗?
我还发现了一个更奇怪的现象:当我删除特性分支时,git会显示该分支已被删除,但git log和git log --graph结果与之前完全相同:提交和特性分支仍然存在。你能解释一下吗?
Mini-de-MiniMac:ZtestGit minimac$ git branch
feature
* master
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
50d9f108d70798a13cc25fb7321d57ad5ba61854 three
d7163bc5320162689544293be1ac2228c6e3dc34 two
a7ba4c797d49d940a7d64a8ddaba787eb013622a one
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
|\
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three
| * d7163bc5320162689544293be1ac2228c6e3dc34 two
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one
|/
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
Mini-de-MiniMac:ZtestGit minimac$ git branch
feature
* master
Mini-de-MiniMac:ZtestGit minimac$ git branch -d feature
Deleted branch feature (was 50d9f10).
Mini-de-MiniMac:ZtestGit minimac$ git branch
* master
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
50d9f108d70798a13cc25fb7321d57ad5ba61854 three
d7163bc5320162689544293be1ac2228c6e3dc34 two
a7ba4c797d49d940a7d64a8ddaba787eb013622a one
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option
|\
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three
| * d7163bc5320162689544293be1ac2228c6e3dc34 two
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one
|/
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start
谢谢。
git log --graph --decorate --all
可以展示更清晰的图片。 - Josh Leegit merge --no-ff
强制创建一个合并提交,因此您将始终看到另一个分支上的提交,因为它们是创建提交的祖先。无论其他分支是否存在,都没有关系--这些提交都在那里,因为它们是可达的。 - Samir Aguiar