繁体   English   中英

Git-重写历史记录以从一个分支中的先前多文件提交中删除一个文件

[英]Git - Rewriting history to remove one file from a prior multi-file commit in one branch

设置:我继承了一个具有旧的开发分支(称为oldDev )的oldDev ,该分支是从另一个分支(称为master )获取的。

oldDev居住了一段时间,其中有部分 master手动合并以及其自身的差异化开发(通过手动master合并与原始更改的混合,不能选择重新定标)。 oldDev已恢复生机,因此发生了从masteroldDev合并,以使其功能与master兼容。 这跨越了多年的主要/次要“发布”标签,涉及成千上万个已更改的文件。 ;-)

问题:在成千上万个已更改的文件中,我已经开发了一个文件列表,这些文件仅需要跟踪master文件,而不是oldDev中已更改文件提交的oldDev

那么,如何重写历史记录以在一个分支中删除较旧的多文件提交的“单个”文件? 因此,该文件的历史记录(更改和内容)仅基于master分支,而不oldDev

注意:基于当前分支( master )的流程,我不希望从分支中删除该文件,该文件应该仍然存在。

更新:

M - M1(F1)(F2) - M2(F1)(F2) - M3(F1)(F2) - M4(F1)(F2)
 \
  X - X1(F'1)(F2) - X2(F'1)(F'2) - X3(F'1)(F'2)

在分支X中,从X2提交中删除文件更改F'2,以便该提交中只有F'1(因此将F'2从先前的提交“还原”到F2)。

M - M1(F1)(F2) - M2(F1)(F2) - M3(F1)(F2) - M4(F1)(F2)
 \
  X - X1(F'1)(F2) - X2(F'1)(F2) - X3(F'1)(F2)

我假设这无法在git历史记录重写内完成

如果可能的话,使用git filter-branch --tree-filter ,您可以在其中执行以下操作:

git checkout aster -- afile

这将替换该文件的内容(在oldDev分公司)从一个master

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM