2015-08-12 1 views
1

J'ai effectué quelques commit git (commit 1, commit 2 ... commit 5) dans mon projet. Je devais corriger un bug, donc je revins à engager 2 en utilisant la commande ci-dessous -Fusionner un ancien commit git en haut de la branche actuelle

git checkout <commit_id> . 

J'ai fait quelques changements de code et validé les modifications. Maintenant, je veux fusionner ces changements et revenir à la dernière version du code (qui était dans le commit 5). Que devrais-je faire?

Merci d'avance!

+0

Avez-vous appuyé sur la télécommande avant de revenir en arrière? – razvanz

+0

Non, je n'ai pas .. – user591410

Répondre

2

Si vous avez déjà appuyé sur la touche, il vous suffit de valider votre correctif en haut (c'est-à-dire après la validation 5).

Si vous ne l'avez pas, et vous voulez fixer engager 2, vous pouvez:

  • fondez votre solution, lancez: rebase -i HEAD~5 puis échanger votre dernière commettras être juste après commit2, et marquer comme "réparer".

ou:

  • course: rebase -i HEAD~4, marquer alors commit2 pour modifier, mettre votre solution, engager et rebase --continue
+0

Merci, je vais devoir suivre l'option 1 car j'ai déjà commis ma correction.(validez votre correction, exécutez: rebase -i HEAD ~ 5 puis échangez votre dernier commit pour être juste après commit2, et marquez-le comme "fixup".) Je vais le rebaser, mais comment échanger le dernier commit à être après commit 2 ? – user591410

+0

lorsque vous exécutez 'rebase -i HEAD ~ 5' il ouvre un éditeur (celui configuré dans vos paramètres git) avec vos 5 derniers commits. couper et coller le dernier commit à la ligne pertinente – avim

0

Vous êtes sur une branche détachée. Faites un journal git pour obtenir votre identifiant de validation actuel, retournez à votre branche de travail (git checkout yourBranchName), puis git fusionnez YourCommitId, qui fusionnera ces changements au dessus de votre branche (ou vous pourriez essayer de rebaser puis sur votre courant branche).

+0

Je l'ai fait sur la branche master. Je n'ai pas de branche séparée – user591410

+0

Quand vous avez fait un "git checkout " vous êtes mis sur ce qu'on appelle une branche détachée par git puisque vous êtes sur un commit sans nom de branche pour suivre ce travail. – DavidN

1

Si vous l'avez fait tout sur votre dépôt local, avec git checkout <commit_id> vous devez être dans un état détaché. Si vous exécutez git branch il devrait montrer que vous êtes sur (HEAD detached at <commit_id>).

Pour être sûr d'abord la caisse vos commits sur une nouvelle branche:

git checkout -b <bug_fix> 

Ensuite, allez sur la branche que vous aviez 5 commits (en supposant maître) et rebase le correctif:

git checkout master 
git rebase <bug_fix> 

EDIT: Si vous avez quitté l'état détaché après avoir validé les correctifs en vérifiant une autre branche, vous devez trouver votre commit_id avec git reflog puis les rebaser sur la branche souhaitée: git rebase <commit_id>. Vous pouvez également fusionner, mais cela va ajouter le fix_commit au-dessus de commit5. Rebasage va générer une meilleure histoire ..., commit2, fix_commit, commit3, ..., commit5.

+0

J'ai fait git checkout . – user591410

+0

Si vous exécutez 'git branch' quelle est la sortie? – razvanz

+0

Si je fais une branche git, je ne vois pas que "HEAD est détaché à commit_id" – user591410