J'ai un commit dans une succursale locale distante et je tiens à jetter cela commettez de l'histoire et de mettre certains d'entre eux dans une propre branche.
Fondamentalement, j'ai maintenant: P>
E---G topic / D master
3 Réponses :
Vous pouvez réécrire votre histoire si vous le souhaitez, mais c'est une mauvaise idée si quelqu'un d'autre a des copies de l'histoire. Dans ce cas, vous utiliseriez probablement une rebasse interactive: Cela dit, je dois souligner qu'il est irresponsable de le faire si quelqu'un d'autre a cette histoire. Il vous faudrait forcer-le pousser à votre repo central et que tout le monde devrait réparer leurs référentiels pour correspondre, peut être relativement simple ou complexe en fonction des circonstances. P>
git rebase -i sujet maître code>. Cela vous donnera une liste de commettre du Master au sujet, avec des astuces sur la façon de jouer avec eux. Vous auriez juste besoin de supprimer la ligne contenant le COMMIT que vous souhaitez supprimer. P>
Ok, merci beaucoup pour ces informations. Donc, ce n'est pas vraiment une solution alors parce que je ne veux pas faire une telle force-poussée. Quelle serait la solution la plus propre pour obtenir un résultat similaire? Celui que je penserais maintenant est de revenir à E, F, G en Master, puis créez une nouvelle succursale à partir de cet état et de ce choix de cerisier E et G. est que ce que l'on ferait naturellement?
Il y a aucun moyen i> de supprimer un engagement de l'histoire sans causer ces types de problèmes. Peu importe ce que vous faites, vous allez finir par pointer votre maître Ref à un commit qui n'a pas la position précédente de la maîtrise dans son histoire.
Ceci est largement abordé dans ma réponse à votre nouvelle version de cette question, mais pour répondre à votre commentaire: peu importe la façon dont vous entrez dans un état dans lequel vous avez réécrit l'histoire de Maître. Vous aurez toujours réécrit. Si vous faites toutes ces choses localement i>, c'est bon. Cela s'appelle le nettoyage. Si vous les faites au travail publié, vous jouez des choses, créant un repo public que personne ne peut faire confiance, etc.
Avec Refenser E, F, G, je voulais utiliser Git-Revert. Donc, l'histoire serait un peu laide mais je n'aurais pas à traiter de ces problèmes, car je
Ah ok. Désolé, j'ai mal compris et pensais que vous parliez de pointer du maître à l'ensemble choisi Cherry. Si vous souhaitez créer cette nouvelle succursale, vous pouvez toujours utiliser la même méthode de Rebase - faites-la simplement sur Master-New, pas Master.
Si vous avez publié, vous avez raison de ne pas vouloir ré-écrire l'historique de Si Vous planifiez à un moment donné à l'avenir de fusionner comme une alternative que vous auriez pu faire commettre E ', F' et G 'refaire chaque partie séparément mais comme E, F et G sont déjà dans Votre histoire publiée Il est probablement plus compréhensible si vous faites simplement référence à «Annuler» commettez et disons que ce commettre est annulé. C'est ce que essentiellement ce que vous savez avoir est-ce. P> Les choses importantes sont que vous n'avez pas réécrit l'histoire et que le sujet est basé sur le maître, de sorte que les fantasmes n'appliqueront pas accidentellement de «annuler» commet. Vous pouvez désormais pousser en toute sécurité les deux maître code>. Ce que vous voulez, c'est de publier un engagement à maîtriser qui le ramène à l'état qu'il était à
d code> tout en conservant son historique actuel afin que d'autres utilisateurs puissent fusionner ou rebaisser facilement leur travail.
Sujet code> dans
Master code>, alors ce que vous voulez probablement aussi faire est de faire une nouvelle base commune entre
maître code > et
sujet code>, de sorte que lorsque vous fusionnez ultérieurement
sujet code>, vous ne perdez pas les engagements qui ont été retournés dans
maître code>. Le moyen le plus simple de le faire est de faire un «refonte» commet-t-il en haut de la commission «annuler» qui réinitialise
maître code> à son état d'origine et en basant le nouveau
sujet code> branche sur le dessus de cela. p>
git revert code> fait, de toute façon. P>
maître code> et
sujet code> sur votre référentiel distant. P> p>
Merci, c'est exactement ce que j'ai fait maintenant (aussi ce que j'ai suggéré dans certains des commentaires à JEFROMI). L'histoire est un peu laide maintenant à cause de cet annulation, mais je ne peux rien faire à ce sujet.
2 semaines utilisateur git ici. Ne serait-il pas plus facile de la première branche g to g ', puis git revenir code> g à d, résultant en D'? De cette façon, vous n'avez pas à annuler / refaire quoi que ce soit, ce qui se sent beaucoup plus sûr pour moi. (J'ai déjà des modifications perdues sans recouvertes en raison de la gâche avec
GIT RESET CODE>.)
@bart, consultez git reflog code>. Des trucs qui ont été comisés et ensuite vissés devraient toujours être récupérables à travers le reflex, au moins pendant quelques jours. Vous pouvez toutefois perdre des changements sans recouvertes que vous n'avez jamais commis.
@bart, Charles Bailey explique pourquoi il a fait des choses dans l'ordre qu'il a fait ici quand il dit "Vous voulez probablement aussi faire est de faire une nouvelle base commune entre le maître et le sujet, de sorte que lorsque vous fusionnez ensuite de sujet, vous ne fusionnez pas. perdre les commits qui ont été retournés en maître. "
Je trouve Stassez-le simplement et ne le regarde plus jamais. P> git cache code> est assez utile p>
Utilisez GIT RESET HEAD ^ CODE> pour que vous puissiez sortir sans perdre vos modifications.