我正在尝试将我的更改推送到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
最后一行看起来很可疑。我怎么能不在任何一个分支?另请注意,我有一些未跟踪的文件和修改(未分级)更改。
非常感谢任何帮助。感谢。
答案 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。
我不小心用不同的外壳检查了我的当地分支:“开发”而不是我通常的“开发”。我做的任何事情都不会纠正这个问题(即使在检查了正确的外壳分支后),直到我按照以下步骤操作: