git pull和git fetch+;git rebase?

git pull和git fetch+;git rebase?,git,git-rebase,git-pull,git-fetch,Git,Git Rebase,Git Pull,Git Fetch,表示git pull类似于git fetch+git merge 但是git-pull和git-fetch+git-rebase之间有什么区别呢?从您的问题中可以明显看出,您实际上只是在问git-merge和git-rebase之间的区别 那么让我们假设你是在普通情况下-你在你的主分支上做了一些工作,你从origin的分支中提取,它也做了一些工作。获取后,情况如下所示: - o - o - o - H - A - B - C (master) \

表示
git pull
类似于
git fetch
+
git merge


但是
git-pull
git-fetch
+
git-rebase
之间有什么区别呢?

从您的问题中可以明显看出,您实际上只是在问
git-merge
git-rebase
之间的区别

那么让我们假设你是在普通情况下-你在你的主分支上做了一些工作,你从origin的分支中提取,它也做了一些工作。获取后,情况如下所示:

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)
如果此时合并(git pull的默认行为),假设没有任何冲突,则最终会出现以下情况:

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)
- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)
另一方面,如果你做了适当的重基,你会得到以下结果:

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)
- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)
在这两种情况下,工作树的内容应该是相同的;您刚刚创建了一个不同的历史记录,并由此产生了它。rebase重写您的历史记录,使其看起来像是您在origin的新主分支(
R
)上提交的,而不是您最初提交的(
H
)。如果其他人已经从您的主分支中提取了资源,则永远不要使用重基方法

最后,请注意,通过将配置参数
branch..rebase
设置为true,实际上可以为给定分支设置
git pull
,以使用rebase而不是merge。您还可以使用
git pull--rebase

TLDR对单个pull执行此操作:
git pull
就像运行
git fetch
然后
git merge

git-pull--rebase
就像
git-fetch
然后
git-rebase

作为对你第一次发言的答复,
git pull
类似于
git fetch
+
git merge

在默认模式下,git pull是git fetch的缩写,后跟
git merge
FETCH\u HEAD“更准确地说,
git pull
使用 给定参数,然后调用
git merge
合并检索到的分支 “进入当前分支机构”

(参考号:)


关于你的第二个陈述/问题: “但是,
git-pull
git-fetch
+
git-rebase
之间有什么区别呢?”

同样,来自同一来源:
git pull--重新设置基址

使用--rebase,它运行git-rebase而不是git-merge


现在,如果你想问 '合并和重设基础之间的区别'

这里也有答案:


(改变版本历史记录方式的区别)

应该有人清理链接……我很惊讶另一个问题得到了多少选票。@xeno:我想这只是计算有多少人去了”我也有这个问题“总有一天,我会抽出时间真正阅读git文档,但在此之前,我会将我的投票添加到这类问题上。如果有人已经从您的主分支中提取了内容,然后重新设置了基础,会发生什么情况?这会破坏回购协议吗?你怎么知道是否有人从你的主分支机构撤资?如果你不确定有人没有,你应该假设他们有。我只是在想,除非你也在其他地方推动变革,而不是原点/主分支机构,我从来没有遇到过其他人拉取相关更改的问题,因为如果您已经将这些更改推送到origin/master,那么一开始就没有什么可以重新设置基础的。在我看来,这个警告只在比X->origin/X更复杂的情况下才起作用,但我可能错了。如果有人知道我忽略的一个场景,请分享。不,这不是结果。这些线仅仅代表了祖先,即A是B的父代。对于Q或B是否是第一个在时间上没有任何暗示。所有这些操作都基于提交图,而不是时间。Rebase只是移植了一些提交,结果正如我所展示的,不管提交时间戳是什么。我想指出的是,“git pull--Rebase”在大多数情况下就像“git fetch然后git Rebase”,但并不总是这样。在某些情况下,“git pull--rebase”做得更多。请看这个经常被引用的例子:非常感谢您的回答。从现在起,我真正理解了
git fetch+git rebase
命令的工作方式。从现在起,我们的git树上就没有多少冲突:)@DanielK,
git-rebase
也会执行这些额外的步骤,因为在那篇博文撰写后不久。请参阅git help rebase中关于
--分叉点的讨论。