2

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

4

3 回答 3

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
于 2013-02-07T20:14:44.697 回答
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 将删除您删除的任何行的提交。

于 2013-01-23T00:48:39.653 回答
0

看一下git reflog,它记录了对存储库所做的更改。如果你最后一次搞砸了,你想回到HEAD@{1}.

最好找出为什么它不再构建。也许上游对 Makefile 中的依赖关系不小心,并且您正在尝试将旧对象与新编译的对象结合起来。做一个完整的清洁,通常make clobbermake distclean或一些这样的,甚至是严厉的git clean

无论如何,我会尝试为您免费获得的代码回馈一些东西,即使它只是一份详细的错误报告。

于 2013-01-23T00:54:15.347 回答