Je travaillais accidentellement sur une branche que je n'aurais pas dû être pendant un certain temps, alors je me suis éloigné d'elle en lui donnant le nom approprié. Maintenant, je veux écraser la branche sur laquelle je n'aurais pas dû être sur la version d'origine (github). Y a-t-il un moyen facile de faire ceci? J'ai essayé de supprimer la branche, puis de réinitialiser la branche de suivi, mais cela me donne simplement la version sur laquelle je travaillais à nouveau.
440
git switch -C mybranch origin/mybranch
. Voir ma réponse modifiée ciRéponses:
Si vous n'avez pas encore poussé vers l'origine, vous pouvez réinitialiser votre branche vers la branche amont avec:
(Assurez-vous de référencer votre dernier commit dans une branche distincte, comme vous le mentionnez dans votre question)
Notez que juste après la réinitialisation, se
mybranch@{1}
réfère à l'ancien commit, avant la réinitialisation.Mais si vous aviez déjà poussé, voir " Créer une branche git et rétablir l'original en état amont " pour d'autres options.
Avec Git 2,23 (Août 2019) , ce serait une commande:
git switch
.À savoir:
git switch -C mybranch origin/mybranch
Exemple
Cela restaure l'index et l'arbre de travail, comme un
git reset --hard
ferait.Comme commenté par Brad Herman , un
reset --hard
serait enlever tout nouveau fichier ou réinitialiser fichier modifié à HEAD .En fait, pour être sûr de partir d'une "table rase", un
git clean -f -d
après la réinitialisation garantirait un arbre de travail exactement identique à la branche que vous venez de réinitialiser.Ce billet de blog suggère ces alias (pour la
master
branche uniquement, mais vous pouvez les adapter / étendre):la source
git reset --hard origin/mybranch
commande plusieurs fois lorsque je ne me suis pas soucié des modifications locales et que je voulais juste une copie propre qui correspondait à l'origine. Cependant, aujourd'hui, cela n'a pas fonctionné - j'avais encore une poignée de nouveaux fichiers non organisés, et git n'arrêtait pas de me promettre que c'était chez HEAD. La note à proposgit clean -f -d
de cela corrigeait en effaçant tous les nouveaux fichiers que je ne voulais pas.git reset --hard HEAD
pour revenir à un commit précédent, en ignorant tous les changementsEn supposant que c'est ce qui s'est passé:
Ensuite, vous réalisez que vous apportez des modifications sur la mauvaise branche.
Mais
master
souligne toujours votre engagement. Vous voulez qu'il pointe là où il pointait auparavant.Solution
Le moyen le plus simple est:
Une autre façon est:
Notez que l'utilisation
reset --hard
entraînera la perte de vos modifications non validées (tests.py
dans mon exemple).la source
J'ai un dépôt privé sur un serveur et je le rebase / le pousse régulièrement, ce qui rend nécessaire de réinitialiser souvent la branche locale sur mon autre ordinateur. J'ai donc créé l'alias suivant "catchup", ce qui permet de le faire pour la branche courante. Contrairement à l'autre réponse, il n'y a pas de nom de branche codé en dur dans cet alias.
Tiens bon.
Correctement formaté (ne fonctionnera pas avec les sauts de ligne dans .gitconfig), il ressemble à ceci:
\\033[0;33m
et\\033[0m
sert à souligner la branche actuelle et en amont avec de la couleur.$(git symbolic-ref -q --short HEAD)
est le nom de la branche actuelle$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
est en amont de la branche actuelle.Étant donné que la réinitialisation est un appel potentiellement dangereux (en particulier avec l'option --hard, vous perdrez toutes les modifications non validées), il vous indique d'abord ce qu'il est sur le point de faire. Par exemple, si vous êtes sur une branche dev-container avec une télécommande appelée qcpp / dev-container et que vous entrez
git catchup
, vous serez invité:Si vous tapez ensuite y ou appuyez simplement sur retour, il effectuera la réinitialisation. Si vous saisissez autre chose, la réinitialisation ne sera pas effectuée.
Si vous voulez être super sûr et empêcher par programmation de perdre des modifications non stadifiées / non validées, vous pouvez pimper l'alias ci-dessus plus loin en vérifiant les différences d'index .
Le mot d'avertissement obligatoire: si vous travaillez sur un référentiel public sur lequel d'autres personnes ont basé leur travail et que vous avez besoin de cet alias, vous vous trompez ™ .
la source
J'ai essayé et cela n'a pas réinitialisé ma branche actuelle sur mon github distant le plus récent. J'ai googlé et trouvé https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/
qui a suggéré
Je voulais réinitialiser ma branche v8, donc je l'ai fait
et ça a marché
la source