合并冲突后,在日志中看不到Git文件更改

时间:2013-05-16 20:06:37

标签: git

我目前的项目中使用git树的情况非常奇怪。

在文件a.txt,我确实提交了id = my_new_contents_commit,并将其更改为:

old contents
old contents
old contents

要:

old contents
old contents
old contents
my new contents

同时(没有合并此提交),其他团队成员做了一些更改。然后他拉出了我的更改并合并了id = interesting_merge(他使用了一些名为“tower”的git工具)。该合并提交的git show显示如下:

➤ git show interesting_merge
commit interesting_merge
Merge: some_commit my_commit_with_new_contents_being_there
Author: _
Date:   Thu May 16 19:55:27 2013 +0300

    Merge branch 'master' of _

    Conflicts:
        static/css/style.css

所以,合并期间似乎存在一些冲突,我不确定它们是如何解决的。有趣的是,在此合并之后,文件再次出现在旧版本中。所以,如果你这样做

➤ git checkout interesting_merge
➤ cat a.txt
old contents
old contents
old contents

你会得到旧内容。这怎么可能?我怎么能看到a.txt以这种奇怪的无缝方式合并?

谢谢!

1 个答案:

答案 0 :(得分:2)

git show没有为许多父提交提交显示的diff,因为git不知道N差异是什么(其中N是父提交的数量)它应该显示

当你手动解决一些冲突时,这个差异只存在于提交消息中,而不再存在。

  

怎么可能?

易。在此合并提交my new contents刚刚删除。你应该在两个差异中找到它:

  • 在合并提交和它的第一个父提交之间的差异
  • 合并提交与第二次提交之间的差异

最后,git diff SHA^!应该有用。


如何做到。

假设我们有2次提交

$> git log --oneline
30917b9 add my new contents
d6a09ba add a.txt

并且最后一次提交与您的

类似
$> git show 
commit 30917b94b6e6740cacc854e891d67d29195b98c3
Author: b <a>
Date:   Fri May 17 00:29:56 2013 +0400

    add my new contents

diff --git a/a.txt b/a.txt
index 3be5d25..af49de6 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,4 @@
 old contents
 old contents
 old contents
+my new contents

然后有人根据第一次提交(d6a09ba)进行更改:

commit f6997eae5f40f156897eedfbf058bcf3fe8730b6
Author: b <a>
Date:   Fri May 17 00:34:38 2013 +0400

    I don't care about new contents

diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..d099a6a
--- /dev/null
+++ b/b.txt
@@ -0,0 +1 @@
+well, this is a new file

他试图推动并拒绝:[

$> git push origin
To jws:~/test.git
 ! [rejected]        HEAD -> master (non-fast-forward)

然后他拉你的提交并进行合并

$> git pull origin master
From jws:~/test
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 a.txt | 1 +
 1 file changed, 1 insertion(+)

这是一个像Merge branch 'master' of jws:~/test这样的提交消息。然后他编辑文件a.txt,将其添加到使用git add a.txt的登台,添加登台以提交git commit --amend并瞧:

$> git show
commit 51a3f94436cf1a9a763d84acfcf7202f9f2d88ec
Merge: f6997ea 30917b9
Author: b <a>
Date:   Fri May 17 00:36:56 2013 +0400

    Merge branch 'master' of jws:~/test

a.txt中的更改没有任何内容,但我们可以在其中一个差异中看到它被修改:

$> git diff 51a3f94436cf1a9a763d84acfcf7202f9f2d88ec^2 51a3f94436cf1a9a763d84acfcf7202f9f2d88ec
diff --git a/a.txt b/a.txt
index af49de6..3be5d25 100644
--- a/a.txt
+++ b/a.txt
@@ -1,4 +1,3 @@
 old contents
 old contents
 old contents
-my new contents
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..d099a6a
--- /dev/null
+++ b/b.txt
@@ -0,0 +1 @@
+well, this is a new file