Как отменить одновременное слияние нескольких запросов на извлечение и сохранить историю

У меня есть случай, когда мастер репозитория Github в настоящее время имеет серию отдельных запросов на вытягивание, которые уже были объединены в мастер. Я хочу отменить, скажем, последние 20 из этих слияний запросов на вытягивание, но сделать это из командной строки и сохранить историю.

Аналогичный вопрос был помечен как повторяющийся вернуть несколько слияний

Однако ответы, данные как уже существующие, на самом деле не касаются конкретного вопроса о том, что происходит, когда все, что вы хотите вернуть, исходит из серии запросов на вытягивание, которые все являются слияниями. Использование опции -m с git revert подходит для одного слияния за раз, верно? Поэтому я думаю, что ответ заключается в том, что нет хорошего способа (из командной строки) быстро отменить серию отдельных запросов на вытягивание, которые были объединены, и сохранить историю? Пожалуйста, поправьте меня, если я ошибаюсь в этом. Если мне нужно делать по одному, я могу просто использовать консоль Github и нажимать «Вернуть» для каждого.


person Zak Keirn    schedule 19.03.2020    source источник


Ответы (2)


Если вы хотите иметь одну (более позднюю) версию, в которой вы отменяете изменения из всех этих слияний, вы можете сделать это следующим образом:

git checkout <id-of-revision> # use the ID of the revision you would like to get your project back to (in terms of content)
git reset --soft <the-branch> # the branch where we want to add a revision to revert all of that
git commit -m "Reverting"
# If you like the results
git branch -f <the-branch> # move branch pointer to this new revision
git checkout <the-branch>
person eftshift0    schedule 19.03.2020
comment
Нет... ветка - это ветка, над которой вы работаете. мастер? развивать? что-нибудь еще? - person eftshift0; 20.03.2020
comment
В порядке. Итак, для своего приложения я использовал master для «ветки», затем после последней строки выше я сделал git checkout -b feature/new-master, затем я мог отправить это на удаленный компьютер и создать для него запрос на извлечение. Это сделало то, что я хотел. - person Zak Keirn; 20.03.2020

Шаг 1

Сначала создайте новую резервную ветку и оставьте ее в стороне. (backup-branch) Создайте новую ветку из master или dev, где бы вы ни хотели вернуться. (working-branch)

git revert commitid1

git revert commitid2

git revert commitid3.... лучший вариант.

не делайте git reset --hard commitid это испортит вашу индексацию.

Возврат является безопасным вариантом.

я сделал 180 возвратных коммитов.

Шаг 2

git log -180 --format=%H --no-merges используйте эту команду, чтобы распечатать только все идентификаторы коммитов.

он будет игнорировать идентификатор коммита слияния.

commitid1 commitid2 commitid3 ..... он будет печатать так.

Скопируйте его в возвышенное ctrl+a -> ctrl+alt+l добавить

git revert --no-commit commitid1

git revert --no-commit commitid2

git revert --no-commit commitid3

Скопируйте все и вставьте в командную строку. Все ваши коммиты будут отменены. теперь сделайте коммит git.

Затем выполните git push. создать запрос на слияние для мастера.

Шаг 3

Как проверить?

создать новую ветку (verify-branch).

Вы можете проверить это, выполнив

git reset -hard commitidX. Это идентификатор коммита, к которому вам нужно вернуться.

git status Это даст вам количество коммитов за мастером.

git push -f

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

person Gomathi Nayagam    schedule 16.03.2021