Объединить до определенного коммита

374

Я создал новую ветку с именем newbranchиз masterветви в git. Теперь я сделал некоторую работу и хочу слиться newbranchс master; тем не менее, я внес некоторые дополнительные изменения newbranchи хочу объединиться newbranchдо четвертого, от последнего, коммита master.

Я использовал, cherry-pickно он показывает сообщение, чтобы использовать правильные параметры:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Могу ли я использовать git mergeвместо этого?

git merge newbranch <commitid>
Дау
источник

Ответы:

595

Конечно, находясь в masterфилиале, все, что вам нужно сделать, это:

git merge <commit-id>

где commit-idхэш последнего коммита, newbranchкоторый вы хотите получить в своей masterветке.

Вы можете узнать больше о любой команде git, выполнив git help <command>. Это тот случай, это так git help merge. И документы говорят, что последний аргумент для mergeкоманды <commit>..., так что вы можете передать ссылку на любой коммит или даже несколько коммитов. Хотя я никогда не делал последнее сам.

KL-7
источник
30
не только один коммит, но и все коммиты, предшествующиеcommit-id
Dau
53
Да, это будет объединить все коммиты newbranchс того времени , его история расходилась от masterдо commit-idв masterотрасль. Вы можете думать git merge <commit-id>как о слиянии некоторой неназванной ветви, которая заканчивается commit-idв вашей текущей ветви.
KL-7
2
Могу ли я объединить две локальные ветви, кроме главной, используя идентификатор фиксации?
санскр
1
@skt, вы можете просто находиться в локальной ветке, с которой хотите слиться, перед использованием git merge. т.е. скажем, что вы хотите объединить коммит 18a6fac из ветви b2 в ветку b1, просто сделайтеgit checkout b1; git merge 18a6fac
XioRcaL
1
Кажется, это НЕ работает, если я нахожусь на ветке, в которую я хочу слиться, и есть какая-то другая ветка с коммитами AB и C, и я сливаюсь в C, он получает только изменения, сделанные в C, а не A и B.
ggb667
12

Чтобы сохранить ветвление в чистоте, вы можете сделать это:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

Таким образом, newbranch закончится там, где он был объединен с master, и вы продолжите работать над newbranch2.

tkruse
источник
1

Запустите приведенную ниже команду в папку текущей ветки, чтобы объединить эту <commit-id>ветку с текущей веткой, --no-commitне делайте новую фиксацию автоматически

git merge --no-commit <commit-id>

git merge --continue можно запустить только после того, как слияние привело к конфликтам.

git merge --abort Прервите текущий процесс разрешения конфликтов и попытайтесь восстановить состояние перед объединением.

ElasticCode
источник