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>