【问题标题】:Git cancel a revertGit取消还原
【发布时间】:2011-03-13 01:52:54
【问题描述】:

在 git 中假设我提交了 A 和 B

A---[B]

但后来我恢复了

git revert HEAD

所以我现在在那里:

[A]---B

我如何取消我的回复,以便我可以回到 B?

【问题讨论】:

  • 我不确定“revert”一词在 Git 中的含义,但总的来说,reverting 意味着覆盖任何本地更改。因此,只有取消删除工具才有帮助,但机会很小。
  • @Andreas:在 Git 中,“revert”是一个 new 提交,它反转了一些较早提交的应用程序。
  • @Greg:感谢您的澄清。
  • 您的图片不准确。还原后,您有A---B---!B,其中!B 是还原B 的提交。 Greg 的两个答案,分别创建一个提交!!B 还原!B 或者返回B
  • "git reset --hard REF",将 "REF" 替换为您想要返回的引用或 SHA。 sethrobertson.github.io/GitFixUm/fixup.html

标签: git version-control


【解决方案1】:

您有两种一般选择:

  • 还原还原提交(创建第二个还原提交,让您回到原始状态)
  • 丢弃恢复提交

git reset --hard HEAD^

仅当您没有将您的更改推送到其他任何地方时,第二个选项才适用。事实上,如果你还没有在任何地方推送你的第一个回复提交,你可以简单地使用

git reset --hard

在不创建任何还原提交的情况下回滚。

【讨论】:

  • 不要进行重置——就像我做的那样,我的 repo 中的所有外部文件都丢失了!
  • 先建议git stash
【解决方案2】:

如果您还没有完全完成,例如,在 gitbash 中,您会看到如下内容:

Username@Host MINGW64 /d/code/your-project (feature|REVERTING)

然后你可以使用git revert --abort 中止。

如果你已经完成了.. 只是不要重置,更改仍然存在。使用git reset 更改状态。除了--hard,您还可以使用--soft(保留所有更改)。

git reset --soft HEAD^ // discard the last commit, keeping all the changes after that

另外,如果您想恢复超过 1 个提交:

git reset --soft HEAD~3 // discart last 3 commits. Don't know if it works for commits of others.

【讨论】:

  • 谢谢,我正在寻找 --abort 选项。
  • 我必须用git reset --hard 两次执行git revert --abort,因为第一次报告失败。
【解决方案3】:

当您创建一个新的commit reverts another commit 时,您可以将其视为普通提交。

所以基本上你有很多选择,比如

  • git rebase -i(删除还原提交)
  • git reset --hard <commitID>(重置为还原之前的提交,您将丢失所有本地更改
  • git reset --soft <commitID>(与上述相同,但保留本地更改)
  • 从技术上讲,您可以使用 git revert <commitId> 恢复您的回复

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2016-08-27
    • 2015-06-12
    • 2011-05-04
    相关资源
    最近更新 更多