考虑我有A,B,C,D提交并将它们推送到远程仓库。
提交D后,我发现有一个文件应该在B提交中。
如何编辑B提交并添加丢失的文件?
答案 0 :(得分:1)
假设没有其他人从远程提取代码,这将有效。如果发生这种情况,你的历史就不再是你的了,这是一个坏主意。
git rebase -i A
B
的条目以进行编辑。B
。git add file
(其中file是您要添加的文件)。git commit --amend
。修复提交消息并提交git rebase --continue
获取其余的提交时间。 git push --force
。 答案 1 :(得分:0)
您可以使用作为交互式rebase的壁球。您只需要记住 rebase 的结果。 拥有该分支副本的任何人都必须删除它并再次获取,因为您的历史记录已更新。
完成重写历史记录后,您必须删除远程分支或使用-f
强制推送。
为了做一个git squash,请按照以下步骤操作:
// X is the number of commits you wish to squash
git rebase -i HEAD~X
一旦你压缩你的提交 - 选择e
来编辑所需提交的内容,进行更改并提交。在您的情况下,将缺少的文件添加到B
提交。
如果需要,还有--root标志
尝试:git rebase -i --root
- root
Rebase all commits reachable from <branch>, instead of limiting them with
an <upstream>.
This allows you to rebase the root commit(s) on a branch.
When used with --onto, it will skip changes already contained in `<newbase>`
(instead of `<upstream>`) whereas without --onto it will operate on every
change. When used together with both --onto and --preserve-merges, all root
commits will be rewritten to have `<newbase>` as parent instead.`