2013-07-10 6 views
0

Имеются некоторые изменения, внесенные мной в файл в commit A, после чего я отменил изменения по ошибке и продолжил внесение изменений в коммиты B и C.Git: Как вы объедините файл с самой версией из предыдущего коммита?

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

Скажем, моя ветвь теперь в С.

Я не хочу, чтобы

$ git checkout --patch 

, потому что я хочу, чтобы файл содержит изменения, которые я сделал в B и C и делать проверку на файл от commit A перепишет файл как в индексе, так и в рабочем дереве.

Я не могу сделать вишневый выбор, потому что commit A является фиксацией слияния (есть два участника в репозитории, и я удалил изменения, которые мой наставник сделал по ошибке в последующих коммитах после того, как я их объединил), и я мог бы закончите с беспорядком, если я указал либо родителя.

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

ответ

5

create a patch и попытка apply the patch. Если у вас возникли проблемы с такими конфликтами, как

error: patch failed: <file_name>:1 
error: <file_name>: patch does not apply 

Для слияния потребуется ручное вмешательство.

Вот пример:

$ git format-patch -n <sha_from_commit_you_want_to_merge> > patch_file.patch 
$ git apply patch_file.patch 

Вполне возможно эта стратегия будет по-прежнему проблематично из-за характера коммиттерских A. Вы не можете отделить составные компоненты слияния совершить без доступа к ветви, откуда личности были сделаны коммиты. Ваш филиал/репо просто видит, что как один совершить.

Конечно, если у вас есть , у есть доступ к исходной ветке, вы можете просто создать файл исправления оттуда, even if they are in different repositories.

+0

Надеюсь, что есть более естественный путь! – rivendell

+0

Я не знаю, насколько проще он может получить, чем две команды для слияния кода (да, одна команда будет проще :)). Если есть проблемы с непримиримым слиянием, я не знаю системы контроля версий, которая может помочь вам лучше, чем Git. Если у вас есть проблемы с этим подходом, отредактируйте свою запись или добавьте комментарий, и мы увидим, что мы можем сделать. – eebbesen

+0

Прошу прощения за небрежный ответ! Никаких оправданий, но я был занят исправлением ошибок в коде и нашел эту проблему git в качестве вмешательства! Ну, я на самом деле думал, что 'git-merge-file' будет делать что-то похожее на решение моей проблемы здесь, но оказывается, что это объединение двух файлов, которые основываются на том же файле! Ваш метод работает отлично! Большое спасибо! – rivendell