Git unstage без потери слияния?

У меня есть ветка с сотнями новых и разных файлов, и я просто хочу объединить дюжину или около того из них в мою ветку релизов. Я попытался запустить обычное git-слияние без коммита, и это автоматически поставило сотни ненужных мне файлов (в дополнение к обнаружению десятков конфликтов, требующих ручного слияния.) Затем я попытался сделать git-revert, чтобы удалить все автоматически объединенные файлы. файлы и просто добавьте те, которые я хочу, обратно в индекс, но это также прервало слияние и оставило все маркеры конфликта в файлах. Я думал, что смогу просто запустить mergetool, но теперь он не распознает маркеры конфликта...

Я иду по этому пути совершенно неправильно... или я что-то упускаю?

2 ответа

Это так же просто, как использовать git reset, Я использовал git stash pop и был конфликт слияния, и он также поставил некоторые файлы с изменениями мной и слияния. Я разрешил конфликт и удалил все файлы с помощью следующей команды:

git reset HEAD <file_1> <file_2> ... <file_n>

Вопрос немного двусмысленный. Я постараюсь перефразировать это и ответить соответственно. Скажем, вы хотите объединить только файлы (file2, file3) из ветви A:

1) Получить дерево sha1 ветки commit:

git cat-file -p branchA

2) Извлечь изменения под этим деревом для file2 и file3:

git reset <sha1> -- file2 file3

3) Зафиксируйте эти изменения:

git commit -m 'Merge of branchA'

Если вы уже отправили сообщение с подготовкой, сделайте (если все необходимые изменения были внесены заранее): git reset --hard

Чтобы отменить точную фиксацию слияния и внести все изменения как поэтапно, можно использовать команду ниже.

git revert -m 1 <commit-hash>
Другие вопросы по тегам