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.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注意这个"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.
中重命名该分支
我在一个分支机构工作,假设是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.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注意这个"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.