“git show <tag>”将“git diff”输出附加到标记摘要</tag>的末尾

时间:2015-03-03 19:21:10

标签: git git-merge git-tag

我有两个项目(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没有?

谢谢。

1 个答案:

答案 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例如)。