Git push分支错误

时间:2014-04-02 09:11:09

标签: git

情景很简单。从大师我有一个名为 myBranch 的分支。我一直在后者工作。完成一些修改后,我想将我的更改从 myBranch 的本地副本推送到远程分支 myBranch 。 每次我尝试这个时,我都会收到以下错误/警告信息

To git@github.com:brabbit/projectA.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:brabbit/projectA.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 pull运行正常。然后使用git push重试并显示相同的错误。

您能否解释一下该消息的含义以及解决方法。我对git很新。

3 个答案:

答案 0 :(得分:6)

您需要更改默认推送行为。被抱怨的分支是master,它似乎不是您正在处理的分支。默认情况下,Git会将push.default视为matching,这意味着当您说git push时,它会推送每个分支到达原点。不幸的是,大多数人并没有将所有本地版本的分支保持最新,这将导致您在上面看到的错误。

之所以会发生这种情况,是因为远程存储库中的master分支上有新的提交,但您的本地版master没有这些提交。当您推送时,Git正在尝试使远程master分支与您的本地版本匹配。由于本地版本落后于多次提交,因此这是一次非快进更新(您将丢失历史记录)并且Git会抱怨。

我通常建议人们立即将push.default设置更改为upstreamsimplecurrent

git config push.default upstream
git config push.default simple
git config push.default current

您可以阅读git-config手册页的差异(搜索“push.default”)。您还可以在命令行中看到它:

git help config

设置后,git push只会推送您所在的分支,此消息将消失。

此外,如果您正在讨论使用git push --force,请在更改默认推送设置后再考虑使用它。这是失去历史的好方法,也是Git改变2.0中默认行为的原因 - 尽管我认为他们应该已经完成​​了。

答案 1 :(得分:3)

你还在分行myBranch,所以你需要明确说你只想推动那个分支:

git push origin myBranch

或者,您可以配置为始终按下您默认启用的分支:

git config push.default current

之后,修复主分支:

git rebase origin/master master
git push origin master

答案 2 :(得分:1)

看起来,就像你的分支机构没有为git pull配置得好。如果您只是想推送一堆简单的提交(没有合并提交),我建议使用git rebase

git checkout master
git rebase origin/master
git push

如果您的更改包含合并提交,并且您想要推送它,就像您在历史记录中看到的那样(gitk --all),您可以

git checkout master
git merge origin/master
git push