如何使用git解决本地过期错误?

5
我正在尝试推送到远程仓库,但一直收到以下错误提示。
$ git push
To user@remote.net:/home/user/repos/remoterepo.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'user@remote:/home/user/repos/remoterepo.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

git remote show origin 显示 master pushes to master (local out of date)。我确定它不应该过时,因为我只从分支推送。

我的问题有两个。

  1. 是否可以强制本地分支覆盖远程分支?拉取将覆盖后来的更改,这些更改肯定比仓库中的内容更新。

  2. 这是我遇到这个问题的第二或第三次了。我能想到的唯一可能是本地版本的 git 是 git version 1.7.3.1.msysgit.0(在 Windows 上),而远程版本是 git version 1.6.5(Ubuntu Jaunty)。 不同的 git 版本可能会导致某些损坏吗?


这是在我推送到我的仓库后发生的...然后撤销了我的最后一次提交以便我可以进行一些更改。显然,我的远程版本已经领先了,所以现在必须强制push --force - mfaani
@Honey,请看下面我编辑过的答案。--force 是被认为是有害的。 - eckes
1个回答

15
  1. (见下面的更新) 可以使用 git push --force 命令,但只有在你确信自上次 push 以来没有人读取过该仓库时才这么做(请参考如何将修改后的提交推送到远程 Git 仓库? 进行深入讨论)。
  2. 对我而言,似乎必须先执行 git pull 才能执行 push。我认为这不是与时间有关的错误。该消息指示服务器上有更新的提交(由其提交哈希标识,而非提交日期)。要查看更改内容,请使用 git fetch 而非 git pull 命令,再通过 git log origin/master 查看更改记录...

更新: 同时,现在 push 学会了使用 --force-with-lease 选项,以确保你不会意外破坏什么:https://developer.atlassian.com/blog/2015/04/force-with-lease/。尽可能使用这个选项而不是 --force


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接