【问题标题】:What happens when I do git pull origin master in the develop branch?当我在开发分支中执行 git pull origin master 时会发生什么?
【发布时间】:2012-02-03 12:30:26
【问题描述】:

假设我有一个名为 develop 的私有主题分支,在 master 之前有 2 次提交。

git pull origin master 是做什么的?

从远程master中拉取所有东西在本地develop并合并吗?拉取本地 master 分支中的所有内容并合并?

有没有办法在没有git checkout master 的情况下从开发中更新master?

【问题讨论】:

    标签: git pull


    【解决方案1】:

    git pull origin master 将 master 分支从远程称为 origin 拉到您的当前分支。 它只影响你当前的分支,不影响你的本地主分支。

    它会给你的历史看起来像这样:

    - x - x - x - x (develop)
       \         /
        x - x - x (origin/master)
    

    您的本地主分支与此无关。 git pull本质上是git fetchgit merge的组合;它获取远程分支,然后将其合并到您当前的分支中。这是一个像任何其他的合并;它不会做任何神奇的事情。

    如果你想更新你的本地 master 分支,你别无选择,只能检查一下。无法合并到未签出的分支中,因为 Git 需要工作树才能执行合并。 (特别是,报告合并冲突并允许您解决它们是绝对必要的。)

    如果您碰巧知道拉入 master 将是一个快进(即您在本地 master 分支中没有提交不在 origin 的 master 中),您可以解决,as described in this answer

    【讨论】:

    • 如果它是可快速转发的,您可以推送到本地未签出分支。但那是相当的 hack ;)
    • @knittl:没错!推送很优雅,因为它会检查它是否对您来说是可快速转发的。我喜欢update-ref 解决方案,因为您可以在 reflogs 中留下正确的痕迹,而我就是这样着迷的。
    • @e-satis:鼓励新用户对问题进行投票很棒……但值得回答和值得投票不一定是同一回事。 (虽然你的问题是两者。)
    • @jefromi:是的,不幸的捷径。
    【解决方案2】:

    一旦你提交更改到你的分支,使用

    git add -A
    git commit -m <message>
    

    你可以这样做:

    git pull origin master
    

    进入你的分支,这将使你的提交保持在主拉的顶部。您的分支现在将与 master + your commits 保持一致。所以,你现在可以这样做:

    git push
    

    并且 git 会将您的更改连同主提交一起推送到您的分支中。然后,您可以轻松地将其合并到 Github 上的 master 中。

    【讨论】:

    • 如果在@mrj 的回答之后阅读,这是一个很好的补充。大多数情况下,我们在拉动时处于类似的工作流程
    猜你喜欢
    • 2023-03-20
    • 2014-04-15
    • 2012-06-17
    • 2013-05-09
    • 2011-02-22
    • 2018-11-20
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多