git merge --no-ff 后的 git log 显示合并的其他分支的所有提交

Ber*_*tta 5 git merge

我阅读了有关 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)

谢谢。

Ari*_*tle 5

使用可以使用

git log --first-parent
Run Code Online (Sandbox Code Playgroud)

查看仅对您当前所在的分支进行的提交。(我知道提交不在任何分支“上”,如前面的答案所述)


Jos*_*Lee 3

Git 日志显示作为您指定的引用的祖先的所有提交。其他分支的存在或不存在没有影响。它遍历提交图。

这些提交位于功能分支上,而不是主分支上

git 中的提交不在任何分支上。分支是一个可移动的指针,它命名一个提交(并且通过扩展,命名该提交的所有祖先)。

通过将功能分支合并到 master 中(通过快进或合并),您可以将 master 的分支指针移动到该分支的某个新提交。该提交以 master 上的前一个提交为祖先。

那么 git merge --no-ff 的兴趣是与 git log --graph 一起使用而不仅仅是 git log 吗?

专门创建合并提交的价值在于记录合并的内容、合并时间和合并者。git 存储库在提交图中存储历史记录,分支是短暂的。