2015-02-03 4 views
1

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

Я об этом совершенно неправильно ... или есть что-то, что мне не хватает?

+2

Объединить и вернуть разговор о * совершает *, постановка применяется к * индексу *. Что именно вы имеете в виду где? Непонятно, что вы делаете. – poke

+0

Я попытался немного разъяснить, но мне уже нравится ответ № 1 Манзура. –

ответ

2

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

1) Получить дерево sha1 ветви фиксации:

git cat-file -p branchA 

2) Выполните проверку изменений под этим деревом для file2 и file3:

git reset <sha1> -- file2 file3 

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

git commit -m 'Merge of branchA' 

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

+0

Manzur- спасибо, это прекрасно. Мне все равно нужно проверить наличие конфликтов в этих файлах, но я могу это сделать при слиянии с ветвью выпуска. По крайней мере, это упрощает слияние только с файлами, которые меня волнуют. –

+0

Экспериментируя с этим сейчас ... кажется, git checkout работает лучше, чем сброс git на вашем шаге 2 manzur, потому что тогда у меня нет исходных версий, отображающихся как неустановленные изменения. Также я могу использовать имя ветки вместо . Имеют смысл? –

+0

Конечно, вы можете использовать sha1 вместо имени ветки. Они взаимозаменяемы практически для всех случаев (посмотрите на .git/refs/heads/, который содержит sha1). – manzur

0

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

git reset HEAD <file_1> <file_2> ... <file_n> 
Смежные вопросы