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

在git拉取成功之前进行分支或标记,或者在git拉取成功之后准备潜在的构建失败?,git,undo,Git,Undo,假设我有一个应用程序在Git拉取成功后构建失败(例如编译失败)。我怎样才能“取消”合并并返回到以前的状态呢?我更喜欢使用git-rebase来完成这项工作,因为会弹出一个很好的列表,我可以在其中选择要删除的提交。选择要列出的提交数量,然后像这样调用 git rebase -i HEAD~3 样本清单 pick aa28ba7 Sanity check for RtmpSrv port pick c26c541 RtmpSrv version option pick 58d6909 Better

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

我更喜欢使用
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}

最好弄清楚它为什么不再建了。也许upstream对Makefiles中的依赖项不小心,您正试图将旧对象与新编译的对象结合起来。做一次彻底的清洁,通常是
makeclobber
makedistclean
或诸如此类的清洁,甚至是一次笨手笨脚的
git-clean


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

正如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’将失败,直到您这样做

在重基成功强制将更改推送到原点后,您可以使用一个半危险的命令:

git push -f

是否可以选择不直接在远程分支上工作?然后您可以
从存储库中拉出
,检查它是否已生成,如果已生成,
则在其上重新设置您的工作基础。谢谢Steven。现在有没有关于解决本地存储库和上游(源)存储库之间的断开连接的建议?我已经按照你的步骤做了,现在看来做一个快进是必要的,因为原点在前面2次提交。(我使用您的命令从本地git中删除了2次提交)