Git Pull vs Git Rebase

use*_*236 91 git

我是Git中的菜鸟,并试图了解git pullvs 之间的区别git rebase.有人可以提供一个示例何时使用哪个选项,因为我觉得两者都有相同的用途.

Pet*_*ter 90

git pull并且git rebase不可互换,但它们紧密相连.

git pull从远程获取当前分支的最新更改,并将这些更改应用于分支的本地副本.通常,这是通过合并完成的,即将本地更改合并到远程更改中.所以git pull类似于git fetch & git merge.

重新定位是合并的替代方案.它不是创建一个组合了两个分支的新提交,而是将其中一个分支的提交移到另一个分支的顶部.

您可以使用rebase而不是merge(git pull --rebase).您所做的本地更改将在远程更改之上进行重新定位,而不是与远程更改合并.

Atlassian有一些关于合并与变基的优秀文档.

  • 那么将功能放在 master 之上和将功能与 master 合并之间有什么实际区别,最终两者都是混合的不是吗? (2认同)
  • 结果提交的内容确实无法区分。然而,提交树看起来有点不同。我更喜欢变基而不是合并的原因是,如果存在冲突,您可以按提交方式解决它们,而不是在单个合并提交期间解决所有冲突。此外,这会导致更干净、更线性的提交树,这使得它更容易浏览。 (2认同)

Tom*_*asz 42

git-pull - 从另一个存储库或本地分支GIT PULL获取并集成

基本上你将远程分支拉到你的本地,例如:

git pull origin master
Run Code Online (Sandbox Code Playgroud)

将master分支拉入本地存储库

git-rebase - 转发端口本地提交到更新的上游头 GIT REBASE

这个是将您的本地更改置于其他用户远程完成的更改之上.例如:

  • 您已在本地分支上提交了一些更改,例如调用 SOME-FEATURE
  • 与此同时,你的朋友正在研究其他功能,并将他的分支合并为主人

现在,您希望在本地分支上查看他和您的更改.那么你结账master分支:

git checkout master
Run Code Online (Sandbox Code Playgroud)

然后你可以拉:

git pull origin master
Run Code Online (Sandbox Code Playgroud)

然后你去你的分店:

git checkout SOME-FEATURE
Run Code Online (Sandbox Code Playgroud)

并且您可以进行rebase master以从中获取最新的更改并将您的分支提交放在最前面:

git rebase master
Run Code Online (Sandbox Code Playgroud)

我希望现在对你来说更清楚了.

  • 你不需要结账主人.留在你的分支上做:`git fetch`然后`git rebase origin/master`. (9认同)
  • 通过检查本地主控然后拉取原始主控也将更新您的本地主控。这是应该使用的最佳实践之一 (3认同)

Sau*_*ala 7

简而言之 :

-> Git Merge:它将仅合并您的更改和远程更改,这将创建另一个提交历史记录

-> Git Rebase:它将您的更改放在所有新的远程更改之上,并重写提交历史记录,因此您的提交历史记录将比git merge更整洁。变基是一种破坏性操作。这意味着,如果未正确应用它,则可能会丢失已完成的工作和/或破坏其他开发人员存储库的一致性。