【问题标题】:How do I recover from a commit --amend if I already pushed the original commit?如果我已经推送了原始提交,如何从提交中恢复 --amend?
【发布时间】:2014-09-07 14:14:28
【问题描述】:

场景:我提交,推送到远程服务器,然后使用 --amend 提交其他内容。如果我再次尝试推送,我将收到错误消息,因为我更改了已推送的历史记录。

  1. 假设我不关心修改后的更改,如何撤消此操作以使我的历史记录看起来像远程历史记录(放弃 --amend 更改)?
  2. 假设我确实关心修改后的更改,我如何将修改后的提交变成独立的提交,所以历史看起来像这样:

           commit 1            <-           commit 2
    (already pushed to server) <- (originally from amended commit)
    

我试图避免使用push -f。


This is a very similar question 但有一个关键区别:在那个问题中,他还没有将提交 1 推送到远程仓库。在我的问题中,我有。

【问题讨论】:

    标签: git


    【解决方案1】:

    我假设你的遥控器叫做origin,你的分支叫做master。根据需要进行调整。

    假设我不关心修改后的变化

    然后你可以使用git reset --hard origin/master。这会将您当前的分支设置为与远程完全一致,并更新您的索引和工作树以匹配。

    假设我确实关心修改后的变化

    然后你可以使用git reset --soft origin/master。这会将您当前的分支设置为远程分支,但不会更新您的索引或工作树以匹配。然后,您可以使用 git commit 创建一个包含您添加的更改的新提交。

    【讨论】:

    • 那么第二部分是不是有点像说,“检查这个分支,但不要修改文件系统上的任何东西”?这样,您可以提交差异吗?
    • 查看您的答案,看起来它与我链接到的问题的答案基本相同。但在您解释之前,我不明白--soft 在做什么。谢谢
    • @tieTYT 是的,我现在看到这确实是另一个问题的已接受答案中的内容。如果我之前注意到这一点,我不会将其发布为答案(但我会对您的问题发表评论)。无论如何,我很高兴它有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2018-03-29
    • 2022-06-14
    • 2011-11-05
    相关资源
    最近更新 更多