Déplacer le pointeur de la branche vers une autre propagation sans vérification

pour déplacer le pointeur de branche d'une branche cochée, on peut utiliser la commande git reset --hard . Mais comment déplacer le pointeur de branche d'une branche non vérifiée pour pointer vers une propagation différente (en gardant toutes les autres choses comme une branche distante suivie)?

574
demandé sur Binarian 2011-03-29 14:37:03
la source

6 ответов

N.B. si vous voulez simplement déplacer un branche à un autre commit, le manière la plus simple est

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

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

vous pouvez le faire pour des références 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 nits au sujet du message reflog si vous aimez - je crois que le branch -f un est différent du reset --hard un, et ce n'est pas exactement l'un d'eux.

388
répondu Adam A 2018-05-18 13:03:29
la source
git branch -f branch-name new-tip-commit
793
répondu Chris Johnsen 2016-02-24 21:26:59
la source

vous pouvez aussi passer git reset --hard une référence de propagation.

par exemple:

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

je trouve que je fais quelque chose comme ce semi-fréquemment:

, en Supposant que cette histoire de

$ 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
répondu Amiel Martin 2012-03-15 22:47:28
la source

juste pour enrichir la discussion, si vous voulez déplacer myBranch branche à votre courant commit, juste omettre le deuxième argument après -f

exemple:

git branch -f myBranch


je fais généralement cela quand je rebase tandis que dans un État de tête détaché:)

25
répondu Matheus Felipe 2017-07-11 22:39:53
la source

gitk --all :

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

attention que la recréation au lieu de modifier la branche existante perdra le suivi-informations de la branche . (Ce n'est généralement pas un problème pour les cas d'utilisation simple où il n'y a qu'une seule télécommande et où votre branche locale a le même nom que la branche correspondante dans la télécommande. Voir les commentaires pour plus de détails, merci @mbdevpl de souligner cet inconvénient.)

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


même si vous êtes normalement un junkie de ligne de commande comme moi, git gui et gitk sont assez bien conçus pour le sous-ensemble d'utilisation de git qu'ils permettent. Je recommande fortement de les utiliser pour ce à quoi ils sont bons (c.-à-d. mettre en scène de façon sélective des morceaux dans/hors de l'index dans git gui, et aussi juste commettre. (ctrl-s pour ajouter un signés: ligne, ctrl-enter pour valider.)

gitk est grand pour garder la trace de quelques branches pendant que vous triez vos changements dans une série de patch agréable à soumettre en amont, ou n'importe quoi d'autre où vous avez besoin de garder une trace de ce que vous êtes au milieu de avec plusieurs branches.

Je n'ai même pas de navigateur de fichier graphique ouvert, mais j'adore gitk/Git gui.

11
répondu Peter Cordes 2017-06-16 05:55:02
la source

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

  • "Git Afficher le journal"
  • Vérifier "Toutes Les Branches "
  • sur la ligne où vous voulez que le pointeur de branche se déplace (nouveau-pointeur):
    • clic droit, "créer une branche à cette version "
    • à côté de "Branch", entrez le nom de la branche à déplacer (branch-pointer-to-move)
    • sous" Base On", vérifier que le nouveau pointeur est correct
    • Cochez La Case "Force"
    • Ok

enter image description here

enter image description here

6
répondu ax. 2017-05-23 15:34:44
la source

Autres questions sur git git-branch