我阅读了有关 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
Run Code Online (Sandbox Code Playgroud)
我对此感到惊讶,我不明白:主分支上的 git log 显示所有提交(一、二、三),但这些提交位于功能分支上,而不是主分支上。
我知道主分支上的最后一次提交是功能分支上先前提交链的后代。我希望在 master 分支上进行 rebase,并且只看到 master 上的第一个和最后一个提交。您能向我解释一下为什么不同吗?
那么 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
Run Code Online (Sandbox Code Playgroud)
谢谢。
使用可以使用
git log --first-parent
Run Code Online (Sandbox Code Playgroud)
查看仅对您当前所在的分支进行的提交。(我知道提交不在任何分支“上”,如前面的答案所述)
Git 日志显示作为您指定的引用的祖先的所有提交。其他分支的存在或不存在没有影响。它遍历提交图。
这些提交位于功能分支上,而不是主分支上
git 中的提交不在任何分支上。分支是一个可移动的指针,它命名一个提交(并且通过扩展,命名该提交的所有祖先)。
通过将功能分支合并到 master 中(通过快进或合并),您可以将 master 的分支指针移动到该分支的某个新提交。该提交以 master 上的前一个提交为祖先。
那么 git merge --no-ff 的兴趣是与 git log --graph 一起使用而不仅仅是 git log 吗?
专门创建合并提交的价值在于记录合并的内容、合并时间和合并者。git 存储库仅在提交图中存储历史记录,分支是短暂的。