J'écris des scripts pour mon workflow Git.
Je dois réinitialiser une autre branche (existante) à la branche actuelle, sans vérification.
Avant:
CurrentBranch: commit A
OtherBranch: commit B
Après:
CurrentBranch: commit A
OtherBranch: commit A
Équivalent de
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Remarque --soft
: je ne veux pas affecter l'arbre de travail.)
Est-ce possible?
Réponses:
Les flux de travail que vous décrivez ne sont pas équivalents: lorsque vous effectuez,
reset --hard
vous perdez toutes les modifications de l'arborescence de travail (vous voudrez peut-être les apporterreset --soft
).Ce dont tu as besoin c'est
la source
refs/heads/
…git push . current:other
. Cela fonctionne sansrefs/heads
(/ cc @elliottcable) et vous empêche également de mettre à jour la branche extraite. Notez que vous devrez peut-être passer -f (ou utiliser+current:other
) si la mise à jour n'est pas une avance rapide.-m 'some text'
argument pour enregistrer la raison pour laquelle la mise à jour de la référence doit être affichée par unegit reflog OtherBranch
commande, telle que «synchronisé avec CurrentBranch». Il peut être utile de se rappeler pourquoi vous l'avez fait plus tard.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
ougit push . CurrentBranch OtherBranch
quand vous pourriez utiliser le nettoyant beaucoup (IMO) à lagit branch -f OtherBranch CurrentBranch
place? (Voir ma réponse sur git branch -f ci-dessous)Définir
otherbranch
pour pointer vers le même commit qu'encurrentbranch
exécutantL'
-f
option (force) ditgit branch
oui, je veux vraiment écraser touteotherbranch
référence existante par la nouvelle .De la documentation :
la source
fatal: Cannot force update the current branch.
en essayant de faire ça.otherbranch
vérifié. Cette question SO concerne spécifiquement la réinitialisation d' une autre branche à un commit différent (c'est-à-dire ne pas réinitialiser la branche extraite). Ce que vous voulez faire est de réinitialiser la branche actuelle avecgit reset targetbranch
pour forcer la branche actuelle à être pointéetargetbranch
. Ajoutez--hard
pour forcer également l'arborescence de travail à ce contenu. Ou--soft
pour laisser l'index seul et ne changer que la branche elle-même.branch -f
pouvoir faire ça.Vous pouvez synchroniser avec cette commande vos branches à tout moment
Aussi sans -f il remplace cet ensemble de commandes
Cela peut être utile lorsque vous n'avez pas besoin de valider tous vos fichiers dans CurrentBranch et que vous ne pouvez donc pas passer à une autre branche.
la source
-f
option à moins que ce ne soit absolument inévitable. Cela fonctionne bien sans cela dans mon cas.