我有些困惑git合并是如何在合并过程中创建提交的。我已经阅读了《Pro Git》和《Git社区书》,但仍感到困惑。
考虑以下情况:我有一个名为“origin”的git仓库:
master
|
a0--a1--a2--a3
\
-b0--b1
|
branch2
我将这个仓库克隆到本地并只在本地工作。在branch2中,我执行了“git merge master”命令。现在我的本地仓库看起来像这样:
master / origin/master
|
a0--a1--a2--a3
\ \
-b0--b1-----merge
| |
origin/branch2 |
branch2
因此,合并后创建了1个提交,名称为“merge”,在“b1”提交之后。对于branch2的“git log”显示了预期的图形:
> git log branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
|\
| * 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
| * 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
| * 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
* | 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* | 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
|/
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
此外,如果我回到当前主提交之前的一个提交,我会到达预期的b1提交。(在图表中跟随branch2线并返回1个提交)
> git log branch2~ --graph --pretty=oneline --decorate
* 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
我有些困惑。我还没有将我的更改推送到远程仓库,但是当我执行“git status”时,Git说我的本地branch2比origin/branch2领先4个提交。我以为合并只会产生一个新的“合并”提交,就像上面的图表/图示中看到的那样?为什么是4个呢?
> git status
# On branch branch2
# Your branch is ahead of 'origin/branch2' by 4 commits.
#
nothing to commit (working directory clean)
此外,从origin/branch2到branch2执行“ git log”命令时,显示了4个提交记录,而不是我预期的1个(从“b1”到“merge”)。
> git log origin/branch2..branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
* 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
* 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
* 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
我理解这4个提交包括主分支(master)的3个提交(a1,a2,a3),这些提交应该被合并到第二分支(branch 2)中,再加上一个“合并”提交。但是为什么图形不以这种方式显示呢?如果是这样的话,它应该是这样的:
master / origin/master
|
a0--a1--a2--a3-----------
\ \
-b0--b1--a1'--a2'--a3'--merge
| |
origin/branch2 |
branch2
分支2会将我带到a3'而不是b1。感谢您提前的任何帮助。
git merge --squash
。 - hammar