为什么合并这些分支什么都不做?

时间:2016-01-06 19:48:14

标签: git git-merge

简短版:

我有两个分支,内容不同。当我在一个分支机构并从另一个分支机构进行合并时,它会说“已经是最新的”。这怎么可能呢?

我现在甚至没有做过拉动,只是从本地分支合并,以保持简单。

可能会有太多细节。

我将以一个特定文件为例。在分支主机(我正在编辑电子邮件地址和旧提交):

$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

$ git log mde/ss/schools/_clone/segmeta.csv
commit 9e9ee2b19e7a476f2d61ecff1c5d54634132dd93
Author: gormleycep <redacted>
Date:   Mon Nov 23 11:18:41 2015 -0800

    Fixes spacing issues in segmeta files (my mistake)

commit 6e341cd2a92a1044c957a7a9631e365a08466440
Author: gormleycep <redacted>
Date:   Fri Nov 6 12:36:52 2015 -0800

    Updated percent positive tables

commit efc05d8b838fb3e8efdc074b65d1a93046c7e6c9
Author: Alan deLespinasse <redacted>
Date:   Tue Aug 11 18:46:42 2015 -0400

    Fix missing segmentations in MDE Secondary School reports.

在分支BTP_E2ESCH中:

$ git checkout BTP_E2ESCH
Checking out files: 100% (2330/2330), done.
M       common
Switched to branch 'BTP_E2ESCH'
Your branch is up-to-date with 'origin/BTP_E2ESCH'.

$ git log mde/ss/schools/_clone/segmeta.csv
commit 9367a601eef9a7a8975a0cf22d5b49b163a3710c
Author: cepbrian <redacted>
Date:   Fri Nov 13 16:17:49 2015 -0500

    trying to add end to end tests.

commit efc05d8b838fb3e8efdc074b65d1a93046c7e6c9
Author: Alan deLespinasse <redacted>
Date:   Tue Aug 11 18:46:42 2015 -0400

    Fix missing segmentations in MDE Secondary School reports.

11月13日由cepbrian所做的更改与11月6日由gormleycep所做的更改相同(两个更改都将相同的两行添加到文件中)。 gormleycep在11月23日做出的改变消除了这两条线的空间。这两个分支中的文件肯定不一样。现在我做:

$ git merge master
Already up-to-date.

分支BTP_E2ESCH中的文件没有改变。

以下是gitk --all --date-order mde/ss/schools/_clone/segmeta.csv的输出,以便于显示:

enter image description here

Git会在哪个国家出现这种情况?

1 个答案:

答案 0 :(得分:2)

我认为问题是git log -- <filename>的输出可能有点欺骗。来自man git-log

  

[ - ] ......              仅显示足以解释文件的提交              匹配指定的路径。

并重定向到历史简化部分,其中有很多细节......

我的意思是您的分支可能已经合并,但您在简化的日志中看不到它!

最好用一个例子来看。让我们考虑一下这个存储库:

A----B----C----M
     \----T----/

有分支的地方,test指向Tmaster指向M,这是合并提交。存储库中有一个file,每个提交都有这个内容:

A: 1
B: 2
C: 3
T: ttt
M: 3

test合并到master时发生了冲突,这是通过从T丢弃版本来解决的。

现在,如果我从mastergit log开始,我会:

M
C
T
B
A

但如果我运行git log -- file,我会得到:

C
B
A

因为TM提交对文件的最终内容没有影响。这是历史简化

您可以运行git log --full-history -- test以获取触及该文件的所有提交:

M
C
T
B
A