2012-04-15 64 views
4

以下pastebin是一个包含一行,二行,三行,四行和五行的文件的回购。使用“git revert”来退出添加一行的更改?

每条线分别COMMITED到混帐:

http://pastebin.ca/raw/2136179

我再尝试删除线两条用命令git revert <commmit which creates two>

并获得:

error: could not revert b4e0a66... second 
hint: after resolving the conflicts, mark the corrected paths 
hint: with 'git add <paths>' or 'git rm <paths>' 
hint: and commit the result with 'git commit' 

应该有这个简单的东西没有冲突吗?还是我做错了/得到了错误的命令?

合并细节似乎并没有什么意义之一:

one 
<<<<<<< HEAD 
two 
three 
four 
five 
======= 
>>>>>>> parent of b4e0a66... second 

那不是说删除一切,但一个?我期待只有两个受影响......

混帐1.7.10

回答

1

更改保存为环境差异列表...如果你看一下DIFF为third,你会发现,它是在应用包含two的行的条款,这意味着它依赖于引入two的提交。同样,每个后续的提交都依赖于前一个提交,这就是为什么它要删除引入了two之后的所有提交(因为它们都最终取决于该提交)。这就是为什么你不应该依赖于能够在一般情况下恢复提交,而只能在提交之后立即提交。

+0

好吧,你是说我应该只使用这个命令,我可能会做git reset --hard HEAD ^? – sabgenton 2012-04-15 06:32:24

+0

那么它会仍然是有用的,如果你推了,但没有我所希望的那么有用..(我不太可能在一次推挤上就塞满了) – sabgenton 2012-04-15 06:33:10

+0

我试过手动方式做'hg backout'在这里描述http://mercurial.selenic.com/wiki/Backout(用退房取代还原),同样的事情发生! – sabgenton 2012-04-15 10:32:29

2

我试着重复你的步骤,发现同样的问题。看起来你只能恢复最近的提交。 在我的仓库:

$ git log --oneline 
9a25594 five 
f8f1ec4 four 
3c75345 three 
e6cd245 two 
8349ccc one 
d2f16c4 for stkofl <<==== ignore this one 

$ git revert 9a25 --no-edit 
Finished one revert. 
[master 82bbc79] Revert "five" 
1 files changed, 0 insertions(+), 1 deletions(-) 
$ git reset --hard 
HEAD is now at 82bbc79 Revert "five" 

还原任何一组提交的,是不是一组连续的提交,包括HEAD的(最近提交)似乎被禁止。

当然,你可以这样做:

$ git show e6cd |patch -R 
    patching file file 
    Hunk #1 succeeded at 1 with fuzz 1. 

,然后提交结果。

+0

您肯定可以恢复不近期的提交。在这种情况下它不起作用。 – svick 2012-04-15 15:14:35

+1

Yuck但很好说!如果最新版本的git有--strategy = 修复程序,我很想知道如果不是,我会最终为您提供“patch -R”管道的勾号。 – sabgenton 2012-04-16 01:59:54

+0

我需要使用'patch -R -p1'来获取(几乎)工作。 'git show'的输出在'a/file'和'b/file'之间有一个diff,不需要添加'-p1'选项就可以应用。最终,事情发生了很大的变化,以至于很多变化最终都被我的情况下的“补丁”所拒绝,但我可以将它们整理出来。 – tripleee 2014-05-22 05:21:17