假设我有一个应用程序在成功的Git拉动后失败构建(例如编译失败)。我怎样才能“取消”合并并回到以前的状态?
答案 0 :(得分:1)
正如vonbrand指出的那样,你可以看到最近的reflog条目:
git reflog
一旦你知道大约有多远,让我们说10次提交,你发出一个交互式 rebase命令,就像Steven Penny指出的那样:
git rebase -i HEAD~3
这引起了编辑的注意。在其中,您可以选择完全删除提交或对每个提交执行其他操作。您在编辑器中删除的每一行都将被删除。内联的Git注释非常有用,但这很重要,要记住我在这里提到它。它看起来像这样,可能混合了好的和坏的提交:
pick 8042b55 Added important file
pick 3459cce Add junk files
pick cb2e26d Adding another change I want to keep
pick b00221f Add stuff I won't want to keep in the file.
# Rebase b0fd283..b00221f onto b0fd283
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
请记住将更改推送到服务器。在你这样做之前,'git pull'会失败。
这是一个半危险的命令,你可以在rebase成功强制将更改推送到原点后使用:
git push -f
答案 1 :(得分:0)
我更喜欢使用git rebase
来完成这项工作,因为会弹出一个很好的列表,我可以选择要删除的提交。选择要列出的提交数量,然后像这样调用
git rebase -i HEAD~3
样本列表
pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support
然后git将删除您删除的任何行的提交。
答案 2 :(得分:0)
查看git reflog
,它会记录对存储库所做的更改。如果你最后搞砸了东西,你想回到HEAD@{1}
。
更好地找出为什么它不再构建。也许上游对Makefile中的dependecies不小心,你试图将旧对象与新编译的对象结合起来。彻底清理,通常为make clobber
或make distclean
或某些此类,甚至是严厉的git clean
。
在任何情况下,我都会尝试为您免费获得的代码提供一些回馈,即使它只是一个详细的错误报告。