git pull --rebase 和 git pull origin 有什么区别。据我了解,基本上 git pull --rebase 会更新我的本地存储库并更新分支,而 git pull origin 也会更新本地存储库,所以有什么区别在两个命令之间?
答案 0 :(得分:2)
简短答案:
Git pull原点执行获取,并使用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
集成的最终产品没有区别,但重新定基有助于 更干净的历史。如果您检查了一个经过重新调整的分支的日志,它看起来就像是一个线性历史记录:看起来所有工作都是串行进行的,即使最初是并行进行的也是如此。
注意: 不对存储库外部存在的提交进行基准化。
如果您遵循该准则,就可以了。如果您不这样做,那么人们会讨厌您,并且您会受到朋友和家人的嘲笑。 如果不遵循此准则,在协作环境中事情很容易变得混乱。
希望这会有所帮助:)
答案 1 :(得分:0)
有关权威参考,请参见official docs。
对于您的具体问题:
origin
是您要从中提取的远程存储库的名称,例如https://github.com/atom/atom.git
。如果忽略此值,它将使用来自当前分支的信息(通常为origin
,因为许多开发人员仅使用一个远程对象)。以下是所有有效的命令:
git pull
git pull --rebase
git pull origin
git pull --rebase origin
唯一的区别是,后两个指定了他们要从中读取数据的远程存储库。
因此,这里的比较主要是在git pull
和git pull --rebase
之间进行比较,这很值得哈塔蒂的回答或官方文档很好地解释。 --rebase
的文档:
为true时,在获取后将当前分支重新置于上游分支的顶部。如果存在一个与上游分支相对应的远程跟踪分支,并且上游分支自上次获取以来已被重新基准化,则重新基准将使用该信息来避免重新基准非本地更改。