Git: как вручную объединить файл из рабочего дерева с файлом из HEAD - PullRequest
1 голос
/ 02 ноября 2009

Я не знаю, имеет ли смысл то, что я пытаюсь сделать, но вот объяснение:

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

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

Есть ли способ сделать это?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 02 ноября 2009

Попробуйте что-то вроде:

  • git clone

  • git branch -a "temp"

  • git checkout temp

  • ... создавать новые файлы ...

  • git add.

  • git commit -m "commit text"

  • мастер проверки git

  • git merge temp

По сути, делайте свои вещи в другой ветке и просто объединяйте эту ветку с главной веткой.

4 голосов
/ 02 ноября 2009

Вы можете создать ветку наподобие «generate_files», к которой вы никогда не прикасаетесь, но когда вы генерируете свои файлы.

В вашей "основной" ветке вы можете объединить ветку "Генерируемые_файлы".

Каждый раз, когда вы генерируете новые файлы, вы должны зафиксировать их в ветке «generate_files», которая создаст новую дельту из предыдущей сгенерированной версии.

Если вы объединитесь после этой ветки в «master», то применится только дельта из предыдущей версии и сохранит вашу модификацию.

Может быть, вы можете использовать стратегию во время слияния, чтобы избежать конфликта.

1 голос
/ 02 ноября 2009

Один из способов сделать это - использовать опцию -m для "git checkout":

  1. Проверьте версию base (предка), например, если вы хотите выполнить трехстороннее объединение между текущей версией (HEAD), предыдущей версией (HEAD ^) и сгенерированным файлом ( в рабочем каталоге):

    git checkout HEAD^
    

    Не беспокойтесь о предупреждении об отсоединенной ГОЛОВКЕ.

  2. Создайте свои файлы

  3. Используйте -m параметр "git checkout" для объединения изменений из рабочей области:

    git checkout -m @{-1} # or "git checkout -m <branch>"
    

С git checkout manpage:

-m ::
- сливаться ::

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

Не проверено!


В качестве запасного варианта у вас всегда есть git merge-file команда низкого уровня (сантехника).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...