J'ai complètement fubar'd ma succursale locale et j'aimerais recommencer. La version sur le serveur est correcte.
Je ne veux pas recommencer, je voudrais utiliser mon histoire locale pour réparer mon énorme problème. (Je peux si je le dois.)
git fetch branchname
, et git pull branchname
ne fonctionne pas. Le message que je reçois est « à jour » cependant, ma version locale ne correspond pas à celle du serveur.
git pull origin/branchname
me donne une erreur " non trouvé ".
Réponses:
tout d'abord, créez une nouvelle branche à la position actuelle (au cas où vous auriez besoin de votre ancien historique `` foiré ''):
mettez à jour votre liste de branches distantes et synchronisez les nouveaux commits:
puis, réinitialisez votre branche au point où l'origine / branche pointe vers:
attention , cela supprimera toutes les modifications de votre arbre de travail !
la source
git fetch origin
avant la réinitialisationorigin/branch
. Jamais.git reset
alors que HEAD pointe sur une branche, cette branche suivra.Ce que je fais lorsque je gâche ma branche locale, c'est que je renomme simplement ma branche cassée et que je vérifie / branche à nouveau la branche en amont:
Ensuite, si vous êtes sûr de ne rien vouloir de votre ancienne branche, supprimez-la:
Mais généralement, je laisse l'ancienne succursale localement, juste au cas où j'aurais quelque chose là-dedans.
la source
git checkout -b <branch> --track <remote>/<branch>
vôtre fonctionne-t - elle aussi bien, sans le--track
?branch.autoSetupMerge
(qui je pense par défaut à true) rend l'--track
implicite. Et, oui, dans toutes mes configurations git, je n'ai pas besoin de le faire explicitement--track
lorsque je fais uncheckout -b
, mais YMMV.Votre succursale locale a probablement des modifications que vous souhaitez supprimer. Pour ce faire, vous devrez utiliser
git reset
pour réinitialiser la tête de branche au dernier endroit où vous avez divergé de la branche du dépôt en amont. Utilisezgit branch -v
pour trouver l'identifiant sha1 de la branche amont et réinitialisez votre branche en l'utilisantgit reset SHA1ID
. Ensuite, vous devriez être en mesure de faire ungit checkout
pour annuler les modifications qu'il a laissées dans votre répertoire.Remarque: faites toujours cela sur un dépôt sauvegardé. De cette façon, vous pouvez vous assurer que cela a bien fonctionné. Ou si ce n'est pas le cas, vous avez une sauvegarde sur laquelle revenir.
la source
Ceci permet de rétablir toutes vos modifications locales sur la tête d'origine
la source