Как переименовать в 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