4

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

文档指出,默认情况下push仅适用于快进更新。很公平。所以我做了一个git pull(我的遥控器叫做rubix):

D:\RoboCup\Dev\TinMan>git pull rubix master
来自 ssh://rubix/volume1/git/TinMan
 * 分支主 -> FETCH_HEAD
已经是最新的了。

一切看起来都很好。让我们试着推...

D:\RoboCup\Dev\TinMan>git push rubix master
到 ssh://dnoakes@rubix/volume1/git/TinMan
 ![拒绝] master -> master(非快进)
错误:未能将一些参考推送到 'ssh://dnoakes@rubix/volume1/git/TinMan'
为防止您丢失历史记录,拒绝了非快进更新
在再次推送之前合并远程更改。请参阅“关于
'git push --help' 的 fast-forwards 部分了解详细信息。

我已经阅读了有关文档,git push但此时我不明白为什么我会看到这个问题。

这是其他一些上下文信息:

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

D:\RoboCup\Dev\TinMan>git 分支
*(无分支)
  掌握

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

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

4

4 回答 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
于 2011-04-20T00:34:32.960 回答
2

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

于 2011-04-19T23:06:25.923 回答
1

如果它仍然不起作用,您可能需要配置您的 git 以接受别名分支名称

git config --global push.default upstream

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

于 2012-07-10T05:55:00.890 回答
1

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

注意:我在 Windows 上使用 git。

我不小心用不同的外壳检查了我的本地分支:“开发”而不是我通常的“开发”。在我执行以下步骤之前,我所做的任何事情都无法纠正问题(即使在使用正确的外壳检查分支之后):

  1. 使用正确的外壳“develop”签出分支
  2. 进行任何更改,添加/提交
  3. 现在你可以推送而不会被拒绝
于 2012-07-25T19:50:44.653 回答