git, оформить заказ на конкретный коммит на master - PullRequest
0 голосов
/ 11 октября 2019

Вчера в моей основной ветке разные люди делали свои коммиты. Последние 2 коммита неверны, есть ли способ оформить заказ мастером на конкретный коммит?

Что-то вроде

git checkout master -some_commit

enter image description here

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Да, вы можете! Вы можете напрямую перейти к любому коммиту, который вам нравится, передав хеш коммита в качестве аргумента

git checkout COMMIT_HASH

Хеш коммита можно найти, просто взглянув на git log.

Имейте в виду, что это, скорее всего, оставит вас в отключенном состоянии HEAD.

Отредактируйте в соответствии с обсуждением в комментариях: что вы можете сделать, это пойтис желаемым коммитом и из этого отсоединенного состояния HEAD создайте новую ветку. Перейдите в свою новую ветку и cherry-pick два неверных коммита. На данный момент они в безопасности. Вы можете безопасно вернуть вашу основную ветку к правильному коммиту, который вы хотите, а затем добавить нужные исправления. После всего этого вы можете объединить другую ветвь.

  1. Оформить желаемый коммит
  2. Создать новую ветку
  3. cherry-pick два коммита в новой ветке
  4. Вернуть мастер к желаемой фиксации.
  5. Необязательно: ветвь слияния
1 голос
/ 11 октября 2019

Правильный ответ зависит от вашей конечной цели и от того, существуют ли эти коммиты в удаленном хранилище.

Если все, что вы хотите сделать, это посмотреть, как проект выглядит до того, как были применены эти коммиты, тогда

git checkout bad-commit-id^

Это проверяет другую "ветку", и позже вы можете оформить заказ master снова.

Если ваша цель состоит в том, чтобы изменить ваш репозиторий так, чтобы эти коммиты по существу больше не существовали, вы можете сделать

git reset --hard bad-commit-id^

или

git revert bad-commit-id

прежние стирает все фиксирует от bad-commit-id до HEAD. Последний просто отменяет один плохой коммит, добавляя новый коммит к HEAD.

То, что вы выберете, во многом зависит от наличия коммитов в удаленном репозитории. Использование reset вызовет проблемы, когда вы попытаетесь отправить, либо для вас, либо для кого-то еще, кто клонировал хранилище.

Если это общий репозиторий и вы не очень опытный пользователь git, я бы рекомендовал использовать git revert. Если вы знаете, что делаете, то git reset также имеет свое место, но вам действительно нужно понимать последствия этого.

tl; dr - git revert вполне безопасно, тогда как git reset - опасный, но мощный инструмент.

0 голосов
/ 11 октября 2019

Вы хотите git reset --hard HEAD~2

Синтаксис HEAD~X относится к коммиту X, зафиксированному ранее

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