J'ai une nouvelle question à propos de Git:
J'ai besoin d'aller et venir dans l'histoire d'une branche. Cela signifie que je dois remettre tous les fichiers dans l'état dans lequel ils se trouvaient dans une ancienne révision, puis je dois revenir au dernier état dans le référentiel. Je n'ai pas besoin de m'engager.
Avec SVN, ce serait
svn up -r800
pour arriver à la révision 800, et
svn up
pour se synchroniser avec le référentiel.
Je connais le hachage du commit sur lequel je veux revenir, alors j'ai essayé
git reset <hash>
qui semble m'y amener. Mais j'ai essayé
git pull
mais cela se plaint de conflits.
Alors, quelle est la bonne façon de parcourir l'histoire de la succursale?
Je pense en termes de SVN, alors n'hésitez pas à me diriger vers un joli 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, Ondra.
Eh bien, je suis aussi un ancien utilisateur de svn, et j'utilise maintenant git pour tous mes projets.
Lorsque vous utilisez git, vous devez changer la façon de penser de l'architecture client-serveur utilisée dans svn. Dans svn, chaque changement nécessite une connexion avec le serveur. Avec git, votre dépôt est dans le répertoire de travail. Vous n'avez pas besoin d'une connexion pour chaque action de mise en pension.
Seule utilisation git Push
et git pull
pour synchroniser avec le dépôt. Pensez-y comme si vous utilisiez rsync ou toute autre solution de sauvegarde, pour que deux endroits aient exactement le même contenu. Tout comme vous connectez un disque dur de sauvegarde externe, faites-en le même contenu avec le contenu de votre principal. C'est l'utilisation de git pull
et git Push
.
Si vous souhaitez simplement parcourir l’historique, faites-le en utilisant git checkout
. Voir l'id de révision en utilisant git history
. Si vous utilisez Linux, utilisez gitk
pour voir l'arborescence de révision. Sous Windows, tortoise git peut l'afficher à l'aide du graphique de révision.
Pour revenir à la dernière révision, utilisez git checkout master
. Avant d'exécuter une commande, assurez-vous toujours de faire git status
. Cette commande affichera tout ce que vous devez savoir sur l'état actuel du référentiel et l'action que vous devez faire pour y remédier. Avant de faire git pull
et git Push
, il vaut mieux s'assurer que git status
le résultat contient du texte working directory clean
.
Si vous devez rétablir un fichier dans sa version précédente, vous pouvez le faire avec git merge
. Avant de le faire dans un fichier, testez-le d'abord avec git diff
. Ex: git diff rev1:rev2 filename
. Il imprimera tout différent entre deux révisions. Le changement dans rev1 sera remplacé par les changements dans rev2. Donc, pour revenir, rev2 sera plus ancien que rev1. Après avoir satisfait avec le résultat diff, faites-le avec git merge
, remplacez simplement diff
par merge
, tous les autres paramètres restent les mêmes.
J'espère que ceci vous aide. La clé principale est de voir que votre répertoire de travail est votre repo. Comprendre cela vous aidera à utiliser git à sa pleine capacité. Bonne chance.
Vous pouvez utiliser git checkout
pour extraire tout commit, puis l'utiliser avec un nom de branche pour revenir à une branche nommée.
git checkout
avec un ID de validation et non un nom de branche vous déplace hors de toute branche nommée et sur ce qui est connu comme tête détachée.
Si tu utilises git reset
alors il ramènera votre branche elle-même à un ancien état, rendant orphelins les commits les plus récents qui ne sont probablement pas ce que vous voulez.
Les autres réponses sont informatives, mais je pense que cela se rapproche le plus de ce que souhaite le PO:
Ajoutez ces deux fonctions à votre ~/.bashrc:
# checkout prev (older) revision
git_prev() {
git checkout HEAD~
}
# checkout next (newer) commit
git_next() {
BRANCH=`git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)|\1|' | grep -v HEAD | sort | uniq`
HASH=`git rev-parse $BRANCH`
PREV=`git rev-list --topo-order HEAD..$HASH | tail -1`
git checkout $PREV
}
Usage:
$ git_prev
Previous HEAD position was 7042c8a... Commit message2
HEAD is now at d753ecc... Commit message1
$ git_next
Previous HEAD position was d753ecc... Commit message1
HEAD is now at 7042c8a... Commit message2
Remarque : Ces commandes entrent toujours l'état HEAD détaché . Si vous git_prev
puis git_next
à partir d'une branche actuellement extraite, vous vous retrouverez à la dernière révision mais vous serez à l'état détaché HEAD. Do git checkout BRANCH_NAME
pour revenir à la normale.
Essayez git reflog
, cette liste répertorie les validations et les extractions que vous avez effectuées pour basculer entre les validations, même les validations que vous avez perdues lors de l'extraction à une validation précédente.
Ensuite, vous pouvez essayer git checkout <hash of a commit>
pour passer à ce commit.
J'espère que cela t'aides!
Pour extraire une version différente d'un fichier, utilisez
git checkout rev -- filename
Où rev peut être l'ID d'une validation, le nom d'une branche, le nom d'une balise ou une version relative.
Utilisation git log
, gitk
pour regarder examiner les versions pour voir quelle version du fichier vous voulez.
Pour rendre cette version du fichier permanente, vous devez valider le fichier: git add filename; git commit filename
Je ne recommanderais pas git pull
pour examiner les versions car il effectue une fusion - modifiant potentiellement votre état actuel.
Vous n'avez pas besoin d'utiliser git reset
dans ce cas, sauf si vous git add
un fichier que vous décidez de ne pas valider.