如何线性化 Git 中“分裂的”合并历史?
How to linearize “splintered” merging history in Git?
我已经通读了 git book 的基础知识,试图将红色分支与合并到的蓝色分支线性化。为了更容易回顾历史,我尝试只有一个分支,没有交叉点。我有什么选择可以做到这一点,什么是最好的?
答案建议 reset --soft
,但这里的演示假设它在合并后增长了很多。
可以在 af
之前或最好在 9c
提交之后将分支蓝色更改添加到红色。
* 5356e62 vimdiff solved
* c1ccf86 red forward
* 51fbd33 Merge branch 'blue' into red
|\
| * 96575dc new file
| * 1d7f531 some line and blue branch 3
* | 9cc3291 new file
* | 92569c6 another commit
* | f8d3ab2 blue branch 3
|/
* af8b651 init
Caveat -- ALL 执行您要求的方法移动 ref "backward"(有效地删除一些提交);如果这些提交已与其他开发人员共享,就会产生问题。请参阅有关从上游 rebase 恢复的 git rebase
文档,并了解虽然这是根据 rebase 进行记录的,但它适用于所有历史记录编辑。
如果 git reset --soft
是对上一个问题的合理回答,那么这里也同样合理。
git checkout 5356e62
git reset --soft 9cc3291
现在,从 1d7f531 开始的所有更改都显示为阶段性更改,因此
git commit
创建一个新提交,"squashes" 旧提交合二为一。
此时如果你有一个指向 96575dc 的分支,那么它将看起来是未合并的。 OTOH 如果父分支以前是唯一可以达到 96575dc 的分支,那么 96575dc 现在无法访问;但如果您不想要详细的历史记录也没关系,因为相关更改在您的新提交中。
更通用的解决方案是 merge --squash
,更通用的是 rebase --interactive
我已经通读了 git book 的基础知识,试图将红色分支与合并到的蓝色分支线性化。为了更容易回顾历史,我尝试只有一个分支,没有交叉点。我有什么选择可以做到这一点,什么是最好的?
reset --soft
,但这里的演示假设它在合并后增长了很多。
可以在 af
之前或最好在 9c
提交之后将分支蓝色更改添加到红色。
* 5356e62 vimdiff solved
* c1ccf86 red forward
* 51fbd33 Merge branch 'blue' into red
|\
| * 96575dc new file
| * 1d7f531 some line and blue branch 3
* | 9cc3291 new file
* | 92569c6 another commit
* | f8d3ab2 blue branch 3
|/
* af8b651 init
Caveat -- ALL 执行您要求的方法移动 ref "backward"(有效地删除一些提交);如果这些提交已与其他开发人员共享,就会产生问题。请参阅有关从上游 rebase 恢复的 git rebase
文档,并了解虽然这是根据 rebase 进行记录的,但它适用于所有历史记录编辑。
如果 git reset --soft
是对上一个问题的合理回答,那么这里也同样合理。
git checkout 5356e62
git reset --soft 9cc3291
现在,从 1d7f531 开始的所有更改都显示为阶段性更改,因此
git commit
创建一个新提交,"squashes" 旧提交合二为一。
此时如果你有一个指向 96575dc 的分支,那么它将看起来是未合并的。 OTOH 如果父分支以前是唯一可以达到 96575dc 的分支,那么 96575dc 现在无法访问;但如果您不想要详细的历史记录也没关系,因为相关更改在您的新提交中。
更通用的解决方案是 merge --squash
,更通用的是 rebase --interactive