Comment comparer des fichiers à partir de deux branches différentes?
J'ai un script qui fonctionne très bien dans une branche et s'est cassé dans l'autre. Je veux regarder les deux versions côte à côte et de voir ce qui est différent. Est-il possible de faire cela?
Pour être clair je ne suis pas à la recherche d'un outil de comparaison (j'utilise au-Delà de Comparer). Je suis à la recherche d'un git diff de commande qui va me permettre de comparer la version de base à ma branche actuelle version pour voir ce qui a changé. Je ne suis pas dans le milieu d'une fusion ou quoi que ce soit. Je veux juste dire quelque chose comme
git diff mybranch/myfile.cs master/myfile.cs
Vous devez vous connecter pour publier un commentaire.
git diff
peut vous montrer la différence entre les deux s'engage à:Ou, de manière équivalente:
À l'aide de la dernière syntaxe, si l'une des parties est
HEAD
il peut être omis (par exemplemaster..
comparemaster
àHEAD
).Vous pourriez également être intéressé par
mybranch...master
(à partir degit diff
docs):En d'autres termes, cela donne un diff de changements dans
master
depuis qu'il a divergé demybranch
(mais sans nouvelle de changements depuis dansmybranch
).Dans tous les cas, la
--
séparateur avant le nom de fichier indique la fin des options de ligne de commande. Cette option est facultative, sauf si Git vont se confondre si l'argument fait référence à un commit ou un fichier, mais dont il n'est pas une mauvaise habitude à prendre. Voir https://stackoverflow.com/a/13321491/54249 pour quelques exemples.Les mêmes arguments peuvent être passés à
git difftool
si vous en avez configuré.git diff branch1 branch2 myfile.cs
. (Le--
ne devrait pas être plus nécessaire, puisqu'il ne peut prendre jusqu'à deux révision des arguments.)--
. Commune et erreur facile à faire.)git diff --name-status branch1..branch2
(probablement évident, mais pensé que je le mentionne dans le cas où quelqu'un d'autre a le même problème je l'ai fait).--
et{filename}
? Si non, Git va penser que vous essayez de spécifier un--long-switch
."*/filename.txt"
git diff anotherBranch myfile.cs
?<commit>
valeur "de voir les changements que vous avez dans votre arbre de travail par rapport aux nommé <valider>. Vous pouvez utiliser de la TÊTE afin de le comparer avec le dernier commit, ou un nom de branche à comparer avec la pointe d'une branche différente." Doncgit diff mybranch -- myfile.cs
permettra de comparer le répertoire de travail de l'myfile.cs
avec ce fichier dansmybranch
.mybranch
etmaster
sont des branches locales.master
direction générale: a Eu quelques problèmes, mais pour résoudre facilement quec:\>git diff c:\<FULL_PATH_TO_MY_BRANCH>..master /<relative_path of my file - as shown by git diff --name-status master>
. C'était plus pratique que j'ai eu plusieurs fichiers et je pourrais simplement utiliser la touche flèche pour ramener la commande précédente et collez simplement le chemin relatif du fichier suivant à partir de la sortie degit diff --name-status
. Son meilleur que l'autre option prévoyant chemin d'accès complet du fichier tel qu'il serait difficile de modifier le chemin d'accès au fichier à chaque fois par rapport à plein.Vous pouvez faire ceci:
git diff branch1:path/to/file branch2:path/to/file
Si vous avez difftool configuré, vous pouvez également:
git difftool branch1:path/to/file branch2:path/to/file
Liés à la question:
Comment puis-je voir git diff de sortie de visual diff programme
branch1:./file
). C'est aussi utile si le fichier est dans un emplacement séparé entre les branches (par exemple,git diff branch1:old/path/to/file branch2:new/path/to/file
).git diff branch1 branch2 path/to/file
./
séparateur de chemin restegit diff
en silence ne fait rien.Plus moderne de la syntaxe:
git diff ..master path/to/file
Le double-point préfixe signifie "à partir du répertoire de travail en cours d'". Vous pouvez aussi dire:
master..
, c'est à dire l'inverse de ci-dessus. C'est le même quemaster
.mybranch..master
, explicitement référence à un état autre que l'actuel arbre de travail.v2.0.1..master
, c'est à dire le référencement d'un tag.[refspec]..[refspec]
, fondamentalement quelque chose identifiable comme un code d'état de git.Il existe de nombreux moyens pour comparer des fichiers à partir de deux branches différentes:
Option 1: Si vous voulez comparer le fichier à partir de n spécifique de la branche à l'autre branche spécifique:
Exemple:
Option 2: manière Simple:
Exemple:
Option 3: Si vous voulez comparer votre répertoire de travail en cours à quelques de la direction de la
Exemple:
Je n'ai tout simplement
git diff branch1 branch2 path/to/file
Ce vérifie les différences entre les fichiers. Les changements dans
branch1
serait dans le rouge. Les changements dansbranch2
serait en vert.Il est supposé que les
branch1
est le passé etbranch2
est l'avenir. Vous pouvez inverser cette en inversant l'ordre des branches dans le diff:git diff branch2 branch1
D'accord avec la réponse proposée par @dahlbyk. Si vous souhaitez que le diff à être écrit dans un fichier diff pour les revues de code, utilisez la commande suivante.
Si vous souhaitez faire un diff à contre courant de la branche, vous pouvez omettre et de l'utiliser:
git diff BRANCH -- path/to/file
de cette manière, il sera diff de actuelles de la direction générale de référence de la branche (BRANCHE).
Dans mon cas, j'utilise la commande ci-dessous:
Cette commande peut vous aider à comparer même fichier dans deux branches différentes
Utilisation commettre des hachages comme ceci:
où hash1 peut être tout engageons à partir de n'importe quelle branche, le même pour hash2.
La meilleure façon de le faire est par l'utilisation de
git diff
de la façon suivante:git diff <source_branch> <target_branch> -- file_path
Elle permet de vérifier la différence entre les fichiers dans ces branches. Jetez un oeil à cet article pour plus d'informations sur commandes git et comment ils fonctionnent.
Afin de comparer deux fichiers dans le git bash, vous devez utiliser la commande:
Cette commande affiche la différence entre les deux fichiers dans le bash.
Il y a deux scénarios pour comparer des fichiers:
Scénario 1: Comparer des fichiers à distance des branches (les deux branches devraient existe sur le dépôt distant)
Scénario 2: Comparer les fichiers locaux (au niveau local zone de travail de copie) pour les fichiers au dépôt distant.
La logique est simple. Si vous fournissez des deux noms de branche du diff, il sera toujours comparer les branches distantes, et si vous ne fournir qu'un seul nom de la branche, il sera toujours comparer votre copie de travail locale avec la télécommande du repo (celui que vous avez fournies. Vous pouvez utiliser la gamme à fournir des dépôts distants.
par exemple commander une branche
dans ce cas, si vous fournissez un nom de fichier, il va comparer votre copie locale de nom de fichier à distance branche nommée "(sesc) 2".
dans ce cas, il va comparer le nom de fichier à partir de branches distantes nommé "branch1" vs "(sesc) 2"
dans ce cas également, il va comparer le nom de fichier à partir de branches distantes nommé "branch1" vs "(sesc) 2". Donc, ses mêmes que ci-dessus. Cependant, si vous venez de créer une branche à partir d'une autre branche, dire "maître" et de votre branche n'existe pas sur le dépôt distant, il le compare à distance "maître" vs distance "(sesc) 2".
L'espérance de son utilité.