@aarifkhamdi

Как сделать хитрый reset с сохранением коммитов?

Есть ветка 1 и ветка 2.

Мне нужно сохранить все коммиты в ветке 2, но чтобы она точно соответствовала ветке 1.

По сути это git reset --hard, но при этом нужно сохранить коммиты. Мне бы каким-то магическим образом вычислить все изменения, которые нужно сделать в ветке 2, чтобы получить ровно такое же состояние, какое сейчас в ветке 1. И сделать новый коммит в ветку 2, чтобы получить состояние как в ветке 1.

Потыкался, но ничего не придумал
  • Вопрос задан
  • 68 просмотров
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Мне бы каким-то магическим образом вычислить все изменения, которые нужно сделать в ветке 2, чтобы получить ровно такое же состояние, какое сейчас в ветке 1. И сделать новый коммит в ветку 2, чтобы получить состояние как в ветке 1.

$ git checkout branch2 # перейти к ветке branch2
$ git reset --hard branch1 # скопировать в неё историю и текущее состояние ветки branch1
$ git reset --soft HEAD@{1} # восстановить историю ветки branch2, но не трогать текущее состояние
$ git commit -m 'magic commit' # закоммитить текущее состояние (равное разности branch2 -> branch1) в branch2
Ответ написан
Комментировать
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Решение в одну строку
# удостовериться что мы в нужной ветке
git checkout branch2 
# создать коммит с нужным состоянием 
git merge --ff $(git commit-tree -p branch2  -m "magic commit" branch1^{tree})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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