【问题标题】:git pull always results in a mergegit pull 总是导致合并
【发布时间】:2015-12-24 12:36:19
【问题描述】:

我有一个问题,每当我在生产服务器中运行 git pull 时,都会导致合并。

如果我运行 git status,我会得到以下输出:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 351 commits.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean

好的,所以有 351 个本地提交。但是 git diff 没有显示任何本地更改:

$ git diff origin/master..HEAD
(no output)

如果我使用 git log origin/master..HEAD,我只会看到类似“Merge branch 'master' of ****”这样的消息。

关于如何摆脱那些似乎无用的 351 个本地提交的任何想法?

【问题讨论】:

  • 你当前的分支名称是什么?
  • 这只是一个猜测。但是你前段时间有做过一些历史改写吗?像变基、重置或任何重写历史并将其推送到服务器的东西?

标签: git


【解决方案1】:

首先,以防万一,让我们为您当前的分支创建一个备份:

git branch master-bak

如果git diff origin/master..HEAD 给出空输出,这意味着您当前的分支与origin/master 具有相同的内容。在这种情况下,您可以简单地将本地分支重置为与 origin/master 相同的状态:

git reset origin/master

【讨论】:

    【解决方案2】:

    我猜在你最后一次拉远程主机之后,原点/主机有一些恢复,这就是原因。如果您想与远程 master 保持同步,只需删除本地 master 并创建一个新的。

    git checkout another branch
    git branch -D master
    git checkout -b master
    git pull origin/master 
    

    【讨论】:

      【解决方案3】:

      显然你不是一个人工作,所以有人做了强制推送(你的本地仓库与远程有不同的历史),之后其他人都应该做git reset --hard origin/master,以便与源/主保持相同的历史。

      【讨论】:

        【解决方案4】:

        当 git status 表明您的分支在 351 提交之前位于“origin/master”之前,它实际上是指 origin/master。 简单地说,它意味着在你的 repo 中有一个名为 origin/master 的指针,它指向作为该远程分支的 HEAD 的提交,并且你的 master 在这个提交之前。所以当你运行 git pull 时,你的本地更改也将被合并。在这种情况下,您需要在合并后签出新分支或再次提交。

        【讨论】:

          猜你喜欢
          • 2016-10-10
          • 1970-01-01
          • 2014-05-06
          • 1970-01-01
          • 2018-09-30
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 2017-10-18
          相关资源
          最近更新 更多