Git push报错,提示非快进式推送,尽管已经拉取了远程分支。

4
我试图将更改推送到我的NAS上的存储库。它以一种我不理解的方式失败了。 文档指出,默认情况下push仅适用于快进式更新。很好。所以我做了一个git pull(我的远程称为rubix):
D:\RoboCup\Dev\TinMan>git pull rubix master
From ssh://rubix/volume1/git/TinMan
 * branch            master     -> FETCH_HEAD
Already up-to-date.
看起来一切都很好。让我们尝试推送...
D:\RoboCup\Dev\TinMan>git push rubix master
向 ssh://dnoakes@rubix/volume1/git/TinMan 推送失败!
错误:未能推送一些引用到 'ssh://dnoakes@rubix/volume1/git/TinMan'
为了防止您丢失历史记录,拒绝非快进式更新。
在再次推送之前,请合并远程更改。有关详细信息,请参见“git push --help”中的“有关快进”的部分。

我已经阅读了关于git push的文档,但目前我无法理解为什么会出现这个问题。

以下是其他上下文信息:

D:\RoboCup\Dev\TinMan>git --version
git版本 1.7.0.2.msysgit.0
D:\RoboCup\Dev\TinMan>git branch *(无分支) 主要

最后一行看起来可疑。我怎么可能没有任何分支?还请注意,我还有一些未跟踪的文件和修改(未暂存)的更改。

任何帮助都将不胜感激。谢谢。

4个回答

5

以下是一种将您的代码与远程同步的方法。

首先,请提交任何更改,然后使用 git log 记录您想要推送的任何提交。

接下来,重置您的主分支以匹配远程分支,如下所示:

git checkout master
git reset --hard remotes/rubix/master 

最后,挑选你想保留的提交记录。

例如:

git cherry-pick 111aaa111
git cherry-pick 123abc123

现在应该可以进行推送了。
git push rubix master

2

我不确定你是如何进入“无分支”状态的。可能你正在进行变基操作,或者直接检出了某个提交。无论如何,这很可能是导致你推送失败的原因。使用git reflog命令查看是否有明显的原因,并使用git log查看你所处的位置。使用git diff查看更改的文件,决定是否要保留它们(如果需要,请使用git add . && git stash)。然后,一旦你确定不需要任何更改或当前历史记录中的任何内容,就可以使用git checkout master返回。


谢谢。git checkout master是有意义的,但我现在回到了过去。我该做git merge <oldref>吗? - Drew Noakes
查看你的 git reflog 来尝试弄清楚之前你在哪里。假设你知道 <oldref>,并且 它是当前主分支的后代,那么你就可以使用 git merge <oldref>。确保输出包含 "Fast-forward"。否则,如果你正在创建一个合并提交(非直接后代),我建议首先为这些提交创建一个有用名称的专题分支。 - Rein Henrichs
当我检出"master"时,Git打印了"<oldref>"。从该引用进行合并是有效的,并且我能够继续进行我想做的事情。非常感谢你的帮助。 - Drew Noakes

1

我曾经遇到过同样的问题,并在这个问题上找到了答案,所以我想发布我的解决方案。

注意:我正在Windows上使用git。

我不小心用不同的大小写检出了本地分支:“Develop”而不是我通常的“develop”。无论我做什么都无法纠正这个问题(即使在使用正确大小写检出分支后),直到我按照以下步骤操作:

  1. 使用正确的大小写“develop”检出分支
  2. 进行任何更改,添加/提交
  3. 现在您可以推送而不被拒绝

1
如果还是不行,你可能需要配置你的git以接受别名分支名称。
git config --global push.default upstream

默认情况下,如果您的远程分支名称为origin/master,则只有当您的本地跟踪分支名称为master时,git才会接受您的推送。如果您创建了一个名为master_xxx的本地跟踪分支,则除非您修改push.default配置为upstream,否则git将不会接受您的推送。


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