2009-05-12 6 views
4

J'utilise ce flux de travail:Reinh Git workflow

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

où il mentionne: « D'abord, et alors que dans la branche master (maître de la caisse git), tirer dans les plus récents changements: git pull origine master Cela ne devrait jamais créer un commit de fusion car nous ne travaillons jamais directement dans le master. "

Oups, je viens de le faire. J'ai accidentellement apporté quelques modifications à un couple de fichiers à mon maître (vs ma branche de sujet). J'ai alors réalisé mon erreur - supprimé ma branche de sujet. Maintenant, je veux me débarrasser de mes changements engagés (au maître), quelle est la bonne chose à faire? Je n'ai pas encore rebasé ou j'ai poussé mes changements à repo, donc tout est local.

Essentiellement, je veux retirer la dernière version du code maître et ne pas tenir compte de tout ce que j'ai fait à mon maître local (qui est vraiment un commit).

Répondre

11

Si vous voulez juste jeter, pendant que vous êtes sur la branche master:

git reset --hard HEAD^

Cette commande permet de réinitialiser le pointeur tête de votre maître à la précédente commettre. (Vous pouvez également dire « HEAD ~ 1 », ce qui signifie la même chose que HEAD ^.) De façon plus générale, vous pouvez également réinitialiser votre maître être le même que celui du serveur:

git reset --hard origin/master

Cela fonctionne quel que soit l'état de maître (c.-à-d. 5 commits avant l'origine, ou 30 commits derrière). L'option --hard dans ces commandes signifie que les fichiers de votre arbre de travail seront également réinitialisés avec les têtes de branches.

Conseils supplémentaires

Si vous étiez dans une situation similaire où vous vouliez réellement garder vos changements, vous pouvez toujours faire:

git fetch    # This grabs changes from the server without merging them 
git rebase origin

Cela va rejouer tout travail que vous avez en maître haut des derniers changements sur le serveur.

Une autre alternative serait de créer une branche de sujet pour votre travail sur le maître:

git checkout -b newfeature

Ensuite, vous pouvez revenir à maître (maître git checkout) et utiliser la première commande que j'ai donné pour revenir en arrière maître arrière un commit. Rappelez-vous que les branches ne sont vraiment que des noms pratiques pour les validations dans votre dépôt. Par exemple, master est juste une référence à la dernière validation sur cette branche. Vous pouvez déplacer ces références à volonté, et comme vous êtes plus avancé avec git, vous vous retrouverez assez souvent.

Je recommande également que vous prenez l'habitude de courir chaque fois que gitk --all que vous jouez avec des branches, afin que vous puissiez voir visuellement exactement ce que vous faites. Quand j'étais nouveau à git, j'ai couru cette commande tout le temps. Je fais toujours ...

+0

génial! merci pour la bonne réponse. J'aime ce site. – jim

1

Tous vos commits perdus par la suppression de branche sont là encore en git.

Vous pouvez accéder à tous en parcourant le reflog.Jetez un oeil à

man git-reflog