Git,在分支上工作时 master 上的非快进问题

Git, non-fast-forward issue on master when working on a branch

我在一个分支机构工作,假设是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

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

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

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

如果您不想推送master,您可以:

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

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

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

git config --global push.default simple

(详见the git config documentation)。


1注意这个"means"git push origin branch1.1:branch1.1,即从你本地branch1.1推送到远程的branch1.1,如有必要,在远程创建分支。这就是您最初创建分支的方式。

另请注意,您不必在 git 存储库中使用与远程存储库相同的名称。例如,您可以 git push origin branch1.1:liquid-branch-1.1。但是,如果您使用不同的名称,确实会造成混淆; simple 设置强制执行 "must have same name" 限制,以避免这种混淆。如果您在远程上创建一个 liquid-branch-1.1,您可能希望在本地 git.

中重命名该分支