即使遥控已被拉扯,Git也会抱怨非快进

时间:2011-04-19 22:54:57

标签: git dvcs git-push

我正在尝试将我的更改推送到NAS上的回购。它以我不理解的方式失败。

documentation表示默认情况下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
To ssh://dnoakes@rubix/volume1/git/TinMan
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://dnoakes@rubix/volume1/git/TinMan'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

我已经阅读了git push上的文档,但此时我无法理解为什么我会看到这个问题。

以下是其他一些背景信息:

D:\RoboCup\Dev\TinMan>git --version
git version 1.7.0.2.msysgit.0

D:\RoboCup\Dev\TinMan>git branch
* (no branch)
  master

最后一行看起来很可疑。我怎么能不在任何一个分支?另请注意,我有一些未跟踪的文件和修改(未分级)更改。

非常感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:5)

这是一种同步的方式。

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

接下来重置您的主人以匹配遥控器,如下所示:

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

最后,樱桃挑选你想要保留的提交

示例:

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

现在推动应该有效。

git push rubix master

答案 1 :(得分:2)

我不确定你是怎么结果没有分支的。你可能正处于变革的中间。您可能已直接签出了提交。无论如何,这可能是你推动困境的原因。检查git reflog以查看是否显示任何明显原因,并git log查看您的位置。使用git diff查看已更改的文件,以确定是否要保留它们(如果这样做,请使用git add . && git stash)。然后,一旦您确定不需要任何更改或任何当前历史记录,git checkout master即可返回。

答案 2 :(得分:1)

如果仍然无效,您可能需要将git配置为接受别名分支名称

git config --global push.default upstream

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

答案 3 :(得分:1)

我遇到了同样的问题并遇到了这个问题,所以我想我会将解决方案发布到我的问题中。

注意:我在Windows上使用git。

我不小心用不同的外壳检查了我的当地分支:“开发”而不是我通常的“开发”。我做的任何事情都不会纠正这个问题(即使在检查了正确的外壳分支后),直到我按照以下步骤操作:

  1. 使用正确的外壳“develop”检查分支
  2. 进行任何更改,添加/提交
  3. 现在你可以推动而不被拒绝