【问题标题】:Git Pull vs Git RebaseGit 拉取与 Git Rebase
【发布时间】:2016-07-08 23:57:58
【问题描述】:

我是 Git 的菜鸟,并试图了解 git pullgit rebase 之间的区别。有人可以举例说明何时使用哪个选项,因为我觉得两者都有相同的目的。

【问题讨论】:

标签: git


【解决方案1】:

git pullgit rebase 不能互换,但它们之间的联系很紧密。

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

变基是合并的替代方法。它不是创建一个组合两个分支的新提交,而是将其中一个分支的提交移到另一个分支之上。

您可以使用变基而不是合并 (git pull --rebase) 来拉取。您所做的本地更改将基于远程更改,而不是与远程更改合并。

Atlassian 有一些优秀的documentation on merging vs. rebasing

【讨论】:

  • 那么,将功能放在 master 之上和将功能与 master 合并之间的实际区别是什么,最终两者都混合了不是吗?
  • 最终提交的内容确实无法区分。但是,提交树看起来有点不同。我更喜欢 rebase 而不是合并的原因是,如果您有冲突,您可以在单个合并提交期间以提交方式解决它们,而不是全部解决。此外,这会导致更清晰、更线性的提交树,从而更容易遍历。
  • 当你检查提交历史时,如果你使用了 Git Pull,它会显示一个额外的合并提交,而在 git rebase 中,不会存在。从 git 历史的上下文来看,Git Rebase 是一种更简洁的方法。
【解决方案2】:

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

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

git pull origin master

将主分支拉入您的本地存储库

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

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

  • 您已在本地分支上提交了一些更改,例如名为SOME-FEATURE
  • 您的朋友在此期间正在开发其他功能,他将他的分支合并到 master 中

现在您想在本地分支上查看他和您的更改。 那么你结帐master 分支:

git checkout master

然后你可以拉:

git pull origin master

然后你去你的分支:

git checkout SOME-FEATURE

您可以通过 rebase master 获取最新更改并将您的分支提交放在首位:

git rebase master

我希望现在对你来说更清楚一点。

【讨论】:

  • 您不需要结帐大师。留在你的分支上,然后做:git fetch 然后git rebase origin/master
  • 通过检出本地主机然后拉出原始主机也会更新您的本地主机。这是应该使用的最佳实践之一
  • 那么如果我们合并 master 而不是 rebase 会有什么不同
【解决方案3】:

简而言之:

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

-> Git Rebase:它将您的更改置于所有新的远程更改之上,并重写提交历史,因此您的提交历史将比 git merge 干净得多。 Rebase 是一种破坏性操作。这意味着,如果您没有正确应用它,您可能会丢失已提交的工作和/或破坏其他开发人员存储库的一致性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多