【问题标题】:Git rebase local vs git pull --rebase originGit rebase local vs git pull --rebase origin
【发布时间】:2017-12-07 23:03:23
【问题描述】:

我有一个由 master 制成的本地(从未推送到远程)功能分支 F1很少提交。我似乎不明白这两个动作之间的区别(F1 是当前分支):

git fetch origin
git rebase master

和

git pull --rebase origin master

我的期望是它们应该是等价的,但事实并非如此 - 会产生不同的结果。

我的想法有什么问题?

【问题讨论】:

    标签: git version-control git-rebase branching-and-merging


    【解决方案1】:

    1. git fetch origin 和 git rebase master 会将更改从 F1 应用到本地 master 分支。假设您的提交历史最初如下所示(远程master 分支在远程有提交J):

    A---B---C---D---E    master
             \
              F---G---H  F1
    

    当你执行git fetch origin和git rebase master时,即使origin/master指向J,它只会将F1分支变基到本地master分支的顶部(提交E如图):

    A---B---C---D---E(master)---J origin/master
                     \
                      F---G---H    F1
    

    2. 命令git pull --rebase origin master 将首先从远程master 分支中提取更改,然后在其顶部重新设置当前分支F1:

    A---B---C---D---E---J      master,origin/master 
                         \
                          F---G---H  F1
    

    总而言之,如果本地master 分支与远程master 分支同步,这两种方式的结果相同(将F1 分支重新设置在master 分支的顶部)。如果远程master 分支有新的提交,而本地master 分支上不存在,则结果不同(一个基于本地master 分支,另一个基于origin/master 分支)。

    【讨论】:

      【解决方案2】:
      git fetch origin
      

      仅将远程文件从远程存储库下载到本地分支。

      git rebase master
      

      获取整个分支(分支中的提交),并放在本地存储库的顶部。它会改变您项目的历史。

      git pull --rebase origin master
      

      git pull 默认执行合并,但你可以使用 rebase 选项强制它。

      查看link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 2021-02-05
        • 2013-03-14
        • 2016-10-27
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        相关资源
        最近更新 更多