Je sais que je peux voir la différence entre HEAD et l'état actuel avec meld .
. Mais comment puis-je voir les différences entre les branches, par exemple master
et devel
avec meld?
Au moment où je fais les étapes suivantes:
mv /projectA /projectA_master
)git clone url
devel
cd projectA && git -b devel Origin/devel
meld /projectA_Master projectA
N'y a-t-il pas un moyen plus facile d'obtenir le même résultat? Je n’en ai besoin que pour passer en revue les modifications et pas avant tout pour la fusion.
J'ai également trouvé ce problème ennuyeux et j'ai donc créé git meld, ce qui permet de différencier plus facilement les commits arbitraires de l'arbre de travail ou de la zone de transfert. Vous pouvez le trouver à https://github.com/wmanley/git-meld . C'est un peu le script de Mark, mais cela permet de comparer une validation quelconque, la zone de transfert ou le répertoire de travail avec les autres. Si l’un des éléments que vous comparez est l’arbre de travail, il s’agit également de lecture-écriture afin que vous ne perdiez pas vos modifications.
Court et doux:
git config --global diff.tool meld
Ceci configure Git pour utiliser meld
comme outil de comparaison. (Vous n'avez pas besoin de spécifier les arguments de la ligne de commande, le support de meld
est intégré à Git.)
Ensuite, si vous voulez une diff graphique au lieu d'une diffuse textuelle, vous appelez simplement git difftool
au lieu de git diff
(les deux prennent les mêmes arguments). Dans ton cas:
git difftool master..devel
Mise à jour: Si vous ne souhaitez pas utiliser le diff fichier par fichier, mais souhaitez utiliser la vue "sous-répertoire" de meld avec toutes les modifications entre les deux branches, notez l'option -d
ou --dir-diff
pour git difftool
. Par exemple, lorsque je suis sur la branche XYZ et que je veux voir ce qui est différent entre ceci et la branche ABC, je lance ceci:
git difftool -d ABC
À partir de git v1.7.11, vous pouvez utiliser git difftool --dir-diff
pour exécuter un répertoire diff. Ce qui fonctionne assez bien avec meld wihout https://github.com/wmanley/git-meld scripts.
Configurer git
git config --global diff.tool meld
Utilise le
git difftool -d topic // -d is --dir-diff
git difftool -d master..topic
Pour macOS
brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true
Il est important de dire qu'en utilisant git difftool -d
vous pouvez toujours éditer vos fichiers de travail dans Meld et les sauvegarder. Pour ce faire, vous devez comparer une branche à votre arbre de travail actuel, par exemple:
git difftool -d branchname
Meld montrera que les répertoires gauche et droit sont situés dans/tmp. Cependant, les fichiers dans le bon répertoire sont en réalité des liens symboliques vers vos fichiers dans le répertoire de travail actuel (ne s'applique pas à Windows). Ainsi, vous pouvez les éditer directement dans Meld et lorsque vous les enregistrez, vos modifications seront enregistrées dans votre répertoire de travail.
Une option encore plus intéressante est la comparaison du répertoire de travail actuel avec stash. Vous pouvez le faire en tapant simplement:
git difftool -d stash
Vous pouvez ensuite transférer certaines modifications de stash (fenêtre de gauche) vers votre copie de travail actuelle (fenêtre de droite), sans utiliser git stash pop/apply
et en évitant une résolution de conflit gênante pouvant être induite par ces commandes.
Je pense que cela peut considérablement augmenter le flux de travail avec les caches. Vous pouvez progressivement transférer les modifications d’une réserve à une copie de travail et les valider une à une, en introduisant d’autres modifications si vous le souhaitez.
Je pense qu’un moyen facile de faire cela consiste à utiliser git reset --soft
:
Objectif: comparer les différences entre branch_a et branch_b avec meld
git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
Bien que les autres réponses semblent indiquer qu’il n’ya pas moyen de le faire directement dans le dépôt git pour le moment, il est facile (grâce à la réponse à une autre question :)) d’écrire un script qui extraira le les arbres de deux commettent dans des répertoires temporaires et exécutent la fusion sur eux, en supprimant les deux répertoires lors de la fermeture de la fusion:
Bien sûr, vous perdrez toutes les modifications apportées via meld, mais c'est assez agréable pour un aperçu rapide des différences, je pense.
Dans Git V1.7.9, vous pouvez comparer deux commits sans la ligne de commande:
Vous devez configurer dans les options d'édition 'git gui', global: "Utiliser l'outil de fusion: fusion".
Démarrer gitk , sélectionnez une validation, cliquez avec le bouton droit de la souris sur une autre validation> " diff this -> selected " . Sous "patch", cliquez avec le bouton droit sur un fichier> " external diff ".
meld démarre et affiche le message toujours sélectionné, d'abord validé du côté droit.
Je ne peux pas commenter sous Piort Jurkiewicz répond au commentaire de pykiss: "copier les nouveaux fichiers d'une branche dans un répertoire de travail ne fonctionne pas :(", mais:
La solution pour copier le fichier file.txt de branch_B dans la branche active branch_A est la suivante:
git chechout branch_B -- file.txt
de cette réponse à cette question . Je ne sais pas comment le faire au sein de se fondre.
Si vous avez un répertoire de travail et un index propres (ou ne vous en souciez pas), voici ce que vous voulez:
git diff master..devel | patch -p1 && meld . && git reset --hard