以下的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
答案 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
之后的所有提交(因为它们最终都依赖于该提交)。这就是为什么你不应该依赖于能够在一般情况下恢复提交,而只是在提交后立即恢复提交。