为什么git revert在这个例子中失败了?

时间:2015-11-20 03:04:52

标签: git

一位同事正在玩git revert今天他结束了一个奇怪的情况:

git init
echo 1 > file.txt
git add file.txt
git commit -m "Commit 1"
# Say this generates hash aaa

cat file
1

echo 2 >> file.txt
git add file.txt
git commit -m "Commit 2"
# Say this generates hash bbb

cat file
1
2

echo 3 >> file.txt
git add file.txt
git commit -m "Commit 3"
# Say this generates hash ccc

cat file
1
2
3

git revert bbb
#line above does not work

还原不起作用,最终会出现挑选情况。我期待以下结果:

cat file
1
3

diff -R工作正常

diff --git b/file.txt a/file.txt
index aaa..bbb 100644
--- b/file.txt
+++ a/file.txt
@@ -1,2 +1 @@
 1
-2

这可能是非常愚蠢的事情,但是什么?

1 个答案:

答案 0 :(得分:3)

这只是合并冲突的反面。一场不合并的冲突?您可以将恢复视为合并的反面。如果你试图在相反的方向做同样的事情,你会得到合并冲突。

$ git init
Initialized empty Git repository in /home/depp/test/.git/
$ echo 1 > file.txt
$ git add .
$ git commit -m A
[master (root-commit) 406d008] A
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
$ echo 2 >> file.txt
$ git add .
$ git commit -m B
[master 730fed9] B
 1 file changed, 1 insertion(+)
$ git branch branch1 'HEAD^'
$ git checkout branch1
Switched to branch 'branch1'
$ echo 3 >> file.txt
$ git add .
$ git commit -m C
[branch1 c359c04] C
 1 file changed, 1 insertion(+)
$ git merge master
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

您可能认为答案“显而易见”,您甚至可能希望向Git开发人员提交错误或增强请求,但Git认为答案不明显。 Git认为你应该把“3”放在“2”之后,但是现在没有“2”所以你应该在哪里放“3”?

如果某个更改的上下文不存在,Git会向您寻求帮助,这有一定的意义,因为这些是您可能需要手动修复的情况。

联盟合并?

我尝试在merge=union .gitattributes中为file.txt指定skView.showsFPS = true ,但这最终导致恢复没有做任何事情。怪异。