Git推送分支错误

4
情景很简单,我从主分支中创建了一个名为“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个回答

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配置页面了解有关“push.default”区别的内容。您也可以使用以下命令查看:

git help config

一旦设置完成,git push 只会推送当前所在的分支,这条消息也会消失。

此外,如果您正在考虑使用 git push --force,请在更改默认推送设置之后再考虑。这是一个丢失历史记录的好方法,也是 Git 将在 2.0 中更改默认行为的原因,尽管我认为他们应该已经这样做了。


3

您仍然在分支 myBranch 上,因此您需要明确指出只想推送该分支:

git push origin myBranch

或者,您可以配置默认始终推送当前所在的分支:

git config push.default current

接下来,修复主分支:

git rebase origin/master master
git push origin master

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

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