Ответ 1
Вы можете запустить:
git branch -f A 6
У меня есть две ветки git, "A" и "B" и фиксируются с номерами от 1 до 8. Моя история выглядит так:
1 -> 2 -> 3 -> 4[A] -> 5 -> 6 -> 7 -> 8[B]
Я хочу изменить его, чтобы моя история выглядела так:
1 -> 2 -> 3 -> 4 -> 5 -> 6[A] -> 7 -> 8[B]
То есть, я хочу переместить голову ветки А из фиксации 4, чтобы совершить 6.
Какие команды я использую для этого?
Вы можете запустить:
git branch -f A 6
git checkout A
git reset --hard 6
Это особый случай rebase, только ветка пуста:
git checkout A
git rebase B
rebase
является более общим; он также обрабатывает этот случай:
До:
A1 -> A2 -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
После:
A1' -> A2' -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
A1 'и A2' объединяются для учета дельта между 4 и 8 в родительской ветки.
Git rebase обрабатывает этот тривиальный случай без хлопот. Я создал репо с двумя коммитами на master
и ветвью br
, указывающей на первую фиксацию.
$ git checkout br
Switched to branch 'br'
$ git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded br to master.
Пуф, сделано. В журнале теперь отображается ветвь, указывающая на вторую фиксацию.
Мы также можем добиться этого "После": [спасибо М. Флашен за то, что это было отсутствует]:
A1'' -> A2'' -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
Вместо того, чтобы перераспределять ветвь B, мы будем называть конкретное commit 6, например.
git checkout A
git rebase 6 # rather than rebase B
Если нет A1 и A2, это сводится к исходному вопросу: перемещение указателя [A] с 4 до 6.