是的,但它会改变那段历史。任何提取了这些数据的人都必须处理它。请参阅Recovering from Upstream Rebase部分的rebase 手册页中的部分,了解需要完成的操作。在继续之前让受影响的任何人知道是个好主意,这样他们就可以提交任何更改
如果您对此感到满意,请检查应该丢失文件的第一个提交,创建一个分支,添加文件并修改提交。
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
和E
文件。关闭并保存文件以开始变基。
如果文件从未在以后的提交中添加,则不应该有任何冲突——但如果有,则需要解决它们。
树现在看起来像这样
- A - B - C - D - E
\
- B' - C' - D' - E' <-- E' will be checked out.
如果提交B - C - D - E
不再被分支引用,它们将不会出现,git log
并将在稍后被垃圾收集器删除。这给你留下了A - B' - C' - D' - E'
.