89 votes

Obtenir la différence entre deux branches dans Git

J'ai fait ce qui suit (j'ai simplifié cette comparaison à une réalité) :

  • a créé une branche Branche 1 et l'ont adopté
  • fichier ajouté Dossier 1 et modifié le fichier existant Fichier 2 et a commis ceci
  • J'ai compris que je n'avais pas besoin Dossier 1 Je l'ai enlevé et j'ai fait ceci

Donc, la différence réelle entre branche originale y Branche 1 n'est qu'une modification de Fichier 2 .

Je veux obtenir cette différence réelle entre les branches et la mettre dans Branche 2 . D'une manière générale, je veux me débarrasser de l'historique inutile d'ajouts et de suppressions. Dossier 1 .

186voto

Klas Mellbourn Points 6771

Supposons que vous avez commencé sur la branche master . Alors vous pouvez le faire :

git diff master Branch1 > ../patchfile
git checkout Branch2    
git apply ../patchfile

Alternativement, si votre but est de réécrire l'histoire, alors vous pourriez utiliser une rebasement interactif pour écraser les commits.

10voto

MaxK Points 404

C'est un simple git diff

git diff --name-only SHA1 SHA2

Où SHA1/2 sont les hachages des 2 commits au sommet de chaque branche.

Ou vous pouvez faire

git diff --name-only develop...

Pour comparer votre branche avec la develop branche

0voto

sebastian Points 816

Je ferais un rebasement interactif sur HEAD~2 et écraser les deux derniers commits ensemble. En supposant que vous voulez garder l'historique tel quel dans le fichier Branch1 et le simplifier en Branch2 Faites ce qui suit (branche actuelle) Branch1 ) :

git checkout -b Branch2
git rebase -i 'HEAD~2'

Un éditeur s'ouvre, montrant quelque chose comme

pick 1b58da0 Added File1, changed File2
pick d3f4f51 Delete File1

et de nombreux commentaires explicatifs sur le fonctionnement du rebasage. Changez le dernier commit en un squash et fermez l'éditeur.

pick 1b58da0 Added File1, changed File2
squash d3f4f51 Delete File1

Un nouvel éditeur s'ouvre où vous pouvez spécifier le nouveau message de livraison. Il s'agira probablement de

Fichier modifié2

Fermez-la et vous avez terminé, les deux commits sont écrasés ensemble dans le fichier Branch2 y Branch1 conserve votre histoire originale. Notez que si vous n'avez pas besoin de conserver l'historique d'origine, vous pouvez simplement ne pas passer à la caisse. Branch2 et travailler directement sur Branch1 . Ne faites cela que si vous n'avez pas publié vos deux derniers commits sur Branch1 déjà.

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