git pull --rebase和git pull origin有什么区别?两个命令的功能是否相同?

时间:2018-12-28 21:23:57

标签: git

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

2 个答案:

答案 0 :(得分:2)

简短答案: Git pull原点执行获取,并使用merge命令合并获取的数据。 git pull --rebase执行获取,并使用rebase命令合并获取的数据。

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

Simple divergent history

有两种方法可以将更改从实验转移到主分支。第一种方法是merge命令。它在两个最新的分支快照(C3C4)与两个最新分支快照(C2)之间进行三向合并,以创建新快照(并提交) )。

Merging to integrate diverged work history

第二种方法:您可以获取C4和 在C3顶部重新应用它。这称为变基。使用rebase命令,您可以获取在一个分支上提交的所有更改,然后在另一个分支上重播它们。

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

$ git checkout experiment
$ git rebase master

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

Rebasing the change introduced in C4 onto C3

这时,您可以返回master分支并进行快速合并。

$ git checkout master
$ git merge experiment

Fast-forwarding the master branch

集成的最终产品没有区别,但重新定基有助于 更干净的历史。如果您检查了一个经过重新调整的分支的日志,它看起来就像是一个线性历史记录:看起来所有工作都是串行进行的,即使最初是并行进行的也是如此。

注意: 不对存储库外部存在的提交进行基准化。

如果您遵循该准则,就可以了。如果您不这样做,那么人们会讨厌您,并且您会受到朋友和家人的嘲笑。 如果不遵循此准则,在协作环境中事情很容易变得混乱。

希望这会有所帮助:)

答案 1 :(得分:0)

有关权威参考,请参见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 pullgit pull --rebase之间进行比较,这很值得哈塔蒂的回答或官方文档很好地解释。 --rebase的文档:

  

为true时,在获取后将当前分支重新置于上游分支的顶部。如果存在一个与上游分支相对应的远程跟踪分支,并且上游分支自上次获取以来已被重新基准化,则重新基准将使用该信息来避免重新基准非本地更改。