有没有办法识别"抵押品"特定提交的提交(提交编辑相同的行并将导致冲突)?
一个非常简化的例子
$ 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
冲突的提交。
答案 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
结合使用,以根据您的需要搜索历史记录。