Master 修改一个文件,topic 删除它,然后恢复删除。如何变基?

Master modifies a file, topic deletes it and later reverts the deletion. How to rebase?

一个文件在主题分支的某处被删除,后来删除的提交被恢复。现在 master 分支修改了那个文件,这导致在 rebase 时删除提交时出现“modified/deleted”冲突。进一步假设删除提交(因此它的还原也)还包含其他不相关的更改:不幸的是,删除和还原不是孤立的。

我假设如果我接受删除提交及其恢复(即解决两个有利于主题分支),那么我最终会得到旧版本的文件,主更改丢失,我是否正确?

在不丢失主更改的情况下,最简单 处理这种情况的方法是什么? -i 可以避免吗?

(必须是rebase,不考虑合并)

简答

是的,你是对的:如果你通过删除文件来解决“modified/deleted”冲突,你将丢失来自 master 的更改。

一个策略:解决冲突后保留更改的文件。

如果你想在不使用 -i 的情况下执行此 rebase 操作,你可以确保 re-introduces 已删除文件的提交也有冲突,方法是解决“modified/deleted " 有利于修改版本的冲突。

如果您的代码库从未删除过该文件并不太不合逻辑,那么就不要在重新设置删除提交中删除它:保留包含 master 修改的版本。

当 rebase 操作命中将文件带回的提交时,它将报告冲突,因为添加了一个已经存在的文件。再次,通过保留来自 master 的修改来解决它,你应该设置。

在我看来,最简单的解决方案确实是rebase -i

老实说,我认为对你来说最不可行的解决方案是 rebase -i 到 master,然后 edit 重新引入文件的提交,这会给你一个有机会手动将其设置为 master 的版本。

一般想法

我相信不存在可以自动为您完成所有工作的解决方案:master 和这个分支之间存在真正的冲突,您必须以某种方式解决这个问题,-i,以及我的上面的第一个策略,或者可能首先修改分支(再次使用 rebase -i)以首先不删除文件。