У меня есть существующее хранилище, над которым я работаю, но в последнее время я узнал много нового о хороших практиках и о самом git.Я хотел потрясти мою историю по своему вкусу, особенно некоторые ранние коммиты.
Ниже приведен фрагмент текущей истории.Я хочу перебазировать коммит e5cb9b8 на 1a92e84, чтобы у меня был только один / два уровня глубины в графе истории (визуально, смена родителя e5cb9b8).Я пробовал перебазировать
git rebase -p --onto 1a92e84 e5cb9b8 master
и черпать в новую ветку, созданную из 9ecbe00.Cherrypicking возвращает мне историю с ошибками, перебазирование завершается ошибкой со следующим сообщением
ошибка: commit ca230d8c048d22de6f219da8a22e70a773827c38 - это слияние, но опция -m не указана.
неустранимый: cherry-pick fail
Не удалось выбрать ca230d8c048d22de6f219da8a22e70a773827c38
* | 45a0a21 - (7 weeks ago) #17 Updates README.md - Kamil Pacanek
|/
* ca230d8 - (8 weeks ago) Merge pull request #2 from KamilPacanek/feat/rmb-support-removing-parts - Kamil Pacanek
|\
| * e5cb9b8 - (8 weeks ago) Adds support for removing parts on ReactorCells - KamilPacanek
* | 1a92e84 - (8 weeks ago) Merge pull request #1 from KamilPacanek/enable-gh-pages - Kamil Pacanek
|\ \
| |/
| * 81761ff - (8 weeks ago) Adds GH Pages support - KamilPacanek
|/
* 9ecbe00 - (8 weeks ago) Initial commit - KamilPacanek
Ожидается:
* | 45a0a21' - (7 weeks ago) #17 Updates README.md - Kamil Pacanek
|/
* ca230d8' - (8 weeks ago) Merge pull request #2 from KamilPacanek/feat/rmb-support-removing-parts - Kamil Pacanek
|\
| * e5cb9b8' - (8 weeks ago) Adds support for removing parts on ReactorCells - KamilPacanek
|/
* 1a92e84 - (8 weeks ago) Merge pull request #1 from KamilPacanek/enable-gh-pages - Kamil Pacanek
|\
| |
| * 81761ff - (8 weeks ago) Adds GH Pages support - KamilPacanek
|/
* 9ecbe00 - (8 weeks ago) Initial commit - KamilPacanek
Я искал в StackOverflow аналогичные проблемы, и похоже, что никто не описывал такие модификации такглубоко в историю.
Решение
Хорошо, для будущих читателей и для себя я записываю решение для моей проблемы.@alfunx answer был ключом к ее решению - я нашел другое объяснение git rebase
и git rebase --onto
и начал экспериментировать с моим хранилищем.Методом проб и ошибок мне удалось * достичь ожидаемого графа истории, выполнив
git rebase -ir --onto 1a92e84 81761ff develop
и заменив следующий фрагмент списка задач
label onto
# Branch KamilPacanek/feat/rmb-support-removing-parts
reset onto
pick e5cb9b8 Adds support for removing parts on ReactorCells
label KamilPacanek/feat/rmb-support-removing-parts
# Branch enh/add-uranium-cells
reset 9ecbe00 # Initial commit
merge -C 1a92e84 onto # Merge pull request #1 from KamilPacanek/enable-gh-pages
merge -C ca230d8 KamilPacanek/feat/rmb-support-removing-parts # Merge pull request #2 from KamilPacanek/feat/rmb-support-removing-parts
label branch-point
следующим (изменил сбросПозиция и удален один, избыточный, фиксация слияния):
label onto
# Branch KamilPacanek/feat/rmb-support-removing-parts
reset onto
pick e5cb9b8 Adds support for removing parts on ReactorCells
label KamilPacanek/feat/rmb-support-removing-parts
# Branch enh/add-uranium-cells
reset onto
merge -C ca230d8 KamilPacanek/feat/rmb-support-removing-parts # Merge pull request #2 from KamilPacanek/feat/rmb-support-removing-parts
label branch-point
*) На самом деле, было еще многое сделать для достижения этого состояния, но я не хочу запутывать решение второстепенными проблемами.Первая ошибка git rebase
с этим сообщением:
ошибка: отказ от обновления ссылки с недопустимым именем 'refs / rewritten / Implement-durability-loss.'
подсказка: не удалось выполнитькоманда todo
подсказка: метка Implement-durability-loss.
Как видите, у меня есть точка в конце сообщения фиксации.После того, как я решил это (с другим ребазом с помощью команды reword
), я смог двигаться вперед.
Кроме того, похоже, что git rebase --abort
не очищает ссылки, созданные во время git rebase -r
.. поэтому у меня был беспорядок в истории.Решил это через rm -rf .git/refs/rewritten
.Другое дело, у меня была оставшаяся папка .git / sequencer, которую можно было удалить с помощью git revert --quit
.