Подтвердить что ты не робот

Удалите коммиты до определенного коммита

Есть ли способ удалить все коммиты перед указанным фиксацией и использовать их как начальные?

4b9b3361

Ответ 1

Предположим, что новый старейший хеш-фиксация X, и мы можем временно использовать "oldroot" и "newroot":

git checkout -b oldroot X
TREE=`git write-tree`
COMMIT=`echo "Killed history" | git commit-tree "$TREE"`
git checkout -b newroot "$COMMIT"
git rebase --onto newroot oldroot master
# repeat for other branches than master that should use the new initial commit
git checkout master
git branch -D oldroot
git branch -D newroot
git gc # WARNING: if everything done right, this will actually delete your history from the repo!

Это создаст фиксацию "newroot" с тем же содержимым, что и "oldroot", но без каких-либо родителей. Затем он переустанавливает все остальные ветки на новый корень, который должен быть в истории всех из них.

EDIT: проверено и исправлено; чуть позже, немного уточнил

Ответ 2

Чем проще будет решение, Сначала предположим, что ваша ветка зафиксировала main, и вы совершили фиксацию сначала, теперь вы также сделали фиксацию второй поверх first. Итак, у вас есть что-то вроде:

main->first->second

Теперь вы хотите иметь второй поверх основного, а не поверх сначала. Что-то вроде:

main->second->first or main->second

Вы можете просто сделать,

git rebase -i main

Это даст вам интерактивную оболочку, в которой вы можете изменить порядок фиксации или удалить любую фиксацию по вашему выбору.