Могу ли я в интерактивном режиме выбирать фрагменты из другого git commit? - PullRequest
24 голосов
/ 03 мая 2011

Я ищу точно такое же поведение, как и

git add -i -p

Но вместо того, чтобы составлять коммит из моего рабочего каталога, я бы хотел составить свой рабочий каталог из (частей) коммита. Как я могу это сделать?

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

Использование cherry-pick -n на самом деле не является удовлетворительным, поскольку это оставляет мне грязную работу по удалению всего ненужного кода. Мне бы очень хотелось выбрать выбранные изменения, которые я хочу проверить.

Ответы [ 3 ]

31 голосов
/ 03 мая 2011

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

Раньше задание могло быть грязным, но с появлением git checkout --patch теперь вы можете выборочно отменить изменения, аналогичные git add -p для добавления.

10 голосов
/ 03 мая 2011

Вы можете использовать git reset --mixed HEAD^1, чтобы восстановить индекс, а затем выбрать нужные блоки с помощью git add -i.

. reset откатит индекс до предыдущего коммита (по сути, без фиксации любогобыла ГОЛОВА), но это не коснется рабочего дерева.Теперь вы можете ставить нужные куски, фиксировать их и выбрасывать остальные с помощью git reset --hard HEAD.

0 голосов
/ 16 февраля 2018

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

Выполните следующие действия:

git checkout source-branch
git checkout -b cherry-pick-branch # Gives you a new branch based on source-branch
git reset --mixed master

Это оставит вас с веткой, где все изменения находятся в файловой системе, но ничего не было зафиксировано / поставлено. Затем используйте git add -p, чтобы выборочно добавить, какие части вы хотите поставить, а затем зафиксировать и нажать как обычно.

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