【问题标题】:Git - Went back to a previous commit and now want to write over the commits in frontGit - 回到之前的提交,现在想要覆盖前面的提交
【发布时间】:2014-12-28 00:06:15
【问题描述】:

我对使用 Git 很陌生。

我正在开发一个存储库,在那里我尝试重构代码但失败了,所以我最终在主分支上返回了 1 次提交,而是在我之前所在的位置工作。我现在已经做出了我想要保留并且不想与前面的提交合并的更改。前面的提交也已经在远程存储库上。

什么解决方案不会干扰我的本地和远程存储库上的提交,同时保留我所做的更改而不是合并?

这是一个 git log 用于澄清。 HEAD, master commit 是我刚刚尝试做但不让我做的那个。 origin/master 是分支的尖端,也在 Github 上(我认为。)

* bb1d222 (HEAD, master)
| * 832e8af (origin/master)
|/
* 3293d35

【问题讨论】:

  • 使用 git -push 命令和 git -add 命令
  • @fadfad 明确一点:提交832e8af 是否对应于您重构代码的失败尝试?另外,你是回购的唯一贡献者吗?
  • @Jubobs 是的,是的。
  • @Jubobs 感谢您的帮助和耐心等待!我听从了你的回答。

标签: git github


【解决方案1】:

根据您的问题和后续 cmets,我的理解是您的回购(最近)历史如下所示,

* bb1d222 (HEAD, master)
| * 832e8af (origin/master)
|/
* 3293d35

commit 832e8af 对应于您重构代码的失败尝试。

假设

  1. 您是 GitHub 存储库的唯一贡献者;
  2. 没有其他人曾经克隆或分叉过 GitHub 存储库(有a way to find out 是否是这种情况);和
  3. 你会很乐意假装提交 832e8af 从未存在,并且你想在以下情况下着陆

    * bb1d222 (HEAD, master, origin/master)
    |
    * 3293d35
    

然后(并且只有这样),您可以简单地进行强制推动

git push --force origin master

请注意,强制推送通常被认为是不好的,例如crossing the streams。确保这确实是您想要做的;这样的操作很难逆转,并且有可能激怒你的贡献者(如果有的话)。

在大多数情况下,最好还原有问题的提交(使用 git revert),因为这与强制推送相反,不会删除历史记录并且不需要非快进推送。

【讨论】:

    【解决方案2】:

    1) 在本地主机上,执行git reset HEAD~1,然后执行git stash。这会将您在 bb1d222 中所做的更改放入您的存储中。

    2) 将本地 master 分支硬重置为 origin/master (git reset --hard origin/master)

    3) 在 master 上,执行 git revert 832e8af,这将引入一个新的提交,这将撤消您在 832e8af 中所做的更改。

    4) git stash pop 将您在 bb1d222 中所做的更改放到 master 上,并提交它们。

    这些步骤将生成此提交图,并且不会重写历史记录

    * (Commit introducing changes in bb1d222) | * (Commit reverting changes made in 832e8af | * 832e8af | * 3293d35

    【讨论】:

      【解决方案3】:

      你有几个选择:

      1. 您可以创建一个separate local branch and commit your changes to that local branch only。我更喜欢这种方法,因为这样您的更改就会安全地保存到该分支(除非您的机器死机或您删除了该分支)。

      2. 使用git stash 保存您的更改(可以说是您的差异)。

      【讨论】:

      • 我希望它留在问题发生的主分支上。
      • 我不确定我是否了解您的情况。 master 分支的远程版本在 commit 3 处。您的 master 分支的本地版本在 commit 2 处,您想在 commit 2 处将新更改保存到 master 分支的本地版本?你想完全放弃远程主分支上的提交 3 吗?如果不是,则需要解决合并冲突。
      猜你喜欢
      • 2010-10-13
      • 2011-07-03
      • 2013-12-24
      • 2013-05-21
      • 2013-04-28
      • 2014-10-29
      • 2015-12-01
      • 2019-10-27
      相关资源
      最近更新 更多