使用“git revert”来支持添加一行的更改?

时间:2012-04-15 05:25:30

标签: linux git

以下的pastebin是一个repo,每行有一个,两个,三个,四个,五个类型的文件。

每行都单独提交到git:

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

这不是说删除除了一个之外的一切吗?我原以为只会有两个受到影响...

git 1.7.10

2 个答案:

答案 0 :(得分: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.

然后提交结果。

答案 1 :(得分:1)

更改将保存为上下文差异...如果您查看third的差异,您会注意到它是根据包含two的行应用的,这意味着它是依赖的在引入two的提交上。同样,每个连续提交依赖于前一次提交,这就是为什么它要删除引入two之后的所有提交(因为它们最终都依赖于该提交)。这就是为什么你不应该依赖于能够在一般情况下恢复提交,而只是在提交后立即恢复提交。