488

运行时我得到以下信息git status

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

我在其他一些帖子上阅读了解决此问题的方法,git pull --rebase但是 rebase 到底是什么,我会丢失数据还是这种与 master 同步的简单方法?

4

8 回答 8

1051

您收到该消息是因为您在本地主机中进行了更改,并且没有将它们推送到远程。您有几种“解决”它的方法,它通常取决于您的工作流程如何:

  • 在一个好的工作流程中,您的 master 的远程副本应该是好的,而您的 master 的本地副本只是远程副本的副本。使用此工作流程,您将永远不会再收到此消息。
  • 如果您以另一种方式工作并且应该推送您的本地更改,那么只需git push origin假设 origin 是您的远程
  • 如果您的本地更改不好,则只需将其删除或将本地主机重置为远程状态git reset --hard origin/master
于 2013-04-29T21:07:56.157 回答
48

使用这 4 个简单的命令

第 1 步git checkout <branch_name>

进入那个分支很明显。

第 2 步git pull -s recursive -X theirs

如果发生冲突,请进行远程分支更改并替换为他们的更改。在这里,如果你这样做git status,你会得到这样的东西,你的分支在 'origin/master' 之前 3 次提交。

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

第 4 步git fetch

硬重置你的分支。

享受。

于 2016-09-26T08:58:46.973 回答
46

没有什么可以修复的。您只是做了 3 次提交,还没有将它们移动到远程分支。有几种选择,具体取决于您要执行的操作:

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

您处于典型情况(尽管通常在大多数工作流程中您不会在 master 上提交很多内容)。以下是我通常会做的:查看我的更改。也许git rebase --interactive在它们身上做一些化妆品,丢弃那些糟糕的,重新排列它们以使它们更合乎逻辑。现在用 将它们移动到远程git push。如果因为我的本地分支不是最新的而被拒绝:git pull --rebase在最近的更改之上重做我的工作git push

于 2013-04-29T21:05:35.833 回答
21

在我在 Bitbucket 上合并拉取请求后遇到了这个问题。

不得不做

git fetch

就是这样。

于 2016-11-30T05:07:55.237 回答
15

通常,如果我必须检查哪些提交与主人不同,我会这样做:

git rebase -i origin/master

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

于 2017-06-21T08:07:12.110 回答
14

如果你的 git 说你要提前提交,那么首先,

git推送起源

以确保您已将您所有的最新工作推送到 repo

然后,

git reset --hard origin/master

重置并与 repo 匹配

于 2018-01-18T13:41:46.883 回答
11

此消息来自git意味着您已在本地存储库中提交了三个提交,并且尚未将它们发布到master存储库。为此运行的命令是git push {local branch name} {remote branch name}.

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

于 2013-04-29T21:06:43.760 回答
4

在我在 Bitbucket 上合并拉取请求后,这发生在我身上一次。

我只需要这样做:

git fetch

我的问题解决了。我希望这有帮助!!!

于 2017-03-31T07:35:53.547 回答