尝试推送到远程分支时出现git错误

41
我从git克隆了A仓库的主分支,并创建了自己的分支Li。 我一段时间前进行了一些更改并将本地Li的内容推送到远程Li。
现在,我从远程主分支拉取了一些更新到本地主分支,然后从本地主分支拉取到本地Li,并尝试将本地Li的更新推送到远程Li。 但是,当我尝试运行以下命令时:
git checkout Li
git push origin Li

我遇到了以下错误:

error: failed to push some refs to 'git@github.com:anodejs/system.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
注意我的本地主分支已经更新(我调用了git pull origin master)并合并到本地Li分支。但是,我添加了一个新文件到本地Li分支,所以本地Li和本地master不完全相同(但这应该没关系,对吧?)
谢谢, Li

你在尝试推送之前是否提交了 Li 分支上的更改? - IgorGanapolsky
1
来到这个问题时,我遇到了同样的问题,这里的答案并没有帮助到我。结果发现我的问题是我没有在分支中 - 参见https://dev59.com/iGgt5IYBdhLWcg3w8h41#18601467以了解我如何诊断/修复它。 - Eborbob
4个回答

36

更新被拒绝,因为推送的分支尖端落后于其远程分支。

git config --global push.default current

尝试使用上述命令将当前分支设置为默认分支,

git push

10
请注意,此命令更改了 git push 的基本行为,这通常是有意的,但并不总是如此。想要了解这些行为的用户可以参考此问题此问题 - Christopher

29
使用 git fetch && git log Li..origin/Li 命令查找差异。我猜测您自上次推送以来已经变基或以其他方式重新剪切了 Li 分支,但该命令可以准确告诉您远程分支中存在而本地分支中不存在的内容。您可以使用三点语法查找存在于其中一个分支(但不是两者都有的)的内容:git log Li...origin/Li
如果差异是可预期的,则只需使用 git merge origin/Li 命令合并,然后使用 git push 推送即可。如果更改不需要,则使用 git push -f origin Li 覆盖远程分支。如果要放弃远程分支的更改,才能执行此操作。

1
当我调用fetch&&log命令时,我可以看到来自origin/master的合并拉取请求。但是当我尝试“git merge origin/Li”时,我发现没有需要合并的内容(已经是最新的!)。我相信push -f会起作用,但我认为如果我弄清楚了这个问题,它将帮助我理解git。 - user429400
放弃了,选择了使用 push -f 命令解决了问题,就像你说的那样。谢谢。 - user429400
非常感谢。我在StackOverflow上看了一些建议,但是除了这个之外,没有什么对我有用。你让我很开心,因为我在处理git问题时没有失去好心情 :) 当你一个一个地测试解决方案,却仍然得到相同的错误消息时,这有点令人沮丧;D 最好的祝福 - Tomasz Kuter

0

git branch --set-upstream-to=origin/ master

如果您在'master'分支上遇到错误,请尝试以下命令:

git branch --set-upstream-to=origin/master

或者,一个快捷方式: git push -u origin master


0

你可以强制推送更改到远程地址,但这可能会产生新的远程分支

git push subtree_remote_address.git `git subtree split --prefix=subtree_folder`:refs/heads/branch --force

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