我们遇到一个问题,几周前我们忘记在版本控制中添加了一个依赖于构建的文件目录,我们现在想要添加它们,这样我们就可以在检查旧版本时进行构建。
我知道我们可以使用git rebase -i
来编辑一系列提交,但是这不应该对已经被推送的历史记录进行,因为这会导致团队其他成员的合并问题。
我也知道使用filter-branch
将允许我们从已经被推送的旧提交中删除文件,强行推送这些更改不会给其他人带来问题(我已经成功完成了这个)。
我的观点是,似乎有时编辑推动历史似乎没问题,而时间不是,所以我希望我们的问题可以解决。
是否可以将这些文件添加到已共享的历史记录中?
答案 0 :(得分:2)
是的,但它会改变那段历史。任何已提取此数据的人都必须处理它。有关需要完成的操作,请参阅从上游Rebase恢复部分的rebase man-page部分。在继续之前让任何受影响的人知道这是一个好主意,这样他们就可以进行任何更改
如果你没有这样做,请检查第一次应该有丢失文件的提交,创建一个分支,添加文件并修改提交。
git checkout <commit hash>
git branch new_branch
<add the missing files>
git add .
git commit --amend <-- a text editor will open, just keep the message and continue
此时,树将如下所示,B
在修改之前是提交,在修改之后是B'
提交。 C - D - E
是自那时以来的提交。
- A - B - C - D - E
\
- B'
现在将C - D - E
重新加入B'
以“修复”历史记录。
<`B` should still be checked out>
git rebase -i E
编辑器将打开列出要移动的提交,B
可能是列表中的第一个 - 如果是删除它,只留下C
,D
和{ {1}}在文件中。关闭并保存文件以开始变基。
如果文件从未在以后的提交中添加,则不应存在任何冲突 - 但如果存在则需要解决。
树现在看起来像这样
E
如果分支不再引用提交- A - B - C - D - E
\
- B' - C' - D' - E' <-- E' will be checked out.
,则它们将不会显示在B - C - D - E
中,并且稍后将被垃圾回收删除。这将为您留下git log
。