551 votes

git : vers une nouvelle branche des modifications validées (mais pas poussé)

J'ai fait un peu juste du travail ("Votre branche est en avance de 'origin/master' de 37 valide.") qui devrait vraiment avoir disparu dans sa propre branche plutôt qu'en master. Ces révisions n'existent que sur ma machine locale et n'ont pas été poussés à l' origin, mais la situation se complique quelque peu dans d'autres devs ont fait pression pour origin/master et j'ai tiré ces changements.

Comment puis-je rétroactivement déplacer mes 37 locale s'engage sur une nouvelle branche? Basé sur les docs, il semble que l' git rebase --onto my-new-branch master ou ...origin/master devrait le faire, mais à la fois juste me donner le message d'erreur "fatal: Besoin d'une seule révision". man git-rebase ne dit rien au sujet de la fourniture d'une révision à la rebase et ses exemples à ne pas le faire, donc je n'ai aucune idée de comment résoudre cette erreur.

(Notez que ce n'est pas un doublon de Git: Comment faire pour déplacer des travaux existants vers une nouvelle branche? ou Git: comment fusionner mon local, le travail se transforme en une autre branche que ces questions portent sur les modifications non validées dans les locaux de travail de l'arbre, et non pas les changements qui ont été engagés sur place.)

594voto

Mark Longair Points 93104

Ce devrait être bon, puisque vous n'avez pas poussé votre commet n'importe où ailleurs encore, et vous êtes libre de réécrire l'histoire de votre branche après origin/master. Je souhaite tout d'abord exécuter un git fetch origin à assurez-vous que origin/master est jusqu'à ce jour. En supposant que vous êtes actuellement sur master, vous devriez être en mesure de le faire:

git rebase origin/master

... qui va relire tous vos commits qui ne sont pas en origin/master sur origin/master. L'action par défaut de rebase est de l'ignorer fusion s'engage (par exemple ceux que votre git pulls probablement introduit) et il va tout simplement essayer d'appliquer le patch introduit par chacun de vos commits sur origin/master. (Vous pourriez avoir à résoudre certains conflits le long du chemin.) Ensuite, vous pouvez créer votre nouvelle branche sur la base du résultat:

git branch new-work

... et puis réinitialiser votre master de retour à l' origin/master:

# Use with care - make sure "git status" is clean and you're still on master:
git reset --hard origin/master

Quand on fait ce genre de manipulation de branches avec des git branch, git reset, etc. Je trouve très utile pour regardez souvent à la validation graphique avec gitk --all ou un outil similaire, juste pour vérifier que je comprends d'où les différentes références sont de pointage.

Sinon, vous pourriez vous venez de créer une nouvelle branche en fonction de l'endroit où votre maître est à la première place (git branch new-work-including-merges), puis réinitialiser master comme ci-dessus. Cependant, depuis votre sujet branche comprendra des fusions d' origin/master et vous n'avez pas poussé vos modifications et pourtant, je vous suggère de faire un rebase, afin que l'histoire est plus propre. (Aussi, quand vous finissent par fusionner votre sujet branche avec le maître, les changements seront plus évident.)

6voto

Tim Keating Points 2942

Qu'en est-il de :

  1. Direction de l’actuel chef.
  2. Assurez-vous que vous êtes le maître, pas votre nouvelle branche.
  3. ``Retour à la dernière validation avant de commencer à apporter des modifications.
  4. ``pour re-tirer seulement les changements de distance vous jeté avec la remise à zéro.

Ou qui explosera lorsque vous essayez de re-fusionner la branche ?

0voto

<ol> <li><p>Nouvelle copie de caisse de vous sources</p> <p><code></code></p></li> <li><p>Faire la branche de la position désirée</p> <p><code></code> <code></code></p></li> <li><p>Ajouter le référentiel distant</p> <p><code></code></p></li> <li><p>Obtenir les sources distantes</p> <p><code></code></p></li> <li><p>Direction de la caisse souhaitée</p> <p><code></code></p></li> <li><p>Fusionner des sources</p> <p><code></code></p></li> </ol>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X