你的分支比'origin/master'领先3个提交

575

运行 git status 命令时我得到了以下输出:

Your branch is ahead of 'origin/master' by 3 commits.

我在其他帖子上读到解决这个问题的方法是运行 git pull --rebase 但是什么是 rebase,我会失去数据吗,还是这只是一种简单的与主分支同步的方法?


28
我不认为这是一个重复的问题... 这个问题在问什么意思,而另一个问题则在问如何放弃更改。 - onionjake
17
为什么这个问题被那么多人标记为重复?很明显,这个问题表明提问者不想失去他们所做的更改。他们已经进行了更改,但对这条信息感到困惑。所谓的重复问题会让这个人丢失他们的更改。 - Derek Greer
5
必须说,上面链接的问题并不完全是这个问题的重复。 - Raydot
20
@DerekGreer:为什么这个问题被标记为重复?因为大多数标记问题为重复的人并没有真正“阅读和理解”问题。如果有表面上的相似之处,他们会草率地得出两个问题是完全相同的结论。如果重复问题的人注意到了,那么这应该在第一时间就明显了,但现在需要由提问者或其他愿意花时间仔细重复的人来解释。 - iconoclast
8
“在我看来,这种做法正在杀死SO。” - Geek Stocks
显示剩余3条评论
11个回答

1223
您之所以收到该消息,是因为您在本地主分支中进行了更改,但未将更改推送到远程。您有几种“解决”方法,通常取决于您的工作流程:
  • 在良好的工作流程中,您的远程主分支副本应该是正确的,而您的本地主分支副本只是远程主分支的副本。使用这种工作流程,您将不会再收到此消息。
  • 如果您采用其他方式工作,并且需要推送本地更改,则只需使用git push origin(假设origin是您的远程)
  • 如果您的本地更改存在问题,则只需删除它们或将您的本地主分支重置为远程状态git reset --hard origin/main

149
git reset --hard origin/master 正是我所需要的,谢谢。 - FluxEngine
4
@iberbeu 你解决了我的问题...git reset --hard origin/master 就是我要的。+1 - Ravi
100
另外,FWIW,运行git diff master origin/master(即git diff local remote)可以查看您将要删除的更改。 - Shanimal
3
上一个让我得到了我需要的东西! - RyanG
1
我也遇到了类似的问题。但是问题在于,我尝试使用 git push origin master 将本地提交推送到源,然后当我运行 git status 时,仍然得到相同的输出,即“您的分支领先于'remote-branch-name/master' <some-number> 次提交。” - Rajith Gun Hewage
显示剩余13条评论

64

使用这4个简单命令

步骤1 : git checkout <branch_name>

进入指定分支。

步骤2 : git pull -s recursive -X theirs

获取远程分支的更改,如果有冲突,则用它们的更改替换。 如果执行git status命令,你将得到类似于your branch is ahead of 'origin/master' by 3 commits. 的输出。

步骤3 : git reset --hard origin/<branch_name>

硬重置你的分支。

步骤4 : git fetch

获取最新的远程分支。

享受吧。


48

没有需要修复的问题。你只是做了三个提交,但还没有将它们移动到远程分支上。根据你想要做什么,有几个选项:

  • git push:将你的更改移动到远程(如果远程已经存在其他更改,可能会被拒绝)
  • 什么也不做,继续编码,另一天再同步
  • git pull:从远程获取更改(如果有任何更改),并将它们合并到你的更改中
  • git pull --rebase:与上面相同,但尝试在远程更改之上重新执行你的提交

你处于一个典型的情况中(虽然通常你不会在大多数工作流程中对主分支进行大量提交)。以下是我通常会做的事情:审查我的更改。也许会做一些 git rebase --interactive 使它们更美观,删除那些不好的,重新排列使它们更具逻辑性。现在使用 git push 将它们移到远程。如果这被拒绝,因为我的本地分支不是最新的:git pull --rebase 在最新的更改之上重新执行我的工作,然后再次 git push


我使用了git pull --rebase命令,但现在它显示我领先了一个提交。 - FluxEngine
1
所以我做了改动,推送到主分支,然后我们的团队负责人合并到了主分支。所以这些变更已经存在,我只需要与当前主分支进行同步即可。 - FluxEngine
@MartyMcFly 这里很难看出发生了什么。你说你已经推送了?那为什么还有提交不在主分支上?你所说的“你的团队领导合并到主分支”是什么意思?难道你不是已经推送到主分支了吗?额外的提交包含什么?尝试使用git diff origin/master查看本地分支与远程分支的差异。 - pmr
1
感谢您的帮助,如果我在解释情况方面做得不好,很抱歉。但是我想要的是 git reset --hard origin/master。但是您的答案很有帮助 +1。 - FluxEngine
如果git status显示没有本地更改需要保存,您可能已经提交但尚未推送,请通过执行“git reset --soft HEAD~1”取消上次提交以查看更改,然后再运行两次。然后您可以使用“git commit&git push”或“git stash”来忘记它们。 - boardtc
显示剩余3条评论

29
Came across this issue after I merged a pull request on Bitbucket.
Had to do
git fetch

就是这样了。


3
我正在使用一个捆绑包中的存储库,并通过对当前捆绑包应用“git fetch”来摆脱该消息。谢谢! - Martin Meeser
2
在只读的检出中,我的git状态显示我比origin多了2个提交,日志看起来也是正常的。我执行了git pull,结果却变成了比origin多了5个提交..WTF???只需要fetch一下刷新本地索引即可...一切都好了 :) - Chris Rutledge

23

如果你的 Git 提示你有提交落后,那么首先执行:

git push origin

确保你已经将最新的工作推送到仓库中。

然后执行:

git reset --hard origin/master

以重置并与仓库匹配。


git push origin 对我有效。谢谢! - pawan
git push origin 对我来说有效。谢谢! - pawan

18

通常情况下,如果我需要检查与主分支不同的提交,则会执行以下操作:

git rebase -i origin/master

通过这种方式,我可以查看提交并决定是否放弃或选择...


2
这个低调的答案是我所需要的。我无法弄清楚如何找出差异,而我各种各样的 git diff ... 魔法也不起作用。当我这样做时,它给了我 noop 作为唯一的提交,当我接受它时,现在我的分支与 origin/master 同步。因此,看起来与 origin/master 不同的提交实际上什么都没有。 - philo vivero

11

git 发出的这个提示意味着你在本地代码库中有三次提交,但是还没有将它们发布到 master 仓库。相应的命令是 git push {local branch name} {remote branch name}

当远程代码库上有你本地代码库缺失的提交时,可以使用命令 git pull (以及 git pull --rebase)。选项 --rebase 表示 git 会先将你的本地提交暂存一边,然后同步远程代码库,并尝试将你的三次提交应用到新状态中。如果存在冲突,则操作可能失败,但是你将被提示解决冲突。如果不知道如何解决冲突,还可以通过 git rebase --abort 取消 rebase 操作并回到 git pull --rebase 前的状态。


8

我曾经在Bitbucket合并一个拉取请求之后遇到过这个问题。

我只需要执行以下命令:

git fetch

我的问题得到了解决。希望这能帮到你!


2
请返回翻译后的文本:从此前的答案复制 - Leonardo Alves Machado

6
使用以下命令:
``` git reset --hard origin/master ```

1
正如其他人所说,你有本地的更改,但是没有推送。
如果你不确定有哪些更改,并且想在推送之前进行检查,下面的命令将告诉你哪些文件发生了变化:
git diff --stat origin/master..
如果你移除--stat,它将显示所有文件的差异。

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