当我使用了一点源代码后,我做了我通常的事情提交,然后推送到远程存储库。但后来我注意到我忘记在源代码中组织导入。因此,我执行modify命令以替换先前的commit:

> 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/'

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


当前回答

我必须通过从远程回购中提取来解决这个问题,并处理出现的合并冲突,提交然后推送。但我觉得还有更好的方法。

其他回答

这里有一个非常简单和干净的方法,在您提交后推动您的更改--修改:

git reset --soft HEAD^
git stash
git push -f origin master
git stash pop
git commit -a
git push origin master

它执行以下操作:

将分支头重置为父提交。停止这最后的承诺。强制推至远程。远程现在没有最后一次提交。打开你的储藏室。干净地提交。按下遥控器。

如果将此应用于其他分支或远程,请记住更改原点和主控点。

您收到此错误,因为Git远程已经有这些提交文件。您必须强制推动分支才能使其工作:

git push -f origin branch_name

还要确保您从远程获取代码,因为团队中的其他人可能已经将代码推到了同一分支。

git pull origin branch_name

这是我们必须强制将提交推到远程的情况之一。

我必须通过从远程回购中提取来解决这个问题,并处理出现的合并冲突,提交然后推送。但我觉得还有更好的方法。

在更改提交的作者和提交人时,以下内容对我有效。

git push-f原始主机

Git非常聪明,能够发现这些都是相同delta的提交,只是在元信息部分有所不同。

本地和远程负责人都指出了有问题的提交。

如果您知道没有人撤回您未修改的承诺,请使用gitpush的--forcewithlease选项。

在TortoiseGit中,您可以在“推送…”选项“强制:可能丢弃”和检查“已知更改”下执行相同的操作。

强制(可能放弃已知的更改)允许远程存储库接受更安全的非快进推送。这可能会导致远程存储库丢失提交;小心使用。这可以防止丢失来自远程用户的未知更改。它检查服务器分支是否指向与远程跟踪分支相同的提交(已知更改)。如果是,将执行强制推压。否则将被拒绝。由于git没有远程跟踪标记,因此无法使用此选项覆盖标记。