Как восстановить слияние после проверки? - PullRequest
0 голосов
/ 20 декабря 2018

Я начал с master и попытался объединить серию коммитов из branch: git merge branch.Я разрешил полдюжины конфликтов между этой веткой и мастером.Тогда я был готов к фиксации, но решил для здравого смысла, я хотел зафиксировать коммит слияния в новую ветку, experimental, поэтому я запустил git checkout -b experimental, а затем зафиксировал решенные коммиты.Когда я сделал это, к моему ужасу, я обнаружил, что у нового коммита на experimental был только один родитель (мастер), фактически коммит сквоша.

Есть ли способ сделать слияние заново без необходимостиповторно конфликты слияния?То есть я хотел бы создать коммит в новой ветке, чьи родители master и branch и чьи изменения разрешены до experimental.Возможно ли это?

Кроме того, как я мог избежать потери родителей в моей первоначальной ситуации, когда я решил, что хочу совершить слияние с другой ветвью?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я понял это.

Сначала я создаю новый коммит слияния, у которого есть происхождение, которое я ищу.Я использую --strategy ours, чтобы сэкономить время при разрешении слияний:

git checkout -b remerge master
git merge branch -s ours

Затем я проверяю экспериментальную ветку и использую reset --soft:

git checkout experimental
git reset --soft remerge
git commit -a --amend

И затем очищаю:

git branch -D remerge

Во-первых, чтобы избежать этого, единственное, о чем я могу думать, это то, что я должен был выполнить слияние в исходной ветви (master), затем создать ветвь, а затем сбросить master.

0 голосов
/ 20 декабря 2018

Если у вас есть все необходимые изменения в experimental, вы можете сделать новый коммит, используя git commit-tree :

  • используйте git cat-file commit experimental для получения деревахэш (т.е. содержимое, которое вы хотите в коммите слияния)
  • сделать коммит слияния вручную: git commit-tree -p master -p branch ${tree_hash} -m 'commit msg'

Это напечатает хеш нового коммита, который вы можете затем слитьв мастер и исправить сообщение коммита, используя git commit --amend.

...