Comment valider les modifications dans une nouvelle branche

151

Je viens de modifier une succursale. Comment puis-je valider les modifications dans l'autre branche?

J'essaye d'utiliser:

git checkout "the commmit to the changed branch" -b "the other branch"

Cependant, je ne pense pas que ce soit la bonne chose à faire, car dans ce cas je crée une nouvelle branche au lieu de valider les modifications dans "l'autre branche".

Dois-je utiliser la commande suivante à la place?

git merge "the other branch"
user1988385
la source
Juste un commit ou plusieurs?
Carl Norum

Réponses:

269

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Commencez par vérifier votre nouvelle succursale. Ajoutez ensuite tous les fichiers que vous souhaitez valider pour la mise en scène. Enfin, validez tous les fichiers que vous venez d'ajouter. Vous voudrez peut-être faire un git push origin your-new-branchsuivi pour que vos modifications s'affichent sur la télécommande.

John Brodie
la source
1
depuis que j'ai obtenu la nouvelle branche de git checkout v3.0 (la branche avant d'apporter des modifications) new-branch, ai-je toujours besoin d'utiliser "git add <files>"?
user1988385
Vous pouvez faire un git statuspour voir ce qui est actuellement mis en scène et ce qui ne l'est pas.
John Brodie
5
Pourquoi les deux git addet git commit -a?
Carl Norum
11
Ce n'est pas la git checkout -b your-new-branchplace de git checkout your-new-branch?
Schrodinger's'Cat
1
Que diriez-vous si j'ai déjà suivi un fichier et que je veux passer à une nouvelle branche, ajouter ces fichiers à la branche nouvellement créée?
ass-king quelques questions le
58

Si vous n'avez pas engagé de modifications

Si vos modifications sont compatibles avec l'autre branche

C'est le cas de la question car l'OP veut s'engager dans une nouvelle branche et s'applique également si vos modifications sont compatibles avec la branche cible sans déclencher un écrasement.

Comme dans la réponse acceptée par John Brodie, vous pouvez simplement vérifier la nouvelle branche et engager le travail:

git checkout -b branch_name
git add <files>
git commit -m "message"

Si vos modifications sont incompatibles avec l'autre branche

Si vous obtenez l'erreur:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Ensuite, vous pouvez cacher votre travail, créer une nouvelle branche, puis afficher vos modifications de cachette et résoudre les conflits:

git stash
git checkout -b branch_name
git stash pop

Ce sera comme si vous aviez effectué ces modifications après avoir créé la nouvelle branche. Ensuite, vous pouvez vous engager comme d'habitude:

git add <files>
git commit -m "message"

Si vous avez commis des modifications

Si vous souhaitez conserver les commits dans la branche d'origine

Voir la réponse de Carl Norum avec la sélection de cerises, qui est le bon outil dans ce cas:

git checkout <target name>
git cherry-pick <original branch>

Si vous ne souhaitez pas conserver les commits dans la branche d'origine

Voir la réponse de joeytwiddle sur ce doublon potentiel . Suivez l'une des étapes ci-dessus, le cas échéant, puis restaurez la branche d'origine:

git branch -f <original branch> <earlier commit id>

Si vous avez poussé vos modifications vers une télécommande partagée comme GitHub, vous ne devez pas tenter cette restauration à moins que vous ne sachiez ce que vous faites.

miguelmorin
la source
3
Chacun devrait essayer ce code. Parce que la plupart des gens qui cherchent la réponse, ils ont déjà quelques changements dans votre code existant.
Sushin Pv
2
Pourquoi avez-vous ajouté le stash et le stash pop? Lorsque vous retirez une nouvelle branche, vos modifications pourront être ajoutées et validées, pas besoin de les cacher.
Tristan
@Tristan Vous avez raison dans le cas où les changements sont compatibles et les fichiers ne sont pas écrasés. Sinon, je reçois error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Voulez-vous rédiger une nouvelle réponse ou modifier ma réponse? Sinon, je peux le modifier moi-même.
miguelmorin
Ok, tu as tout à fait raison. Je pense que vous devriez cependant compléter votre réponse, pour montrer ce qu'elle apporte en plus de la réponse acceptée.
Tristan
@Tristan j'ai fait ça. Le PO demandait une nouvelle succursale, auquel cas la réponse acceptée est la bonne. Je garde la mienne car d'autres personnes ont trouvé ma réponse utile. C'est devenu une longue réponse et je suis heureux de modifier avec vos commentaires.
miguelmorin le
24

Si je comprends bien, vous vous êtes engagé changed_branchet vous souhaitez copier cet engagement other_branch? Facile:

git checkout other_branch
git cherry-pick changed_branch
Carl Norum
la source
5
C'est la bonne réponse à ce qu'il essaie d'accomplir.
Sean