Как переучиться в 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

Установите ветки, чтобы пометить конкретные коммиты, а затем перейти на.

  1. git checkout -b ex1a-b B
  2. git checkout -b ex1a-d D
  3. git checkout -b ex1a-a A
  4. 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
Другие вопросы по тегам