合并可以更改分支的提交历史吗?

use*_*357 5 git merge

显然可以,请参见此处 -至少这是我的看法。

合并之前。的远程分支master在origin左侧。两个分支都相同。

在此处输入图片说明

现在假设我和我的朋友都做了一些工作,并且我的朋友首先将他的工作推到了远程分支机构,而我已经在本地提交了我的工作。

在此处输入图片说明

在这种情况下,我不能简单地进行操作git push,因为这将导致commited by other从远程存储库中删除该文件(我认为我可以为此执行`git push -f,但是再次-这样会覆盖我朋友的提交)。

该文章建议git pull origin master(fetch将originrepo master分支中的更改merge放入本地master分支中)重写本地分支中的提交历史记录master!怎么会这样?我认为合并只能创建一个新的合并提交,而不能更改现有的提交。但是在这种情况下,提交顺序已更改-现在commited by other是第一个,然后是 my local commit。

因此,知道pull与fetch相同(它会更新origin/master本地存储在我的PC上的远程跟踪分支),然后将更新合并origin/master到本地分支中master,在这种情况下会产生相同的结果-合并是否会更改过去在本地master分支中提交的顺序?

在此处输入图片说明

Dav*_*sch 6

但是在这种情况下,提交顺序已更改-现在由其他人提交的提交首先出现,然后是我的本地提交。

这是不正确的-您的本地提交和“其他提交”是同级或同级。新的合并提交将它们都作为父母。那有意义吗?您的提交历史记录至少没有改变。

我似乎无法访问您发布的网站,但是url中的标题是指合并和重新定基,并避免“重新设置地狱”。改头换面确实改变了您的历史记录;也许那就是作者所说的。

编辑以回应评论:如果在A-B-C本地和A-B-D远程,则在获取并合并后,您的本地将如下所示:

A--B--C--M
   \--D-/
Run Code Online (Sandbox Code Playgroud)

换句话说,C和D都将B作为的父母,并且C和D将成为的父母M。推送后,远程分支也将如下所示。

首先,您可能会想,“所以我的历史确实发生了变化,因为B以前有一个孩子,现在有两个孩子了”。但是git不存储指向孩子的指针,它仅存储指向父母的指针。并且C仍然有单亲B,因此您的历史记录没有改变。而且由于D仍然有单亲B,遥控器的历史也没有改变。