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

时间:2017-02-15 10:22:41

标签: 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    

我对此感到惊讶并且我不明白:主分支上的git登录显示所有提交(一,二,三)但这些提交在功能分支上,而不是主。

我理解master分支上的最后一次提交是功能分支上先前提交链的后代。我希望在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

感谢。

2 个答案:

答案 0 :(得分:3)

Git日志显示了您指定的ref的祖先的所有提交。其他分支的存在与否都没有效果。它遍历提交图。

  

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

git中的提交不是" on"任何分支。分支是一个可移动的指针,用于命名提交(以及扩展名,该提交的所有祖先)。

通过将您的功能分支合并到主服务器 - 通过快进或合并 - 您可以将master的分支指针移动到某个新分支指针。此提交具有作为祖先在master上的先前提交。

  

那么做git merge --no-ff的兴趣是使用git log --graph而不是git log吗?

专门创建合并提交的值是记录合并的内容,何时以及由谁来记录。 git存储库在提交图中存储的历史记录,分支是短暂的。

答案 1 :(得分:1)

使用可以使用

git log --first-parent

仅查看您当前所在分支中的提交。(我理解,提交不位于任何分支上,如先前的回答所述)