57

通常,我只是跑

git add file
git commit
git push

但如果我在推送之前修改提交(使用git commit --amend),下一次推送将失败

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

如何让 git 在不合并分支的情况下推送更改?我只有一个分支(master),而且我是唯一使用这个 repo 的人,为什么它这么说呢?

git 分支 -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

编辑:使用gitk HEAD @{u},我看到我有 2 个分支,一个带有原始提交,另一个带有修改后的提交。

4

3 回答 3

79

只有在修改已经推送的提交时才会出现这种情况。通常,您永远不应该这样做,因为您正在修改已发布的历史记录。但是,在您的情况下,您应该能够摆脱push -f,这将用您修改后的修订覆盖远程提交。

于 2013-09-03T09:44:16.827 回答
30

是的,你不应该这样做(推送一个提交,然后更改它并再次尝试推送它)。

相反,您可以在不更改文件的情况下将 Git 回滚到之前的提交,然后创建一个新的提交:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be an amendmend"
git push origin master

这将创建一个包含您要修改的更改的新提交。

于 2013-09-03T09:45:53.443 回答
10

您修改了拉取的提交,如

git pull origin master
git commit -a --amend -m "..."
git push

您可以通过还原修改后的提交来解决该问题:

git reset --mixed origin/master

然后再次将其作为完整的提交

于 2013-09-03T09:44:28.300 回答