@BogBel

Будут ли удалены данные с branch если сделать git reset --hard?

Доброго вечера. Я не особо силен в Git , потому прошу тапками не забрасывать.
Есть ветка origin master , в ней один коммит при инициализации.
Есть ветка task1 , в ней проделано штук 5 коммитов, после чего был неудачный merge в основную ветку.
Необходимо откатить master ветку в начальное состояние, да так, что бы ветка task1, осталась цела и невредима.
Коммит до которого необходимо откатить был раньше всех последующих коммитов в ветке task1.
Нашел команду git reset --hard , но насколько я понимаю, при такой команде весь репозиторий откатиться в начальное состояние и ветка task1 уйдет в небытие.
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
Lobotomist
@Lobotomist
Software Developer
git reset влияет только на текущую ветку. Ветка это что? Указатель на какой-то коммит. git reset перемещает этот указатель. При этом, в зависимости от опций (--hard, --soft, --mixed) он по-разному работает с файлами в рабочей директории. Если используется --hard - переносится указатель и состояние рабочей директории тоже меняется и становится таким, какое оно в целевом коммите.

То есть в вашем случае нужно:

# Откат коммита слияния в мастере

#перейти в мастер
git checkout master
# перенести указатель мастера на нужный коммит
git reset --hard <первый коммит мастера>
# запушить корректный мастер в origin
git push -f origin master

# Теперь откат ненужных коммитов в ветке task1

# перейти в ветку task1
git checkout task1
# перенести указатель ветки на нужный коммит
git reset --hard <good commit>


Поскольку вы фактически удалили часть коммитов из мастера при пуше нужен ключ --forced (-f) для того, чтобы подтвердить, что вы сделали это осознанно.

Для спокойствия - поставьте тег на коммите слияния. Так вы всегда сможете вернуться к нему, даже если что-то сделаете не так.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы