分支或标记之前,或者在成功git pull之后准备潜在的构建失败?

时间:2013-01-23 00:40:51

标签: git undo

假设我有一个应用程序在成功的Git拉动后失败构建(例如编译失败)。我怎样才能“取消”合并并回到以前的状态?

3 个答案:

答案 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 clobbermake distclean或某些此类,甚至是严厉的git clean

在任何情况下,我都会尝试为您免费获得的代码提供一些回馈,即使它只是一个详细的错误报告。

相关问题