Comment puis-je créer un sharepoint twigment pour un commit spécifique?

Dans Git, je comprends qu’une twig est un pointeur sur un commit.

Comment puis-je créer un sharepoint twig spécifique pour un commit spécifique? Disons que je veux faire master sharepoint master à 1258f0d0aae... , comment puis-je faire ça?

Vous pouvez faire le point master à 1258f0d0aae cette façon:

 git checkout master git reset --hard 1258f0d0aae 

Mais il faut faire attention à cela. Il pourrait bien réécrire l’histoire de cette twig. Cela créerait des problèmes si vous l’avez publié et que d’autres personnes travaillent sur la twig.

De plus, la commande git reset --hard jettera tous les changements non git reset --hard (c’est-à-dire ceux qui se trouvent uniquement dans votre arbre de travail ou dans l’index).

Vous pouvez également forcer une mise à jour vers une twig avec:

 git branch -f master 1258f0d0aae 

… mais git ne vous laissera pas faire si vous êtes master à ce moment.

 git reset --hard 1258f0d0aae 

Mais attention, si les commits descendants entre 1258f0d0aae et HEAD ne sont pas référencés dans d’autres twigs, il sera fastidieux (mais pas impossible) de les récupérer, il est donc préférable de créer une twig “backup” sur HEAD et réinitialiser le commit souhaité.

Veillez également à ne pas avoir de modifications non validées avant une reset --hard , elles seront réellement perdues (aucun moyen de récupérer).

Si vous n’êtes pas actuellement en poste, c’est très facile:

 git branch -f master 1258f0d0aae 

Cela fait exactement ce que vous voulez: il pointe le master sur le commit donné et ne fait rien d’autre.

Si vous êtes actuellement maître, vous devez d’abord vous mettre en tête. Je recommande les deux séquences de commandes suivantes:

 git checkout 1258f0d0aae #detach from master git branch -f master HEAD #exactly as above #optionally reattach to master git checkout master 

Soyez conscient, cependant, que toute manipulation explicite de l’emplacement d’une twig a le potentiel de laisser des commits qui ne sont plus joignables par aucune twig, et donc de devenir des objects de récupération de place. Alors réfléchissez avant de taper git branch -f !


Cette méthode est meilleure que l’approche git reset --hard , car elle ne détruit rien dans l’index ou le répertoire de travail.

git branch -f

Je vais avec la solution de Mark Longair et ses commentaires et je recommande à quiconque de lire ceux-ci avant d’agir, mais je suggère que l’accent soit mis sur

 git branch -f   

Voici un scénario où j’ai eu besoin de le faire.

Scénario

Développez sur la mauvaise twig et par conséquent devez le réinitialiser.

Commencez bien

Développer et libérer proprement des logiciels.

Jusqu'ici tout va bien

Développer sur une mauvaise twig

Erreur: Restez accidentellement sur la twig de sortie tout en développant davantage.

Après une erreur

Réaliser l’erreur

“OH NON! Je me suis accidentellement développé sur la twig de publication.” L’espace de travail est peut-être encombré de fichiers à moitié modifiés qui représentent des travaux en cours et nous ne voulons vraiment pas toucher à cela. Nous aimerions simplement que git lance quelques pointeurs pour suivre l’état actuel et ramène cette twig de publication à son état actuel.

Créez une twig pour le développement qui est à jour et conserve le travail engagé jusqu’à maintenant.

 git branch development git checkout development 

Changé pour une autre branche

Corriger la twig

Maintenant, nous sums dans la situation problématique et avons besoin de sa solution! Corrigez l’erreur (en faisant avancer la twig de publication avec le développement) et remettez la twig de publication à sa place.

Corrigez la twig de publication pour revenir à la dernière version réelle.

 git branch -f release release2 

La twig de publication est maintenant à nouveau correcte, comme ceci …

Corrigée

Et si je poussais l’erreur sur une télécommande?

git push -f est bien décrit dans un autre thread, bien que le mot “écraser” dans le titre soit trompeur. Forcer “git push” à écraser les fichiers distants