git revert:在实际还原之前是否可以识别可能存在冲突的提交?

时间:2016-01-08 20:18:54

标签: git git-revert

有没有办法识别"抵押品"特定提交的提交(提交编辑相同的行并将导致冲突)?

一个非常简化的例子

$ git init
$ echo test > test
$ git add test
$ git commit -m "First commit"
$ echo test1 > test
$ git commit -am "Second commit"
$ git l
* 95a29dd Second commit
* 30a68e6 First commit
$ type test
test1

假设此时由于某种原因我想恢复30a68e6

$ git revert 30a68e6
error: could not revert 30a68e6... First commit
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'

当然,这会导致冲突,因为95a29dd编辑了同一行。

是否有可能提前发现恢复30a68e6会导致冲突,如果是,则提交什么(即95a29dd)?

为了给出一些上下文,我需要这个,因为我需要一些提交才能自动恢复。在这种情况下,如果我知道应该还原30a68e6,我希望能够识别&#34;抵押品&#34;提交,应首先恢复以避免任何冲突(如30a68e6)。我知道恢复所有30a68e6..HEAD只会有效,但我希望避免恢复不会与30a68e6冲突的提交。

2 个答案:

答案 0 :(得分:2)

(免责声明:此答案类似于我对Is there some kind of 'git rebase --dry-run', which would notify me of conflicts in advance?的回答。)

  

是否有可能提前发现恢复30a68e6会导致冲突,如果是,则提交什么(即95a29dd)?

在撰写本文时(Git v2.7.0),在实际尝试恢复之前,Git无法找出你是否会遇到冲突。

但是,如果您运行git revert并遇到冲突,则该过程将停止并以非零状态退出。您可以做的是检查还原操作的退出状态,如果它不为零,则运行git revert --abort取消还原:

git revert ... || git revert --abort

答案 1 :(得分:0)

git revert应该很容易撤消。检查还原的返回代码,如果失败则返回git revert --abort(返回代码1)或git reset --hard HEAD~1如果成功(返回代码0)并且您不想保留它。

您可以将其与git bisect结合使用,以根据您的需要搜索历史记录。