小编典典

如何将修改后的提交推送到远程 Git 存储库?

all

当我对我的源代码做了一些工作后,我做了我通常的事情提交,然后我推送到一个远程存储库。但后来我注意到我忘记在源代码中组织我的导入。所以我执行了修改命令来替换之前的提交:

> git commit --amend

不幸的是,提交不能被推回存储库。它被这样拒绝:

> git push origin
To //my.remote.repo.com/stuff.git/
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'

我该怎么办?(我可以访问远程存储库。)


阅读 115

收藏
2022-03-02

共1个答案

小编典典

实际上,我曾经推送--force.git存储库并被 Linus BIG TIME
责骂。一般来说,这会给其他人带来很多问题。一个简单的答案是“不要这样做”。

无论如何,我看到其他人给出了这样做的秘诀,所以我不会在这里重复。但是,在您使用–force(或+master)推出修改后的提交
,这里有一个提示可以从这种情况中恢复过来。

  1. 用于git reflog查找您修改的旧提交(调用它old,我们将调用您通过 amending 创建的新提交new)。
  2. old在和之间创建一个合并new,记录 的树new,就像git checkout new && git merge -s ours old
  3. 将它与你的主人合并git merge master
  4. 用结果更新你的主人git push . HEAD:master
  5. 将结果推出。

然后那些不幸的人将他们的工作建立在你通过修改和强制推送而抹杀的提交上,他们会看到结果合并会看到你更new喜欢old.
他们后来的合并不会看到你的修改导致的old和之间的冲突new,所以他们不必受苦。

2022-03-02