2015-03-26 2 views
0

В начале недели я разветвил свою ветку развития, чтобы я мог работать на демонстрации выставки. Попутно мы обнаружили некоторые проблемы, и я работал над некоторыми вещами, которые должны проникнуть в отрасль развития (и, в конечном счете, основной выпуск).Селективное слияние кучи изменений

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

Я новичок в Git, поэтому кто-нибудь может объяснить понятия/термины вокруг того, что мне нужно сделать, пожалуйста.

ответ

1

Если вы хотите применить всю фиксацию в новой отрасли, вы можете использовать cherry-pick

git cherry-pick <commit-sha> 

Вы можете использовать git checkout --patch <commit-sha> выбрать отдельные ломти от фиксации. Это обеспечит вам интерактивную оболочку, где вы можете выполнить несколько задач для каждого ломтя ..

Apply this hunk to index and worktree [y,n,q,a,d,/,s,e,?]? ? 
y - apply this hunk to index and worktree 
n - do not apply this hunk to index and worktree 
q - quit; do not apply this hunk nor any of the remaining ones 
a - apply this hunk and all later hunks in the file 
d - do not apply this hunk nor any of the later hunks in the file 
g - select a hunk to go to 
/- search for a hunk matching the given regex 
j - leave this hunk undecided, see next undecided hunk 
J - leave this hunk undecided, see next hunk 
k - leave this hunk undecided, see previous undecided hunk 
K - leave this hunk undecided, see previous hunk 
s - split the current hunk into smaller hunks 
e - manually edit the current hunk 
? - print help 

Вы можете выборочно выбрать ломти из отдельных файлов тоже.

git checkout --patch <commit-sha> -- <file-name> 
+0

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

2

check out git cherry-pick, который позволяет вам включать фиксации из одной ветки в другую.

Если вы хотите использовать только части коммита, вы можете сделать это, зафиксировав фиксацию после того, как она вибрирует. Я обычно использую git gui's Изменить последнее совершение Функциональность для фиксации сообщений фиксации и совершенных кусков.

$ git cherry-pick workbranch~5 
$ git gui 
// fix what needs fixing 
$ git cherry-pick workbranch~4 
// we leave out workbranch~3 entirely 
$ git cherry-pick workbranch~2 
// ... 

с cherry-picking вы также можете изменить порядок фиксаций ...

в любом случае, вы должны сделать это вашу практику, чтобы сделать небольшие атомные фиксации (совершают часто!); таким образом, вы минимизируете необходимость корректировки коммитов после этого.

+0

Прохладный, а также указать куски внутри фиксации? – conor

+1

обновил ответ –

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