РЕДАКТИРОВАТЬ:
Мой ответ ниже документов способ слияния master
в aq
, где , если вы просмотреть детали слияния в нем перечислены изменения , внесенные в aq
до слияния, а не изменения , сделанные на master
. Я понял, что это, вероятно, не то, что вы хотите, даже если вы думаете, что это так!
Просто:
git checkout aq
git merge master
Это хорошо.
Да, это простое слияние покажет, что изменения master
были сделаны aq
в этот момент, а не наоборот; но это нормально - это то, что случилось! Позже, когда вы, наконец, объедините свою ветку master
, тогда объединение, наконец, покажет все ваши изменения в том виде, в master
каком они были внесены (это именно то, что вы хотите, и это коммит, где люди все равно ожидают найти эту информацию).
Я проверил, и подход ниже также показывает те же самые изменения (все изменения, внесенные aq
после первоначального разделения между aq
и master
), что и обычный подход выше, когда вы наконец объединяете все обратно master
. Так что я думаю, что его единственным реальным недостатком (помимо того, что он слишком сложный и нестандартный ...: - /) является то, что если вы свернете n последних изменений с помощью, git reset --hard HEAD~<n>
и это пройдет после слияния, то нижеприведенная версия будет свернута вниз. «неправильная» ветвь, которую вы должны исправить вручную (например, с помощью git reflog
& git reset --hard [sha]
).
[Итак, ранее я думал, что это:]
Есть проблема с:
git checkout aq
git merge master
потому что изменения, показанные в коммите слияния (например, если вы смотрите сейчас или позже в Github, Bitbucket или в вашем любимом локальном просмотрщике истории git), являются изменениями, внесенными в master, что вполне может быть не тем, что вам нужно.
С другой стороны
git checkout master
git merge aq
показывает изменения, сделанные в aq, что, вероятно , то, что вы хотите. (Или, по крайней мере, это часто то, что я хочу!) Но объединение, показывающее правильные изменения, находится на неправильной ветви!
Как справиться ?!
Полный процесс, заканчивающийся фиксацией слияния, показывающей изменения, внесенные в aq (согласно второму слиянию выше), но слиянием, влияющим на ветку aq, таков:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
Это: объединяет aq с мастером, быстро переходит вперед на то же самое слияние с aq, отменяет его на master и снова возвращает вас на aq!
Я чувствую, что что-то упустил - кажется, это то, что вы, очевидно, хотели бы, и что-то, что трудно сделать.
Кроме того, ребаз не эквивалентен. Он теряет метки времени и идентичность коммитов, сделанных на aq, что тоже не то, что я хочу.