Fusionner jusqu'à un commit spécifique

374

J'ai créé une nouvelle branche nommée à newbranchpartir de la masterbranche dans git. Maintenant, j'ai fait du travail et je veux fusionner newbranchavec master; cependant, j'ai apporté quelques modifications supplémentaires à newbranchet je veux fusionner newbranchjusqu'au quatrième avant-dernier commit master.

J'ai utilisé cherry-pickmais il montre le message pour utiliser les bonnes options:

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

Puis-je utiliser git mergepour le faire à la place?

git merge newbranch <commitid>
Dau
la source

Réponses:

594

Bien sûr, être en mastersuccursale, tout ce que vous devez faire est de:

git merge <commit-id>

commit-idest le hachage du dernier commit newbranchque vous souhaitez obtenir dans votre masterbranche.

Vous pouvez en savoir plus sur n'importe quelle commande git en faisant git help <command>. Dans ce cas, c'est git help merge. Et les documents disent que le dernier argument de la mergecommande est <commit>..., donc vous pouvez passer une référence à n'importe quelle validation ou même plusieurs validations. Cependant, je n'ai jamais fait ce dernier moi-même.

KL-7
la source
30
non seulement un seul commit, mais tous les commits précédentscommit-id
Dau
53
Oui, il va fusionner tous les commits de newbranchdepuis l'époque de son histoire divergé de masterjusqu'à commit-iddans la masterbranche. Vous pouvez penser git merge <commit-id>à fusionner une branche sans nom qui se termine par commit-iddans votre branche actuelle.
KL-7
2
Puis-je fusionner entre deux branches locales autres que master, à l'aide de l'ID de validation?
skt
1
@skt, vous pouvez simplement être sur la branche locale dans laquelle vous souhaitez fusionner avant de l'utiliser git merge. c'est-à-dire que vous voulez fusionner le commit 18a6fac de la branche b2 dans la branche b1, faites-legit checkout b1; git merge 18a6fac
XioRcaL
1
Cela ne semble PAS fonctionner, si je suis sur une branche dans laquelle je veux fusionner et qu'il y a une autre branche avec les validations AB et C, et je fusionne en C, cela n'obtient que les modifications apportées en C, pas A et B.
ggb667
12

Pour garder la ramification propre, vous pouvez procéder comme suit:

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

De cette façon, newbranch se terminera là où il a été fusionné en master, et vous continuez à travailler sur newbranch2.

tkruse
la source
1

Exécutez la commande ci-dessous dans le dossier de la branche actuelle pour fusionner de celle-ci <commit-id>à la branche actuelle, --no-commitne faites pas de nouveau commit automatiquement

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

git merge --continue ne peut être exécuté qu'après que la fusion a entraîné des conflits.

git merge --abort Abandonnez le processus de résolution de conflit actuel et essayez de reconstruire l'état de pré-fusion.

ElasticCode
la source