我有两个项目(A和B)都有“master”和“devel”分支。在项目A中,我将“devel”与“master”合并(git还要求我添加合并消息),然后在master分支上将最后一次提交标记为“v1.0”。当我在项目A的主分支上发出“git show v1.0”时,输出很简单:
tag v1.0
Tagger: Ekin Akoglu <XXX@XXX.XXX.XXX.XXX>
Date: Tue Mar 3 17:33:52 2015 +0100
Version 1.0 - Rozana
commit 3bede2111540b0b57ae994e3a16a98203c07c02e
Merge: 179d4b1 cd3337a
Author: Ekin Akoglu <XXX@XXX.XXX.XXX.XXX>
Date: Tue Mar 3 17:01:35 2015 +0100
Merge branch 'Tampa_Bay'
Implementation of EwE 6.5 modifications. Updated testcase files.
在项目B中,我还将“devel”与“master”合并(git没有要求我添加合并消息)。但是,在“devel”分支上,我错误地将最后一次提交标记为“v1.0”。然后我删除了这个标签并切换到项目B的“master”分支,并将最后一次提交标记为“v1.0”。然后,我发出了“git show v1.0”,输出是
tag v1.0
Tagger: Ekin Akoglu <XXX@XXX.XXX.XXX.XXX>
Date: Tue Mar 3 19:37:07 2015 +0100
version 1.0 - Rozana
commit 0835d7
Author: Ekin Akoglu <XXX@XXX.XXX.XXX.XXX>
Date: Tue Mar 3 16:57:03 2015 +0100
Implemented EwE 6.5 modifications. Updated test case files
and respective comparative scripts. Removed mosca0D test cases.
在上面的消息末尾附加了很多git-diff输出。任何人都可以告诉我两个项目之间的区别是什么,以便项目B显示附加到标记消息摘要末尾的git-diff输出,而项目A没有?
谢谢。
答案 0 :(得分:1)
在项目A 中,标记v1.0位于合并提交上。 Git要求您提供合并消息,因为快进是不可能的。只要目标分支的提示不在您要合并的分支的直接历史记录中,就会发生这种情况。您可以在图形历史记录查看器中轻松查看,或者只需查看上面输出中的行Merge: 179d4b1 cd3337a
即可。
在项目B 中,您的合并是快进,因为master
上没有任何更改(即它在{的直接历史记录中{1}})。因此,您的v1.0标记处于正常提交状态。
如果您使用develop
,则此差异很重要,因为git show
将始终显示引用的提交引入的差异。在项目A中,如果您的合并没有引入任何修改(即在合并期间没有修改添加的内容,没有解决冲突......),则没有差异。在项目B中,您会看到差异,因为标记的提交是“正常”提交。
合并时你可以做的是强制合并提交git show
:
--no-ff
这将产生与项目A相同的git checkout master
git merge develop --no-ff
输出。执行merge-commits是一个好习惯,因为合并提交消息将包含合并中包含的所有提交消息的列表(参见{{3例如)。