【问题标题】:Git merge after fetch - how, exactly?获取后的 Git 合并 - 究竟如何?
【发布时间】:2013-01-08 21:55:26
【问题描述】:

我从各种来源了解到,获取 然后 合并通常是一个更好的主意,而不是简单地拉,因为它允许更好的控制。也就是说,我还没有找到真正的方法。举个例子:

我的一个 GitHub 存储库的主分支中的一些代码进行了小幅更改。我能够获取它,但我不知道如何将差异与 my 本地主分支实际合并。 git branch 列出了我拥有的所有本地分支,但没有任何内容表明可以合并。

那么,它只是类似于git merge mastergit merge origin/master 吗?我错过了什么?

【问题讨论】:

  • 如果你仍然在 master 分支上工作,那么不做git pull 是没有意义的,因为git pull 只是git fetch && git merge origin/master 的别名
  • 刚学git,有没有考虑在分支上工作?它们也非常容易和一次性。我发现总是在本地主题分支上工作是最简单的,然后,rebase 到 master,最后推送。
  • 我这样做了,但是如果我想在另一个分支中处理我自己的功能时让自己的 master 保持最新,我需要从 origin/master 获取/拉取。我只是想知道执行此操作的实际命令。

标签: git git-merge git-fetch


【解决方案1】:

git merge origin/master 应该可以工作。由于master 通常是一个跟踪分支,您也可以从该分支执行git pull,它会为您执行提取和合并。

如果您在 master 上的本地更改未反映在 origin 上,您可能希望 git rebase origin/master 确保您的提交处于“顶部”。

【讨论】:

  • git merge orgin/master 之前需要git rebase origin/master 吗?我只询问master 上未反映在origin 上的本地更改的情况。
  • 你需要做一个或另一个,而不是两个。选择哪个取决于您追求的结果,但rebase 通常是您想要的。
【解决方案2】:

我通常这样做:

git merge --ff-only @{u}

其中说,“仅从上游跟踪分支进行快进合并”。这很好,因为如果它失败了,那么我知道我在master 上引入了一些不是上游的东西。我将其别名为ff,只是为了更容易输入。

如果有更改,而您只是想合并它们,您可以这样做:

git merge @{u}

将合并到上游分支。但是,如果您想要更清晰的历史记录(并避免“将 'origin/master' 合并为 'master'”提交,那么您可能需要考虑改用变基:

git rebase @{u}

当然,在这些示例中,您可以使用 origin/master 而不是 @{u}

【讨论】:

    【解决方案3】:

    命令

    git pull $some_url
    

    等价于

    git fetch $some_url
    git merge FETCH_HEAD
    

    另请参阅git-pull(1) 手册页了解详细信息,尤其是描述的前两段。

    【讨论】:

      【解决方案4】:

      获取特定分支:
      1. git fetch <branch URL><branch name>

      2. git pull = git fetch + git merge
      

      3(a). git merge origin/master origin/master 和 master 分支现在指向同一个提交,并且您与上游开发同步。

      (或)

      3(b). git merge FETCH_HEAD

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 2014-11-20
        • 2014-09-11
        • 2010-11-30
        • 2014-08-17
        • 1970-01-01
        • 2013-05-03
        相关资源
        最近更新 更多