【问题标题】:Git, non-fast-forward issue on master when working on a branchGit,在分支上工作时master上的非快进问题
【发布时间】:2015-02-09 02:48:59
【问题描述】:

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

【问题讨论】:

  • 您要合并吗?哪种方式(主 -> 分支,或分支 -> 主)?
  • @ElliottFrisch 不合并,只是想检查我在branch1.1 上所做的更改。 git push 是否仅适用于 master?我的意思是如果我在branch1.1 上做了一个“git commit”,我是否需要做一个“git push”来确保这些更改会在那个分支上进行?或者只是 'git commit' 就足够了。
  • 你有遥控器branch1.1吗?你可以提交到branch1.1,也可以切换到master。你可以pull,但你想push 做什么?如果它是远程/主服务器,那么您首先需要合并到本地主服务器。
  • 我有一个branch1.1。当我执行git branch 时,它显示:分支 1.1,大师。我正在处理branch1.1,我使用git commit 提交branch1.1 的此类更改。我的问题是如何将它们推送到branch1.1。因为当我执行git push 时,会显示问题中列出的错误。
  • @Liquid: git branch 显示您的 本地 分支,而不是远程分支。使用git ls-remote 查看远程当前的内容,或使用git branch -r 查看您的本地 git 在您的 git 上次与远程通话时记录的远程内容。

标签: git git-branch git-pull


【解决方案1】:

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

旧版本git中的“默认push.default”是matching:如果你有一个名为branch1.1的分支,而远程有一个名为branch1.1的分支,git会将branch1.1添加到列表中它认为你要求它推动的事情。如果你有一个名为master 的分支,而远程有一个名为master 的分支,git 将master 添加到它认为你要求它推送的内容列表中。 p>

(如果远程没有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注意,这个“意味着”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 中重命名分支。

【讨论】:

  • 看来git push origin branch1.1 正是我想要的。我会接受这个答案
猜你喜欢
  • 2011-08-08
  • 2016-10-14
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
相关资源
最近更新 更多