Я сделал то же самое сегодня и принял другой подход (после проб и ошибок), чтобы вернуться в состояние, предшествующее тишине, чтобы я мог продолжить разрешение конфликтов и завершить слияние.
Во-первых, после того, как вы потеряли частичное слияние в ветке назначения, я захватил список файлов с оставшимися конфликтами (текстовый файл или вкладка редактора). Это всего лишь список неустановленных файлов после неустановления, так как файлы с конфликтами, которые были разрешены, были бы поставлены перед тем, как они будут скреплены.
$ git status
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: myproject/src/main/java/com/acme/package3/Class3.java
# modified: myproject/src/main/java/com/acme/package3/Class4.java
#
Далее, я создал патч и сбросить ветку обратно в состояние до слияния:
$ git diff HEAD > ~/merge-with-resolved-conflicts.patch
$ git reset --hard HEAD
Затем я создал временную ветвь (полученный из ветви слияния назначения), и применяется патч:
$ git checkout -b my-temp-branch
$ git apply ~/merge-with-resolved-conflicts.patch
$ git commit -a -m "Merge with resolved conflicts"
Так ГОЛОВА моей-тЕМП-ветвь теперь содержит все, что было слито, в том числе файлов с конфликтами решенных и файлами с оставшимися конфликтами.
Затем я перешел обратно к исходной ветви, снова объединились, и посмотрел на статус мерзавца
$ git checkout my-branch
$ git merge other-branch
$ git status
Статус показывает полный список файлов с конфликтами:
# Unmerged paths:
# (use "git add <file>..." to mark resolution)
#
# both modified: myproject/src/main/java/com/acme/package1/Class1.java
# both modified: myproject/src/main/java/com/acme/package2/Class2.java
# both modified: myproject/src/main/java/com/acme/package3/Class3.java
# both modified: myproject/src/main/java/com/acme/package3/Class4.java
#
Теперь мне нужно сравните эти два списка файлов. Любые файлы во втором списке, но не первый, уже были разрешены (в этом примере Class1.java и Class2.java). Таким образом, для каждого из этих файлов, я вытащил в версии с конфликтами решенных из временного отделения (например, вишни выбор, но для отдельных файлов, а не целой фиксации):
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package1/Class1.java
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package2/Class2.java
Сделав это, я вернулся до состояния до тайника, так что я мог бы возобновить разрешение оставшихся конфликтов и совершить слияние.
Вы действительно что-то значимое? (Вам действительно нужно восстановить спрятанные изменения?) Можете ли вы просто сбросить попытку слияния и сделать это снова? – Cascabel
Да и нет, соответственно. Изменения состоят из более чем одного дня разрешения конфликтов слияния. – bukzor
@ bukzor: Если вам нужно больше одного дня для разрешения конфликтов слиянием, возможно, пришло время пересмотреть свои политики в отношении обработки ветвей и распределения работы (или частоты слияния). Такие длительные разрешения слияния после этого являются хорошим источником труднодоступных ошибок из-за количества изменений, сделанных в одном коммите. – Grizzly