Как переучиться в Git
Какие неинтерактивные команды git обеспечивают переход от "До" к "После" в каждом случае?
1a. перевоспитание я
До:
A---B---C---D
После:
C'---D'
/
A---B
1б. перевоспитание II
До:
C---D
/
A---B
После:
C
/
A---B---D'
1c. перевоспитание III
До:
C
/
A---B---D
После:
C---B'---D'
/
A
2 ответа
Все это выглядит как приложения git rebase --onto
,
1a. перевоспитание я
До:
A---B---C---D
После:
C'---D'
/
A---B
Установите ветки, чтобы пометить конкретные коммиты, а затем перейти на.
git checkout -b ex1a-b B
git checkout -b ex1a-d D
git checkout -b ex1a-a A
git rebase --onto ex1a-a ex1a-b ex1a-d
1б. перевоспитание II
До:
C---D
/
A---B
После:
C
/
A---B---D'
Создание веток, аналогичных приведенным выше: git rebase --onto ex1b-b ex1b-c ex1b-d
,
1c. перевоспитание III
До:
C
/
A---B---D
После:
C---B'---D'
/
A
Опять с ветками, а теперь просто git rebase ex1c-c ex1c-d
,
Это зависит от вашего определения B'
, C'
, а также D'
,
Если вы хотите перемещать патчи, так что (в первом примере) git diff B C
== git diff A C'
, то вы хотите "перебазировать" (не "reparent") с помощью git rebase
как описано Эмилем.
Если, с другой стороны, вы хотите перемещаться по снимкам, то вы действительно хотите "переписать". Для этого я предлагаю использовать git reparent
,
Скорее всего, вы на самом деле хотите перебазировать и не переписывать, но для справки, вот команды для переучивания. Они несколько сложны, потому что это не нормально.
(Ниже предполагается, что вы находитесь в филиале в D.)
1a. перевоспитание я
git rebase -i B
# Select the "edit" command for C
git reparent -p A
git rebase --continue
1б. перевоспитание II
git reparent -p B
1c. перевоспитание III
git rebase -i A
# Select the "edit" command for B
git reparent -p C
git rebase --continue