1

遵循 Nvie 的 git 分支模型,为什么在将相同的 'release' 分支合并到两者之后,我最终会得到 'develop' 和 'master' 前 1 和后 1?如果将相同的“发布”分支合并到每个分支中,那么 master 和 development 不应该同意吗?

x   84a628d      (origin/develop, develop) Merge branch 'release-v3.0.1' into develop
|\  
| | x   2e4d60b  (HEAD, v3.0.1, origin/master, master) Merge branch 'release-v3.0.1'
| | |\  
| | |/  
| |/|   
| x | 716ce96    (release-v3.0.1) Version 3.0.1
|/ /  
x | fe3b54d      Some more more code
x | 3683892      Some more code
x | 8c0b835      'develop' branch code
|/  
x   d051b54      (v3.0) Baseline merge. Merge remote-tracking branch 'origin/master'

$ git log origin/master ^origin/develop

commit 2e4d60b7d6760b4f6b2328ab06150b020b0d279f
Merge: d051b54 716ce96
Author: Todd 
Date:   Tue Mar 26 11:27:59 2013 -0400

Merge branch 'release-v3.0.1'

$ git log origin/develop ^origin/master

commit 84a628d96653ed196faa6387c8b208badf23aa75
Merge: fe3b54d 716ce96
Author: Todd 
Date:   Tue Mar 26 11:31:53 2013 -0400

Merge branch 'release-v3.0.1' into develop

我错过了什么?

4

1 回答 1

2
git log origin/master ^origin/develop

此命令显示所有可访问origin/master但不可访问的提交origin/develop

git log origin/develop ^origin/master

此命令显示所有可访问origin/develop但不可访问的提交origin/master

上述两个命令的输出似乎与您显示的图表一致。

如果您打算找出 2 个分支内容的差异,则应该使用该git diff命令。

git diff origin/master..origin/develop

如果您只想要不同的文件列表,您可以使用以下--name-status选项:

git diff --name-status origin/master..origin/develop

在 git 中,提交的 SHA1 是根据父提交的 SHA1、提交消息、时间戳和许多其他此类信息计算的。尽管您已将相同的release-v3.0.1分支合并到两者masterdevelop,但您已经在 2 个不同的时刻将其作为 2 个独立的合并完成。这显然不会为两者产生相同的提交 SHA1。

你应该做的是以下之一:

选项1:

git checkout master:
git merge release-v3.0.1

git checkout develop:
git merge master

git checkout master
# This would be a fast-forward merge
git merge develop

选项 2:

git checkout develop:
git merge release-v3.0.1

git checkout master:
git merge develop

git checkout develop
# This would be a fast-forward merge)
git merge master

这样,您最终会得到两个masterdevelop分支都指向同一个提交。

即使现在,您也可以通过合并或相反的方式进入相同的状态masterdevelop并在另一个分支上进行快进合并。

git checkout master
git merge develop

git checkout develop
# This would be a fast-forward merge
git merge master
于 2013-03-26T16:30:09.943 回答