【问题标题】:what is the difference between git pull --rebase and git pull origin? is both commands functionality is same? [duplicate]git pull --rebase 和 git pull origin 有什么区别?两个命令的功能是否相同? [复制]
【发布时间】:2019-05-26 15:03:21
【问题描述】:

git pull --rebase 和 git pull origin 有什么区别。据我了解,基本上 git pull --rebase 会更新我的本地仓库并更新分支,而 git pull origin 也会更新本地仓库,那么有什么区别两个命令之间?

【问题讨论】:

  • title 应该是 git pull origin。但是 git pull 使用来自远程(来源)的更改更新您的本地存储库。使用 rebase,您的更改将添加到从远程提取的更改之上。这样做,希望能保持一棵干净的树。

标签: git


【解决方案1】:

请参阅official docs 获取权威参考。

对于您的具体问题: origin 这是您要从中提取的远程存储库的名称,例如https://github.com/atom/atom.git。如果省略此值,它使用来自当前分支的信息(通常是origin,因为许多开发人员只使用一个远程)。以下都是有效的命令:

  1. git pull
  2. git pull --rebase
  3. git pull origin
  4. git pull --rebase origin

唯一的区别是最后两个指定他们想要从哪个远程存储库读取数据。 因此,这里的比较主要是在git pull 和git pull --rebase 之间进行比较,hatati 的回答或官方文档解释得很好。 --rebase 的文档:

如果为 true,则在获取后将当前分支重新定位到上游分支之上。如果存在与上游分支相对应的远程跟踪分支,并且上游分支自上次获取后被重新定位,则重新定位使用该信息来避免重新定位非本地更改。

【讨论】:

    【解决方案2】:

    简答: Git pull origin 执行提取并将提取的数据与merge 命令合并。 git pull --rebase 执行提取并将提取的数据与rebase 命令合并。

    更长的解释答案: 假设您有以下本地历史记录,其中包含一些提交和两个分支“master”和“experiment”

    有两种方法可以将更改从实验移动到主分支。第一种方法是merge 命令。它在两个最新的分支快照(C3 和 C4)和两者的最新共同祖先(C2)之间执行三路合并,创建一个新的快照(并提交)。

    方法二:您可以使用 C4 中引入的更改补丁,然后 在 C3 上重新应用它。这称为变基。使用 rebase 命令,您可以获取在一个分支上提交的所有更改并在另一个分支上重放它们。

    在本例中,您将运行以下命令:

    $ git checkout experiment
    $ git rebase master
    

    它的工作原理是转到两个分支的共同祖先(你所在的一个和你正在重新定位的一个),获取你所在分支的每个提交引入的差异,保存这些差异到临时文件,将当前分支重置为与您正在变基的分支相同的提交,最后依次应用每个更改。

    此时,你可以回到master分支,做一个快进合并。

    $ git checkout master
    $ git merge experiment
    

    集成的最终产品没有区别,但变基有助于 更清洁的历史。如果你检查一个变基分支的日志,它看起来像一个线性历史:看起来所有的工作都是串行发生的,即使它最初是并行发生的。

    注意: 不要对存储库之外的提交进行变基。

    如果您遵循该准则,您会没事的。如果你不这样做,人们会恨你,你会被朋友和家人鄙视。 如果不遵循此准则,协作环境中的事情很容易变得一团糟。

    希望这会有所帮助:)

    【讨论】:

    • 我相信它对正常合并执行双向合并。
    猜你喜欢
    • 2021-02-05
    • 2017-06-30
    • 2021-08-03
    • 2011-03-22
    • 2021-10-14
    • 2015-03-21
    • 2011-09-11
    • 2014-10-15
    相关资源
    最近更新 更多