Как я могу разделить Git commit, зарытый в истории?

Я вскрыл свою историю и хочу внести в нее некоторые изменения. Проблема в том, что у меня есть фиксация с двумя несвязанными изменениями, и эта фиксация окружена некоторыми другими изменениями в моей локальной (не-толкаемой) истории.

Я хочу разбить эту фиксацию до того, как ее вытащить, но большинство руководств, которые я вижу, связаны с разделением ваших последних фиксаций или незафиксированных локальных изменений. Возможно ли сделать это с фиксацией, которая была похоронена в истории немного, без необходимости "повторять" мои коммиты с тех пор?

Ответ 1

Существует руководство по расщеплению коммитов в справочной странице переустановки. Краткое описание:

  • Выполните интерактивную перезагрузку, включая целевую фиксацию (например, git rebase -i <commit-to-split>^ branch) и отметьте ее для редактирования.

  • Когда битба достигает этого значения, используйте git reset HEAD^ to reset до фиксации, но сохраните свое дерево работы.

  • Постепенно добавляйте изменения и фиксируйте их, делая как можно больше коммитов. add -p может быть полезно добавить только некоторые изменения в данный файл. Используйте commit -c ORIG_HEAD, если вы хотите повторно использовать исходное сообщение фиксации для определенной фиксации.

  • Если вы хотите проверить, что вы совершаете (хорошая идея!), используйте git stash, чтобы скрыть часть, которую вы не совершили (или stash --keep-index, прежде чем вы ее совершите), проверьте, затем git stash pop, чтобы вернуть остальное дерево работы. Продолжайте совершать коммиты, пока не получите совершенные изменения, то есть получите чистое дерево.

  • Запустите git rebase --continue, чтобы продолжить применять коммиты после комментирования в настоящее время.

Ответ 2

Если вы еще не нажали, используйте git rebase. Еще лучше, используйте git rebase -i для перемещения в интерактивном режиме. Вы можете переместить оскорбительную фиксацию на передний план, затем разделить ее по своему усмотрению и переместить патчи назад (если необходимо).