这是提交历史:
iss1Anton从那里创建了一个分支master并进行了两次提交4和5。反过来,Vadim 决定开始自己的工作,从提交4中获取 Anton 的一些工作。Vadim 提交6并将他的分支合并iss2到master:
安东不知道有人一直在弹他的树枝。一天过去了,在继续开发该功能之前,Anton 决定在masterrebase 的帮助下进行新的更改。
我是否正确理解这是 Anton 无法重新定位的情况master之一,因为他的提交4之一已经进入了一般分支master?
更新
我应该注意到,在 Anton 计划做 rebase 的那一刻,Vadim 已经完成了他的合并,即提交4的更改已经在master.
我同意下面的回答者的观点,从技术上讲,rebase 可以完成,甚至可以在没有冲突的情况下完成。问题是这里是否违反了“你不应该改变总分支”的黄金法则?


其实有三个问题:
提交真的击中了分支
master吗?从描述中答案很明显:是的,我当然明白了。
如果在描述的情况下运行rebase命令会发生什么?
让我们检查:
创建三个提交:
从提交中
23b42ba创建一个分支iss1并添加更多提交:从提交中
8c59be3创建一个分支iss2并添加另一个提交:合并:
iss2_master在这里,我们正在接近临界点。击鼓。切换到
iss1并执行rebase命令:没有错误、事故和断肢。鼓声尴尬地打断了。提交彼此相处融洽:
一切,我们走吧。
在这种情况下是否可以执行rebase命令?
不幸的是,这里没有客观的答案。另一方面,有一个绝对客观的反问:为了纪念什么,事实上,这可能是“不可能的”吗?
rebase函数本身没有您描述的此类限制。非常简单,它比较了相对于新提交需要留下的更改。
这里有几个选项,具体取决于您追求的目标。最简单的情况是在提交 7 上重新设置提交 5,但在这种情况下,您在提交 4 上的部分历史记录将会丢失。您仍将是提交的作者,但iss1的工作将在稍后开始,就像以前一样。如果工作完成了,那么你可以做Merge,在这种情况下,第 4 次提交的更改将不会反映在第 8 次提交的差异中。
一个稍微不同的例子,假设没有 6 次提交,但第 3 次和第 4 次提交的更改相同,那么情况将非常相似。
您需要在本地存储库上进行试验以了解需要什么策略。例如,TortoiseGit 可以同时进行Rebase和Merge。
以防万一,我会留下文章的链接
形式上,根据该图,第 4 次提交本身并没有进入分支
master,而只有它的更改。