2016-10-24 3 views
0

Я попытался решить проблему с использованием Method A. Я сделал лучший рабочий пример Method A (который я назову "Commit 5"). Я не был полностью доволен Method A. Поэтому я продолжил разработку программы, используя Method B. Сейчас он находится в "Commit 8". (Все в главной ветке)Как объединить части старого коммита с HEAD в git?

Теперь я решил придерживаться Method A, но многие другие части кода изменились с Commit 5. Я хочу вернуть весь код, связанный с Method B, до Method A, но не оставляйте все остальное без изменений. Эти различия охватывают несколько файлов.

Как бы я мог достичь этого в git? Есть ли какой-то рабочий процесс "manual partial revert-merge"?

+0

Ваши фиксаций должны быть друг другу отдельные атомные единицы работы, так что возвращаясь их просто. Похоже, у вас есть несколько рабочих элементов, запутанных в одной и той же фиксации. –

+0

Или он просто не знал о 'git revert' до сих пор. :) – AnoE

+0

Shoulds не решит эту проблему. И git не вернется. Единственный способ, который я могу решить, - это проверить файлы на новом рабочем дереве и вручную vimdiff части, которые я хочу в HEAD. – Meiji

ответ

0

ОК это, как я сделал это:

я получил список файлов, которые отличались между головкой и совершают 5 следующим образом:

git diff HEAD..e4647 --name-status > /tmp/filelist

Я тогда отредактирован, что в Vim, чтобы удалить любой из файлов, которые я не хотел возвращать, и преобразовал их в промежуточный список файлов, называемый «filestodiff». Затем я сделал и применил патч, используя этот список.

git diff HEAD..e4647 -- `cat /tmp/filestodiff` > /tmp/patch 
git apply /tmp/patch 

Был двоичный файл (который не может быть исправлен), поэтому я вручную проверил это:

git checkout e4647 the_binary_file 

что положить его достаточно близко. Я попробовал отредактировать файл исправления, чтобы удалить некоторые изменения отдельных строк, которые я не хотел, но это просто повредило патч, поэтому я сделал эти несколько изменений в строке вручную.

Наконец, я сделал, что любые новые файлы были добавлены мерзавец, он по-прежнему построен, то:

git commit -am 'hurray! its not borked anymore!' 
0

Run git rebase -i Commit5, то вы можете выбрать фиксаций использовать и редактировать совершает, как вам нравится.

Смежные вопросы