Как переименовать в Git

Какие неинтерактивные команды git достигают изменения от Before to After в каждом случае?

1a. воссоздание I

До:

A---B---C---D

После:

  C'---D'
 /
A---B

1b. перевоспитание II

До:

  C---D
 /
A---B

После:

  C
 /
A---B---D'

1в. воссоздание III

До:

  C
 /
A---B---D

После:

  C---B'---D'
 /
A

Ответы

Ответ 1

Все они выглядят как приложения git rebase --onto.

1a. перевоспитание I

До:

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

1b. перевоспитание II

До:

  C---D
 /
A---B

После:

  C
 /
A---B---D'

Создание ветвей, подобных приведенным выше: git rebase --onto ex1b-b ex1b-c ex1b-d.

1в. воссоздание III

До:

  C
 /
A---B---D

После:

  C---B'---D'
 /
A

Опять с ветвями, но теперь просто git rebase ex1c-c ex1c-d.

Ответ 2

Это зависит от вашего определения B', C' и D'.

Если вы хотите перемещать патчи, чтобы (в первом примере) git diff B C == git diff A C', вы хотите "переустановить" (не "повторно) с помощью git rebase, как описано в Emil.

Если, с другой стороны, вы хотите перемещать моментальные снимки, тогда вы действительно хотите "откликнуться". Для этого я предлагаю использовать git reparent.

Скорее всего, вы действительно хотите переустановить, а не повторно, но для справки, вот команды для репарации. Они несколько сложны, потому что это не нормальная вещь.

(Предполагается, что вы сейчас находитесь в ветки в D.)

1a. воссоздание I

git rebase -i B
# Select the "edit" command for C
git reparent -p A
git rebase --continue

1b. перевоспитание II

git reparent -p B

1в. воссоздание III

git rebase -i A
# Select the "edit" command for B
git reparent -p C
git rebase --continue