假设我有一个应用程序在 Git 拉取成功后构建失败(例如编译失败)。我怎样才能“取消”合并并恢复到以前的状态?
3 回答
正如 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
我更喜欢使用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 将删除您删除的任何行的提交。
看一下git reflog
,它记录了对存储库所做的更改。如果你最后一次搞砸了,你想回到HEAD@{1}
.
最好找出为什么它不再构建。也许上游对 Makefile 中的依赖关系不小心,并且您正在尝试将旧对象与新编译的对象结合起来。做一个完整的清洁,通常make clobber
或make distclean
或一些这样的,甚至是严厉的git clean
。
无论如何,我会尝试为您免费获得的代码回馈一些东西,即使它只是一份详细的错误报告。