Удалить коммиты ниже определенного конкретного коммита - PullRequest
0 голосов
/ 02 апреля 2019

Я вытащил какой-то проект, чтобы чему-то научиться.Я случайно создал свою работу в одном проекте.Совершил мои изменения поверх существующих коммитов.Мне нужно удалить все коммиты, которые находятся ниже определенного коммита, и сделать его начальным.

Ситуация примерно такая:

enter image description here

Поэтому я хочу удалить все коммиты от X до Y.

Я просматривал сообщения типа Удаление коммитов перед конкретным коммитом , но не смог добиться того, что искал.

Ценю любую помощь.

1 Ответ

1 голос
/ 02 апреля 2019

Вам нужно переписать всю историю.

Решение 1:

# suppose you are now on the branch master
git checkout --orphan temp CommitY
# make the new root commit
git commit 
# apply the commits after CommitY to temp
git cherry-pick CommitY..master
# reset master to the new head
git checkout master
git reset temp --hard
git branch -D temp

Решение 2:

Чтобы наглядно продемонстрировать процесс, давайте обозначим CommitX буквой A, а последующие - B, C, D (CommitY), E и F (Head).

git rebase -i --root

И тогда вы увидите редактор с содержанием:

pick 6988ba0 A
pick cd42d7a B
pick 6b1aa54 C
pick d4bc4d1 D
pick 54c78e5 E
pick fc2f728 F

Изменить pick из B, C и D на squash или s.

pick 6988ba0 A
s cd42d7a B
s 6b1aa54 C
s d4bc4d1 D
pick 54c78e5 E
pick fc2f728 F

Сохранить и выйти. Появится другой редактор с сообщением о фиксации по умолчанию, чтобы вы могли ввести сообщение о фиксации для нового корня. После редактирования сохраните и выйдите. A, B, C и D сводятся к одному коммиту в качестве нового корня. E и F применяются повторно.

В обоих случаях коммиты переписываются / воссоздаются ,, поэтому их хэши являются новыми. Вам может потребоваться принудительное нажатие, чтобы обновить ветку в удаленном хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...