UDN-企业互联网技术人气社区

板块导航

浏览  : 3945
回复  : 0

[翻译] 《Git in Practice》翻译 技巧45 变基式的拉取远程分支:git pul...

[复制链接]
zhaoyx的头像 楼主
发表于 2015-9-29 11:27:50 | 显示全部楼层 |阅读模式
本帖最后由 zhaoyx 于 2015-9-29 11:27 编辑

技巧45 变基式的拉取远程分支:git pull - -rebase

当你拉取提交到你当前分支时,变基操作同样有用。几乎可以肯定,你不会在拉取上游新提交的时候,仅仅因为你在当前分支进行过提交而想要进行一次提交合并。但是无论如何,只要你在分支上进行过提交,在拉取到新的提交后,还是需要进行一次提交合并的。你可以使用git pull --rebase命令来避免生成一个合并冲突。

为了测试git pull --rebase,让我们为远程版本库再创建一个副本,在上面生成并推送一些新的提交。这样会让你在对远程版本库执行git pull --rebase命令时会下载到这些新的提交。

下面是创建另外本地副本库并且推送提交的一些步骤:
  • 切换到你想建立新 GitInPracticeRedux 副本库的目录,例如:
    cd /Users/mike/
    在 /Users/mike/GitInPracticeReduxPullTest 目录创建新的本地副本。
  • 执行
    git clone https://github.com/GitInPractice/GitInPracticeRedux.git GitInPracticeReduxPullTest
    克隆到 GitInPracticeReduxPullTest 目录。
  • 切换到新的本地副本目录:
    cd /Users/mike/GitInPracticeReduxPullTest
  • 修改文件 00-Preface.asciidoc
  • 执行
    git commit --message 'Preface: Sequel not prequel.' 00-Preface.asciidoc
  • 执行
    git push

现在让我们在主本地副本库创建一个提交:
  • 切换到版本库目录:比如,
    cd /Users/mike/GitInPracticeRedux/
  • 执行
    git checkout master
  • 编辑文件 02-AdvancedGitInPractice.asciidoc 并做一些修改。
  • 执行
    git commit --message="Chapter 2: only one chapter." 02-Advanced-GitInPractice.asciidoc
    会产生类似下面的输出:


图示 6.8 展示了在执行git pull --rebase操作之前,master 分支当前的状态。现在让我们执行一次变基方式的拉回。

问题
你希望从 origin/master 分支拉取代码并将当前 master 分支上的提交变基到上游变更之上。

解决方案
  • 切换到版本库目录:比如,
    cd /Users/mike/GitInPracticeRedux/
  • 执行
    git pull --rebase
    会产生类似下面的输出:

        回顾一下,git pull相当于执行git fetch && fit merge,那么,git pull --rebase相当于执行git fetch && git rebase
  • ① 显示了抓取操作的输出。如果你执行git fetch操作,输出将是一样的。
  • ② 显示的是成功执行变基操作的输出。你在本地 master 分支创建的提交已经变基到了远程 origin/master 分支的最新提交之上。这和你在执行git fetch之后执行git rebase origin/master是一样的。

图示 6.9 显示出了执行git pull --rebase操作之后 master 分支的状态。你可以看到,出现了一个来自 origin/master 的新提交(ae54679),之前在本地 master 分支顶部的提交被变基到了这个提交之上,并且生成了一个新的 SHA-1 值(27f2d8b)。如果有多个提交需要变基,这个操作也同样有效。

你已经执行完成变基式的拉取。现在可以使用git push将这些提交推送到上游了。

讨论
git pull --rebase经常被推荐作为更明智的默认用法来取代git pull操作。在执行gitpull操作时,你很少会想要创建一个合并提交,因此可以使用git pull --rebase来确保合并不会发生。这意味着你在推送这个分支时,它会拥有一个更简单清晰的历史记录。一旦你了解了如何变基和解决冲突,我推荐你使用git pull --rebase作为默认用法。

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部