如何向提交添加丢失的文件?

时间:2016-01-23 09:35:07

标签: git commit

考虑我有A,B,C,D提交并将它们推送到远程仓库。

提交D后,我发现有一个文件应该在B提交中。

如何编辑B提交并添加丢失的文件?

2 个答案:

答案 0 :(得分:1)

假设没有其他人从远程提取代码,这将有效。如果发生这种情况,你的历史就不再是你的了,这是一个坏主意。

  1. 确保您的回购清洁。
  2. git rebase -i A
  3. 在您的编辑器中,更改B的条目以进行编辑。
  4. 关闭编辑器启动rebase。 git将停在B
  5. git add file(其中file是您要添加的文件)。
  6. git commit --amend。修复提交消息并提交
  7. git rebase --continue获取其余的提交时间。
  8. 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提交。

enter image description here

如果需要,还有--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.`