Mesclar até um commit específico

374

Eu criei um novo ramo nomeado a newbranchpartir do masterramo no git. Agora eu ter feito algum trabalho e deseja mesclar newbrancha master; no entanto, fiz algumas alterações extras newbranche quero mesclar newbranchaté o quarto da última confirmação master.

Eu usei, cherry-pickmas mostra a mensagem para usar as opções corretas:

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

Posso usar o git mergepara fazer isso?

git merge newbranch <commitid>
Dau
fonte

Respostas:

594

Claro, estando no masterramo, tudo o que você precisa fazer é:

git merge <commit-id>

onde commit-idestá o hash do último commit newbranchque você deseja obter em sua masterramificação.

Você pode descobrir mais sobre qualquer comando git fazendo git help <command>. Nesse caso, é git help merge. E os médicos estão dizendo que o último argumento para mergecomando é <commit>..., portanto, você pode passar referência a qualquer confirmação ou mesmo a várias confirmações. No entanto, eu nunca fiz o último eu mesmo.

KL-7
fonte
30
não apenas um único commit, mas todos os commits anteriores acommit-id
Dau
53
Sim, ele vai mesclar todas as submissões a partir newbranchdesde o momento de sua história divergiram masteraté commit-idno masterramo. Você pode pensar git merge <commit-id>em mesclar uma ramificação sem nome que termina com commit-idsua ramificação atual.
KL-7
2
Posso mesclar entre dois ramos locais diferentes do mestre, usando o ID de confirmação?
skt 30/05
11
@skt, você pode apenas estar na ramificação local em que deseja mesclar antes de usar git merge. isto é dizer que você deseja mesclar cometer 18a6fac de b2 ramo em ramo b1 apenas fazergit checkout b1; git merge 18a6fac
XioRcaL
11
Isso NÃO parece funcionar. Se eu estiver em uma ramificação na qual quero mesclar e houver outra ramificação com confirmações AB e C, e mesclo em C, ela só recebe as alterações feitas em C, não em A e B.
ggb667 20/08/19
12

Para manter a ramificação limpa, você pode fazer o seguinte:

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

Dessa forma, o newbranch terminará onde foi mesclado no master e você continuará trabalhando no newbranch2.

tkruse
fonte
1

Execute o comando abaixo na pasta da filial atual para mesclar isso <commit-id>à ramificação atual, --no-commitnão faça uma nova confirmação automaticamente

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

git merge --continue só pode ser executado após a mesclagem resultar em conflitos.

git merge --abort Interrompa o processo atual de resolução de conflitos e tente reconstruir o estado de pré-mesclagem.

ElasticCode
fonte