Déplacer la branche pointeur vers différents commettre sans checkout
Pour déplacer la branche pointeur d'un extrait de la branche, on peut utiliser la git reset --hard
de commande. Mais comment faire pour déplacer la branche pointeur d'une non-vérifiés de la succursale de point à un autre commit (en gardant tous les autres trucs comme suivi à distance de la branche)?
- Sonne comme tout ce que vous voulez faire est une branche d'un commit différent de celui qu'il est créé à partir de maintenant. Si ma compréhension est correcte, alors pourquoi ne pas vous suffit de créer une nouvelle branche à partir de la validation que vous souhaitez créer à partir de l'aide de
git branch <branch-name> <SHA-1-of-the-commit>
et de vidage de la vieille branche? - Je ne suis pas sûr qu'dumping "maître" de la branche est une bonne idée.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire pour arbitraire refs. C'est la façon de déplacer une branche pointeur:
La forme générale:
Vous pouvez choisir les lentes sur le reflog message si vous voulez - je crois que le
branch -f
l'un est différent de l'reset --hard
, et ce n'est pas exactement l'un d'eux.git reflog
pour le voir)git branch -f
. Pour être plus précis, cette méthode semble être: (A) plus difficile à utiliser (B) difficile de s'en souvenir, et (C) plus dangereuxgit fetch origin
, git va créer des refs à l'intérieur derefs/remotes/origin/
qui correspondent à la direction des chefs de laorigin
à distance.git-p4
permettra de créer des refs enrefs/remotes/p4
, pour émuler une distance appeléep4
. Lors de la récupération d'une mauvaisegit p4 sync
, à l'aide de lagit update-ref
formulaire vous permet de vous déplacer où le p4 et chef de la direction générale des points à, de nouvelle tentative de synchronisation.git update-ref -m "reset: Reset <branch> to <new commit>" <branch> <commit>
. (Vous pouvez choisir les lentes sur le reflog message si vous voulez - je crois que lebranch -f
l'un est différent de l'reset --hard
, et ce n'est pas exactement l'un d'eux.)git help branch
dit " -f, --force à zéro <branchname> <point de départ> si <branchname> existe déjà. Sans-f git branch refuse de changer une branche."git branch -f master <hash>
et il me ditfatal: Cannot force update the current branch.
Ummmm je dois faire quoi maintenant, vérifiez certains autres aléatoire branche avant que je suis autorisé à utiliser cette commande?git reset --soft <hash>
de changer de TÊTE (c'est à dire la branche courante; en supposant que la TÊTE n'est pas détaché).--mixed
(qui est le mode par défaut pour git reset).HEAD
points).git checkout otherbranch
premier. L'autre branche peut pointer vers la même livraison.git checkout HEAD^ && git branch -f mybranch HEAD && git checkout mybranch
a fonctionné pour moi.new-tip-commit
est une branche distante, il est également défini comme l'amont pour votrebranch-name
. Est-il un moyen de contourner cela?Vous pouvez également passer
git reset --hard
un commit de référence.Par exemple:
Je trouve que je fais quelque chose comme ce semi-fréquemment:
En supposant que cette histoire
git update-ref
comme discuté ci-dessus.git reset --hard ...
Pas besoin de le répéter ici! 🙁git repoint <commit>
commandeJuste pour enrichir la discussion, si vous voulez déplacer
myBranch
branche à votre actuel s'engager, juste omettre le deuxième argument après-f
Exemple:
git branch -f myBranch
En général, je le fais quand je
rebase
tout en un décollement de la TÊTE de l'état 🙂Dans
gitk --all
:Méfiez-vous que la re-création au lieu de modifier la branche perdra de suivi-information de la direction générale. (Ce n'est généralement pas un problème pour une utilisation simple-les cas où il n'y a qu'une seule télécommande et votre section locale a le même nom que la branche correspondante de la télécommande. Voir les commentaires pour plus de détails, merci @mbdevpl de remarquer cette baisse.)
Ce serait cool si
gitk
avait une fonction, lorsque la boîte de dialogue a 3 options: remplacer, de modifier ou de l'annuler.Même si vous êtes normalement une ligne de commande junkie comme moi,
git gui
etgitk
sont assez bien conçus pour le sous-ensemble de git utilisation qu'ils permettent. Je recommande fortement d'utiliser pour ce qu'ils sont bons (c'est à dire de manière sélective mise en scène mecs dans/hors de l'index dans git gui, et aussi tout juste de s'engager. (ctrl-s pour ajouter un signés: ligne, ctrl-enter pour valider.)gitk
est idéal pour garder la trace de quelques branches tout en vous triez vos modifications dans un patch belle série de soumettre en amont, ou autre chose où vous avez besoin de garder une trace de ce que vous êtes dans le milieu de la avec plusieurs branches.Je n'ai même pas un navigateur de fichiers graphiques ouvrir, mais j'aime gitk/git gui.
git status
sortie est affectée. En outre, dans certains cas,git fetch
etgit push
ne fonctionnera pas sans spécifier à distance de façon explicite si vous ne définissez pas le suivi de la branche. Je ne sais pas à propos de toutes les affaires, mais pour moi, la règle générale est que, pour la commodité et la rapidité de travail, il est préférable d'avoir suivi les branches dans l'ordre.git checkout devel
mais seulementorigin/devel
existe, git va automatiquement créer et de départdevel
, tout en fixant son suivi branche en conséquence.La solution recommandée
git branch-f branche-pointeur-de-nouveau-pointeur
dans TortoiseGit:Honnêtement, je suis surpris de voir comment personne n'a pensé à la
git push
commande:Le point ( . ) désigne le référentiel local et vous pourriez avoir besoin de l'option-f parce que la destination ne peut être "derrière son homologue distant".
Bien que cette commande est utilisée pour enregistrer vos modifications dans votre serveur, le résultat est exactement le même que si le déplacement de la branche distante (
<branch>
) à la même livraison que la branche locale (<destination>
)