您的分支比“源/主”提前3次提交


354

我在跑步时得到以下信息 git status

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

我在其他文章上已经读过解决此问题的方法,git pull --rebase但是到底是什么变基了,我会丢失数据还是与master同步的简单方法?


18
我不认为这是重复的...这个问题是在问什么意思,而另一个问题是在问如何放弃更改。
onionjake 2014年

11
这么多人如何将其标记为重复项?问题显然表明该人不想放弃他们的更改。他们进行了更改,并对消息感到困惑。所谓重复问题将使人失去所做的更改。
Derek Greer

4
我不得不说,上面链接的问题并不是这个问题的重复……
Dave Kanter

15
@DerekGreer:这是如何标记为重复的?因为大多数将问题标记为重复的人都不会真正阅读和理解问题。如果存在表面上的相似之处,它们将得出结论,两者是相同的,这取决于OP或其他愿意花时间仔细重复一开始应该显而易见的事情的人。骗子猎人实际上很在意注意。
iconoclast

6
^^^的做法正在杀死SO,IMO。
Geek Stocks

Answers:


766

之所以收到该消息,是因为您在本地主机中进行了更改,而没有将其推送到远程主机。您可以通过多种方式“解决”它,通常取决于您的工作流程如何:

  • 在良好的工作流程中,您的master的远程副本应该是好的副本,而您的master的本地副本只是远程副本的副本。使用此工作流程,您将永远不会再收到此消息。
  • 如果您以其他方式工作并且应该推送本地更改,则只需git push origin假设原点是您的远程
  • 如果您的本地更改不正确,请删除它们或将本地主服务器重置为远程状态 git reset --hard origin/master

82
git reset --hard origin / master正是我想要的。谢谢。
FluxEngine

4
@iberbeu,您解决了我的一天... git reset-我想要的是硬起源/大师。+1-
拉维

75
还可以浏览git diff master origin/master(例如git diff local remote)以查看要删除的更改
Shanimal

1
我在远程原点/分支上有本地/主节点,因此使用git push origin master:branch哪个return Everything up-to-date,之后x commits前面的消息消失了。
fyrye 2014年

2
最后一个让我得到了我在那里需要的东西!
RyanG

38

没有要修复的东西。您只完成了3次提交,还没有将它们移到远程分支。有几种选择,具体取决于您要执行的操作:

  • git push:将您的更改移至遥控器(如果遥控器上已有其他更改,则可能会被拒绝)
  • 什么也不做,继续编码,再同步一天
  • git pull:从远程获取更改(如果有)并将其合并到您的更改中
  • git pull --rebase:如上,但尝试在远程更改的基础上重做提交

您处在经典情况下(尽管通常在大多数工作流程中您不会在master上投入太多精力)。这是我通常会做的事情:查看我的更改。也许做一个git rebase --interactive在他们身上做一些化妆品,丢下那些吮吸的,重新排序以使它们更合逻辑。现在使用将它们移动到远程git push。如果由于我的本地分支不是最新而被拒绝,请执行以下操作:git pull --rebase在最近的更改之上重做我的工作,然后git push再次执行。


我使用了git pull --rebase,但是现在它说我领先了一次提交
FluxEngine 2013年

因此,我进行了更改,将其推向高手,然后我们的团队负责人合并为高手。因此更改就在那里,我只需要与当前的主服务器同步即可。
FluxEngine

@MartyMcFly很难看到这里发生了什么。你说你已经推?那么,为什么您仍然提交不在主目录中的提交?你是什么意思your team lead merged to master?你不是说你已经精通了吗?额外提交包含什么?尝试git diff origin/master看看您的本地分支与远程分支有何不同。
pmr

1
感谢您的帮助,如果我在解释情况方面做得不好,我们深表歉意。但是我一直在寻找git reset --hard origin / master。但是您的回答对+1有帮助。
FluxEngine

我似乎被困在一个艰难的地方,我试图提交更改,然后git说:您提前11次提交。我不允许更新远程存储库,因此无法进行推送。“ git pull”说:已经是最新的。因此,我尝试了您的第三个建议,但git表示:无法使用rebase进行撤消:您已进行了暂存的更改。请提交或隐藏它们。h,那就是我最初到达这里的方式:-(
Sander de Jong

36

使用这4个简单的命令

第一步git checkout <branch_name>

很明显进入该分支。

第二步git pull -s recursive -X theirs

进行远程分支更改,并在发生冲突时将其替换。在这里,如果您这样做,git status您将得到类似这样的信息,那么您的分支将在“提交/主”之前3次提交。

第三步git reset --hard origin/<branch_name>

第四步git fetch

硬重置您的分支。

请享用。


17

我在Bitbucket上合并了合并请求后遇到了此问题。

不得不做

git fetch

就是这样。


2
我正在使用捆绑软件中的存储库,并且可以通过对当前捆绑软件应用“ git fetch”来摆脱消息。tnx!
Martin Meeser

在只读签出中,我的git状态显示我提前2次提交,日志看起来应为-所有提交均在源中。我做了一个git pull,并且提前了5次提交。只需获取以刷新本地索引...都很好:)
Chris Rutledge

12

通常,如果我必须检查哪些提交不同于主机提交,我会执行以下操作:

git rebase -i origin/master

这样,我可以看到提交并决定将其删除或选择...


一直以来,这个很低的答案都是我需要做的。我不知道如何找出差异,而且我所有的各种git diff ...魔术都不起作用。当我这样做时,它成为了我noop唯一的提交,当我接受了它之后,现在我的分支就与Origin / master同步了。因此,看来与原产地/母带的提交差异实际上没有任何意义。
philo vivero

11

此消息来自,git表示您已在本地master存储库中进行了3次提交,但尚未将其发布到存储库中。为此运行的命令是git push {local branch name} {remote branch name}

当远程存储库中有您本地存储库中没有的提交时,该命令git pull(和git pull --rebase)用于其他情况。该--rebase选项意味着git将本地提交移到一边,与远程仓库同步,​​然后尝试从新状态应用三个提交。如果发生冲突,它可能会失败,但是系统会提示您解决它们。rebase如果您不知道如何使用解决冲突,也可以中止操作git rebase --abort,然后回到运行前的状态git pull --rebase


7

如果您的git表示您要继续前进,则只需先执行,

git push起源

为了确保您已经将您所有的最新工作推送到回购中

然后,

git reset-硬来源/主

重置并与仓库匹配



0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

最后:

$ git push origin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.