Git,在分支机构工作时主人的非快进问题

时间:2015-02-09 02:49:00

标签: git git-branch git-pull

我正在分支机构,我们说它是branch1.1。我进行了一些更改,只需使用'git commit'来提交这些更改。然后,当我经常处理master时,我会git push检查它们。但是会出现这样的错误:

To git@thoroughbred:flt/test.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@thoroughbred:flt/test.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时,据说是

'Already up-to-date' 

如何解决此问题?似乎master上的内容发生了变化,但我在branch1.1,我想要检查的内容是branch1.1

1 个答案:

答案 0 :(得分:2)

当您运行git push而不给它任何额外的参数时,它将使用您的push.default设置来决定尝试推送哪个分支。

"默认push.default"旧版本的git是matching:如果你有一个名为branch1.1的分支,并且该远程有一个名为branch1.1的分支,git会将branch1.1添加到事物列表中它相信你要求它推动。如果您有一个名为master的分支,并且该远程有一个名为master的分支,git将master添加到它认为您询问的内容列表中它推动。

(如果远程 没有branch1.1,您自己的git将branch1.1添加到要推送的内容列表中。我无法从您的问题中判断您的遥控器是否有branch1.1。)

如果您想推master,您可以:

  • 明确指定要推送的内容:git push origin branch1.1 1
  • 更改您的push.default
  • 将您的git版本升级到具有push.default
  • 不同默认值的较新版本

(这不是一个详尽的清单,只是涵盖了基础知识)。

就我个人而言,我喜欢将push.default设置为nothing,这迫使我明确指出我希望推送哪个分支。但是,git 2.0默认为simple,这对初学者来说可能是最有用的。要将您自己的默认值(在所有存储库中)设置为简单,请使用:

git config --global push.default simple

(详见the git config documentation)。


1 请注意,这"表示" git push origin branch1.1:branch1.1,即从您的本地branch1.1推送到远程branch1.1,必要时在遥控器上创建分支。这是您最初创建分支的方法。

另请注意,您不必在git存储库中使用与远程服务器相同的名称。例如,你可以git push origin branch1.1:liquid-branch-1.1。但是,如果你使用不同的名字,它确实会令人困惑; simple设置强制执行"必须具有相同的名称"限制,以避免这种混乱。如果您在遥控器上创建liquid-branch-1.1,则可能需要重命名本地git中的分支。