[英]Is it possible to remove a file from git commit history in a protected branch?
[英]Git - Rewriting history to remove one file from a prior multi-file commit in one branch
设置:我继承了一个具有旧的开发分支(称为oldDev
)的oldDev
,该分支是从另一个分支(称为master
)获取的。
oldDev
居住了一段时间,其中有部分 master
手动合并以及其自身的差异化开发(通过手动master
合并与原始更改的混合,不能选择重新定标)。 oldDev
已恢复生机,因此发生了从master
到oldDev
合并,以使其功能与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.