Question Déplacer le pointeur de branche vers un autre commit sans passer à la caisse


Pour déplacer le pointeur de branche d'une branche extraite, on peut utiliser git reset --hard commander. Mais comment déplacer le pointeur de branche d'une branche non vérifiée pour pointer sur un commit différent (en gardant toutes les autres choses comme la branche distante suivie)?


554
2018-03-29 10:37


origine


Réponses:


N.B. Si vous voulez simplement déplacer un branche à un autre commit, le   le moyen le plus facile est

git branch -f branch-name new-tip-commit

comme détaillé par la réponse de Chris Johnsen.

Vous pouvez le faire pour les arbitres arbitraires. Voici comment déplacer un pointeur de branche:

git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>

La forme générale:

git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>

Vous pouvez choisir des lentes sur le message de reflog si vous aimez - je crois que le branch -f on est différent de la reset --hard un, et ce n'est pas exactement l'un ou l'autre.


368
2018-03-29 10:38



git branch -f branch-name new-tip-commit

772
2018-03-15 18:47



Vous pouvez également passer git reset --hard une référence de validation.

Par exemple:

git checkout branch-name
git reset --hard new-tip-commit

Je trouve que je fais quelque chose comme ça semi-fréquemment:

En supposant cette histoire

$ git log --decorate --oneline --graph
* 3daed46 (HEAD, master) New thing I shouldn't have committed to master
* a0d9687 This is the commit that I actually want to be master

# Backup my latest commit to a wip branch
$ git branch wip_doing_stuff

# Ditch that commit on this branch
$ git reset --hard HEAD^

# Now my changes are in a new branch
$ git log --decorate --oneline --graph
* 3daed46 (wip_doing_stuff) New thing I shouldn't have committed to master
* a0d9687 (HEAD, master) This is the commit that I actually want to be master

120
2017-07-11 19:39



Juste pour enrichir la discussion, si vous voulez déplacer myBranch branche à votre actuel commit, omet juste le second argument après -f

Exemple:

git branch -f myBranch


Je le fais généralement quand je rebase alors que dans un état détaché HEAD :)


20
2017-08-10 08:44



Dans gitk --all:

  • faites un clic droit sur le commit que vous voulez
  • -> créer une nouvelle branche
  • entrez le nom d'une branche existante
  • appuyez sur retour sur la boîte de dialogue confirme le remplacement de l'ancienne branche de ce nom.

Attention à recréer au lieu de modifier la branche existante perdra l'information de la branche de suivi. (Ceci n'est généralement pas un problème pour les cas d'utilisation simples où il n'y a qu'une seule télécommande et votre branche locale porte le même nom que la branche correspondante de la télécommande.) Voir les commentaires pour plus de détails, merci @mbdevpl pour signaler cet inconvénient.

Ce serait cool si gitk avait une fonctionnalité où la boîte de dialogue avait 3 options: écraser, modifier existant, ou annuler.


Même si vous êtes normalement un accro de ligne de commande comme moi, git gui et gitk sont assez bien conçus pour le sous-ensemble de l'utilisation de git qu'ils permettent. Je recommande fortement de les utiliser pour ce qu'ils sont bons (c'est-à-dire mettre en scène sélectivement hunks dans / hors de l'index dans git gui, et juste commettre.) (Ctrl-s pour ajouter un signed-off: ligne, ctrl-enter pour commettre .)

gitk est idéal pour garder une trace de quelques branches pendant que vous triez vos modifications dans une série de patchs à envoyer en amont, ou toute autre chose où vous devez garder une trace de ce que vous êtes au milieu de plusieurs branches.

Je n'ai même pas de navigateur de fichiers graphique ouvert, mais j'aime gitk / git gui.


10
2017-10-13 12:16



le solution recommandée git branch -f branch-pointer-to-move new-pointer dans TortoiseGit:

  • "Journal Git Show"
  • Cochez "Toutes les branches"
  • Sur la ligne, vous voulez que le pointeur de branche se déplace vers (nouveau pointeur):
    • Faites un clic droit, "Créer une branche à cette version"
    • À côté de "Branche", entrez le nom de la branche à déplacer (branche-pointeur-à-déplacer)
    • Sous "Base On", vérifiez que le nouveau pointeur est correct
    • Cochez "Force"
    • D'accord

enter image description here

enter image description here


6