Итак, вы хотите разделить коммит C на середину истории после B:
Создайте название ветки, чтобы удержать ваше место, и проверьте его.
Сброс до B.
Добавьте вновь обнаруженные файлы и зафиксируйте их как C.
Перебазировать старую ветку поверх новой.
Вот пример. Я подготовил образец репо; вот журнал:
commit 740dc8c1dd312d93c63f8edd4dfb91503f7f66df (HEAD -> master)
F
F (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit d0b2924ad33e4d7f2898eb8707bbdf016f7adf8a
E
E (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit a932a794ceb6df01483490410d7a3e538f556876
B
B (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 85d3a01ee94427729b745078c8c06d8b89a6af52
A
A (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
Итак, читая снизу вверх, я добавил файл A и вызвал этот коммит A, добавил файл B и вызвал этот коммит B, затем то же самое для E и для F.
Теперь представьте, что мы обнаруживаем существование файла C. Я разделю в цепочке истории коммит, который добавляет C:
git branch holdMyPlace
git checkout holdMyPlace
git reset --hard a932a794 # go back to B
touch C
git add .
git commit -m"C"
git rebase holdMyPlace master
Вот журнал сейчас:
commit 882d6e170101a1a9cb0462c5eb1b6103470ab07c (HEAD -> master)
F
F (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 57e9a01b94f48741b70ecfea32492659cef4aeb3
E
E (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit c5b41b74b2dc0a36bef17c01ed581eda585ce103 (holdMyPlace)
C
C (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit a932a794ceb6df01483490410d7a3e538f556876
B
B (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
commit 85d3a01ee94427729b745078c8c06d8b89a6af52
A
A (new) | 0
1 file changed, 0 insertions(+), 0 deletions(-)
Это именно та история, которую вы хотели: она выглядит как C было добавлено после B, а E и F были добавлены после C.