Git: Comment faire des allers et retours entre commits
J'ai une question de newbie sur Git:
J'ai besoin d'avancer et reculer dans l'historique de la branche.
Cela signifie que, j'ai besoin de récupérer tous les fichiers de l'état où ils étaient, dans certains vieux de révision, et puis j'ai besoin de revenir à l'état le plus récent dans le référentiel. Je n'ai pas besoin de commettre.
Avec SVN, il serait
svn up -r800
pour obtenir la révision de 800, et
svn up
pour être synchronisé avec le référentiel.
Je sais que le hachage de l'engager je veux revenir, alors j'ai essayé
git reset <hash>
qui semble m'y rendre. Mais ensuite, j'ai essayé
git pull
mais qui se plaint de conflits.
Alors, quelle est la bonne façon de se déplacer à travers l'histoire de la branche?
Je suis en train de penser en termes de SVN, afin de ne pas hezitate pour me pointer à quelques belles tutoriel. Notez que j'ai déjà vérifié http://git.or.cz/course/svn.html et http://www.youtube.com/watch?v=8dhZ9BXQgc4 .
Merci, Daniel.
- Note: j'ai utilisé pour éviter
git pull
tout à fait. Au lieu de cela, j'utilisegit fetch --all
aliasgu
en bash, et ontgitk
ouvert tout le temps, affichage de toutes les branches - voir Affichage -> edit> cochez les 4 cases à cocher. Puis-je déplacer à l'aide degit reset
ougist stash
+git co
, dépend de ce dont j'ai besoin.
Vous devez vous connecter pour publier un commentaire.
Bien, je suis un ancien utilisateur svn trop, et maintenant l'utilisation de git pour tous mes projets.
Lors de l'utilisation de git, vous devez changer la façon de penser de l'architecture client-serveur qui est utilisé dans le svn. Dans svn, chaque changement a besoin d'une connexion avec le serveur. L'utilisation de git, votre pension est dans le répertoire de travail. Vous n'avez pas besoin d'une connexion pour chaque pensions de l'action.
Utiliser uniquement
git push
etgit pull
à se synchroniser avec repo. Pensez-y comme à l'aide de rsync ou de toute solution de sauvegarde, de faire deux place ont exactement le même contenu. Comme vous vous connectez externe de sauvegarde de disque dur, puis de rendre le contenu en lui même avec le contenu de votre main. C'est l'utilisation degit pull
etgit push
.Si vous voulez juste faire l'aller-retour de l'histoire, de faire à l'aide de
git checkout
. Voir la révision id à l'aide degit history
. Si vous êtes sous Linux, utilisezgitk
de voir la révision de l'arbre. Dans Windows, tortoise git pouvez afficher à l'aide de graphe de révision.Pour revenir à la dernière révision, l'utilisation
git checkout master
. Avant de procéder à toute commande, toujours faire fairegit status
. Cette commande va afficher tout ce que vous devez savoir sur les pensions de condition, ainsi que les mesures que vous devez faire pour bien le faire. Avant de fairegit pull
etgit push
, il est préférable de s'assurer quegit status
résultat est contenir du texteworking directory clean
.Si vous avez besoin de rétablir un fichier à la révision précédente, vous pouvez le faire avec
git merge
. Avant de le faire pour un fichier, de le tester d'abord avecgit diff
. Ex:git diff rev1:rev2 filename
. Il permet d'imprimer différents entre deux révisions. Changement dans rev1 seront remplacés par les changements dans la rev2. De le faire revenir, rev2 sera le plus vieux que rev1. Après vous satisfaire avec les diff résultat, le faire avecgit merge
, il suffit de remplacerdiff
avecmerge
, tous les autres paramètres restent les mêmes.J'espère que cela vous aide. La clé principale est de voir que votre travail dir est votre repo. Cette compréhension vous aidera à utiliser git à sa pleine capacité. Bonne chance.
Vous pouvez utiliser
git checkout
à la caisse tout s'engager et à utiliser avec un nom de branche de revenir à une branche nommée.git checkout
avec un commit id et non pas un nom de branche permet de vous déplacer hors d'un nom de branche et sur ce qui est connu comme une détaché de la tête.Si vous utilisez
git reset
puis il se déplacera à votre succursale elle-même de retour à l'ancien état, le nombre d'orphelins les plus récentes s'engage qui n'est probablement pas ce que vous voulez.checkout
vraiment fait? Faut-il changer les fichiers de l'état de la validation donnée, par reversly appliquer les patchs de la s'engage entre l'état actuel et la validation donnée de l'état?git reset
etgit reset origin
. Je ne vais pas faire toute la commet, de sorte qu'il n'est pas question que je lâche la récente s'engage autant que c'est facilement récupérable (ce qui signifie, en une seule commande).Autres réponses sont instructifs, mais je crois que c'est plus proche de ce que l'OP veut:
Ajouter ces deux fonctions à votre ~/.bashrc:
Utilisation:
Note: Ces commandes permettent de toujours entrer détaché de la TÊTE état. Si vous
git_prev
puisgit_next
à partir d'un extrait de la succursale, vous allez vous retrouver à la dernière révision, mais vous serez dans décollement de la TÊTE de l'état. Negit checkout BRANCH_NAME
le retour à la normale.usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...]
À la caisse d'une autre version d'un fichier, utilisez
Où rev peut être l'ID d'un commit, le nom de la branche, le nom d'une balise, ou d'un parent, version.
Utilisation
git log
,gitk
à regarder examiner les versions de voir la version du fichier que vous voulez.Pour faire cette version du fichier permanente, vous devez envoyer le fichier:
git add filename; git commit filename
Je ne recommanderais pas
git pull
pour examiner les versions, car il le fait d'une fusion -- ce qui pourrait modifier votre état actuel.Vous n'avez pas besoin d'utiliser
git reset
dans ce cas, à moins que vousgit add
un fichier que vous décidez de ne pas s'engager.Essayer
git reflog
, cette liste s'engage et extractions que vous avez fait pour basculer entre les commits, même les commits que vous avez perdu lors de la finalisation de la commande pour une livraison antérieure.Ensuite, vous pouvez essayer
git checkout <hash of a commit>
pour changer de commettre.Espérons que cette aide!