2013-04-10 3 views
1

Я недавно столкнулся с проблемой, когда мне нужно выбрать несколько файлов, чтобы нажать на удаленные ветви с git. В моем конкретном случае использования существует только один файл, созданный/измененный в каждом отдельном коммите, и мне нужно программно нажать выбранные файлы (в их последнем состоянии). я сделал несколько исследований, и нашел 2 трюков, которые были близки к тому, что мне нужно сделать:Git: как нажимать изменения, сделанные только на определенные файлы?

  1. я могу использовать вишни выбрать, чтобы забрать некоторые коммиты в новую отрасль и слить эту ветвь в отдаленные мастер.
  2. Я могу использовать rebase -i для переупорядочения коммитов, я предполагаю, что могу изменить порядок, чтобы коммиты, относящиеся к этим выбранным файлам, были впереди, и я могу просто нажать последнее коммит в этом списке.

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

Для переустановки -i, из того, что я прочитал, мне нужно перейти к интерактивному редактору, где мне нужно вручную переупорядочить коммиты, и после этого я могу сделать начало генерации git, чтобы применить все до фиксации SHA (который переупорядочен). Не идеально, так как я должен выполнять ручную работу.

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

+0

Позвольте мне понять это - есть куча коммитов на одной ветке, которую нужно применить к другому, и в каждом коммите есть только один файл, который был изменен. Так что, может быть, commit 1 изменяет файл A, commit 2 изменяет файл B и т. Д.? –

+0

@AdamS Да, что вы сказали правильно, но может быть куча коммитов, изменяющих один и тот же файл. Предположим, что у меня есть модифицированный файл A, C2, C3, C4 и C2, все остальные измененные файлы B. Теперь я хочу нажать модификацию файла B (а именно C1, C3, C4). Я знаю, что rebate -i может это сделать, но, пожалуйста, обратитесь к моему основному сообщению (нет программного пути). –

ответ

1

Я думаю, что я нашел решение этой проблемы: cherry-pick --strategy=recursive -Xtheirs <commit-SHA>.

Задание опции «их» в стратегии рекурсивного слияния приводит к конфликтам, чтобы автоматически разрешить чистое одобрение версии, в которую встраивается. Это будет игнорировать все предупреждения о конфликте, но захватить все, что находится в фиксации.

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

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