我目前的项目中使用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以这种奇怪的无缝方式合并?
谢谢!
答案 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