J'essayais à l'origine git diff HEAD origin/HEADce qui semble pointer vers une branche distante différente de celle que je voulais. L'utilisation du nom de branche complet fonctionne comme prévu.
Deanna
Réponses:
595
Pour mettre à jour les branches de suivi à distance, vous devez d' git fetchabord taper puis:
git diff <masterbranch_path> <remotebranch_path>
Vous pouvez git branch -alister toutes les branches (locales et distantes) puis choisir le nom de la branche dans la liste (il suffit de supprimer remotes/du nom de la branche distante.
Exemple: git diff master origin/master(où "maître" est une branche maître locale et "origine / maître" est une télécommande, à savoir l'origine et la branche maître.)
Il peut avoir besoin d'aller chercher avant ( git fetch)
Houssem Badri
Cela montre juste un aperçu des changements dans bash, est-il possible d'ouvrir toutes les modifications dans un code IDE comme VS?
Harsh Phoujdar
@Harsh Phoujdar Ajoutez le code ci-dessous dans votre fichier .git / .gitconfig [diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = falseAssurez-vous que votre chemin d'accès au fichier code.exe est correct.
Aman
1307
git diff <local branch> <remote>/<remote branch>
Par exemple git diff master origin/master, ougit diff featureA origin/next
Bien sûr, pour avoir ladite branche de suivi à distance, vous devez d' git fetchabord; et vous en avez besoin pour avoir des informations à jour sur les branches dans le référentiel distant.
pour être plus précis: git diff <branche locale> <télécommande> / <branche distante>
nalply
38
Je fais habituellement git diff <remote>/<remote branch> <local branch>pour voir ce que ma poussée fera au repo à distance.
Michał Tatarynowicz
76
Le plus court git diff originest suffisant si vous comparez avec votre branche en amont.
Ludder
12
veuillez ajouter git fetchau début, cela cause des ennuis à un débutant comme moi
Saif
1
Hé, n'est-ce pas git diff <remote>/<remote branch> <local branch>? Sinon, je reçois les ajouts et les suppressions activés sur mon ordinateur (git version 2.7.0.windows.2)
Martín Coll
183
Premier type
git branch -a
pour obtenir la liste des succursales disponibles. Sur la sortie, vous pouvez voir quelque chose comme
J'aurais certainement choisi cela comme réponse. En suivant vos instructions, j'ai pu voir les différences entre une branche locale et une branche distante. Merci!
Tass
1
Je fais habituellement ce git log origin/my_branch..qui prendra HEADcomme référence locale, ce qui est surtout ce que vous voulez dire.
Rudie
4
+1 pour la meilleure réponse à mon humble avis. Serait digne de +2 si vous avez mentionné "chercher" pour synchroniser l'image "distante" de la source clonée. L'étape de présentation des statistiques / couleurs est particulièrement utile.
bvj
3
Merci pour la seule réponse qui a finalement fonctionné sur les sept ou huit «réponses» qui ont abouti à un peu plus de fatal: bad revisionou fatal: ambiguous argument. Tout ce que je voulais, c'était voir le diff sur le même fichier d'une autre branche, était-ce trop demander? Oui, oui. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>fonctionne très bien sur git 1.8.3.1
Steve Bonds
144
Si vous êtes sur une branche donnée et que vous souhaitez la comparer avec une branche en amont que vous suivez, utilisez
git diff @{upstream}
si votre amont n'est pas défini (généralement le cas, merci Arijoon dans les commentaires)
<branchname>@{upstream}, par exemple master@{upstream}, @{u}
le suffixe
@{upstream}d'un nom de branche (forme courte <branchname>@{u}) fait référence à la branche que la branche spécifiée par branchnameest définie pour construire au-dessus (configurée avec branch.<name>.remoteet branch.<name>.merge). Une valeur par branchnamedéfaut manquante est celle actuelle.
Très bonne réponse manquant juste une petite partie. Changez la ligne en git diff @ @{upstream}. L'extra @est HEAD, qui est où vous êtes maintenant, donc vous comparez HEADavec l'amont que votre branche suit. Vous pouvez utiliser à la @{push}place de l'amont pour obtenir un différentiel entre la branche vers laquelle vous êtes configuré
Arijoon
3
meilleure réponse, ne nécessite pas d'aller chercher la télécommande. a besoin de plus de votes positifs!
jcomeau_ictx
3
En coquille de poisson , je suis arrivé résultat: fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree. J'ai dû utiliser à la git diff @\{upstream\}place. 😥
Landon Kuhn
Vous devez d' git fetchabord, sinon cela ne fait rien, n'affiche aucune sortie; testé en supprimant un fichier dans l'origine du référentiel et exécuté cette commande localement. ..fonctionne uniquement après la récupération.
En outre, comme la réponse donnée comprend tous les changements locaux. parfois cela est souhaité, d'autres fois non.
Deanna
44
Je comprends beaucoup mieux la sortie de:
git diff <remote-tracking branch> <local branch>
cela me montre ce qui va être supprimé et ce qui va être ajouté si je pousse la branche locale. Bien sûr, c'est la même chose, juste l'inverse, mais pour moi, c'est plus lisible et je suis plus à l'aise de regarder ce qui va se passer.
J'obtiens exactement le même résultat avec: git diff <branche locale> <branche de suivi à distance> ou git diff <branche de suivi à distance> <branche locale>
user2928048
32
La manière la plus simple:
git fetch
git log -p HEAD..FETCH_HEAD
Cela va d'abord récupérer les modifications de votre télécommande par défaut (origine). Cela sera créé automatiquement lorsque vous clonerez un dépôt. Vous pouvez également être explicite: git fetch origin master.
Ensuite, git log est utilisé pour comparer votre branche actuelle avec celle qui vient d'être récupérée. (L' -poption (générer un patch) est ce qui montre les différences .)
git fetch --all va tout récupérer de TOUTES les télécommandes. git fetch devrait être suffisant si vous utilisez la télécommande d'origine par défaut.
Christophe Keller
Étonnant qu'après 8 ans, nous obtenions une réponse complète qui explique correctement les étapes. Nous pouvons faire un --help pour obtenir les commandes. Il s'agit donc de les comprendre.
gdbj
11
Laissez votre branche de travail est le développement et souhaitez faire la différence entre la branche de développement local et la branche de développement à distance, dans ce cas, la syntaxe devrait être comme git diff remotes/origin/development..development
ou
Ici , j'ai deux branches locales ( my-branchet master) et 4 à distance ( some-branch, some-other-branch,master etmy-branch ).
De plus, l'astérisque à côté my-branchsignale le fait que je suis actuellement dans cette branche (vous le savez également en utilisant la commande git statusqui afficherait:) On branch my-branch..
Remarque: les branches distantes dans le shell git bash sont affichées en rouge tandis que les branches locales sont affichées en vert.
Si vous souhaitez simplement afficher les branches distantes :
Pour afficher uniquement les branches locales, vous pourriez être tenté d'utiliser, git branch -lmais c'est une commande complètement différente. Pour afficher les succursales locales à utiliser git branchsans options
$ git branch
* my-branch
master
Pour terminer un examen des options de branche de base, il y a le --listcontraire à ce que vous pourriez attendre est de permettre le filtrage . Utilisez-le avec un motif comme celui-ci:
$ git branch --list 'my*'
* my-branch
Vous pouvez également combiner --listavec les options -aet -rassurez-vous d'adapter votre modèle en conséquence ( rappelez-vous: les branches distantes commencent par des "télécommandes" ). Exemple:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
Maintenant vous pouvez comparer deux branches parmi toutes les branches disponibles (vous pouvez également comparer deux sections locales ou deux télécommandes).
Ici, je compare le local avec le distant my-branch, ils sont synchronisés, donc je ne reçois aucune sortie:
$ git diff my-branch remotes/origin/my-branch
Remarque: vous devez donner le nom complet des branches sans guillemets.
Je peux également comparer le local my-branchà la télécommande master. Ici, j'obtiens une sortie car la télécommande my-branchn'a pas été fusionnée dans la branche principale.
Voici une réponse abrégée si vous comparez votre branche actuelle à quelque chose que vous souhaitez git pull.
git fetch
git diff FETCH_HEAD
La première commande déterminera quelle branche distante correspond à votre branche actuelle. Un artefact de ce calcul dans la FETCH_HEADréférence. Ensuite, la deuxième commande utilise cette référence par rapport à celle de votre branche actuelle.
Je sais qu'il y a déjà plusieurs réponses à cette question, mais j'obtenais une erreur étrange en essayant la plupart d'entre elles.
Dans mon cas, j'ai une deuxième télécommande appelée herokuqui n'est pas le originet parce qu'elle n'était pas synchronisée, j'ai eu cette erreur en essayant d'exécuter le git diff master heroku/master:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
ou ceci en essayant l'autre approche git diff master..heroku/master:
fatal: bad revision 'master..heroku/master'
La solution mentionnait explicitement le nom distant git fetchavant de s'exécuter git diff, dans mon cas:
Je pense que c'est intéressant parce que c'est une comparaison que je peux faire avant de valider et de pousser. Malheureusement, dans Windows, vimdiff pour montrer est moche; existe-t-il un moyen d'utiliser quelque chose de mieux, comme notepad ++?
Stefano Scarpanti
3
Exemple
git diff 'master' 'testlocalBranch'
Si vous utilisez un éditeur comme webstorm, vous pouvez cliquer avec le bouton droit sur le fichier sélectionner comparer avec la branche et taper / sélectionner votre branche.
Qu'est-ce que cela ajoute à la réponse acceptée de 7,5 ans avec plus de 170 votes positifs?
Mark Rotteveel
C'est pour mrblah l'utilisateur ou pour des utilisateurs similaires qui ont ajouté un commentaire pour la réponse acceptée. La syntaxe est différente d'un exemple et l'exemple aide davantage du point de vue du débutant.
Kurkula
2
Dans ce cas, cela devrait être en commentaire de cette réponse.
rachit
1
Dans VS 2019, faites simplement FETCH Ne tirez pas de code.
C'est ce que j'ai fait. Ajouté ci-dessous dans le fichier .gitconfig pour que je puisse utiliser Beyond Compare
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
Différence avec une branche distante arbitraire
Cela répond à la question dans votre rubrique ("sa télécommande"); si vous voulez faire une différence avec "une télécommande" (qui n'est pas configurée en amont de la branche), vous devez la cibler directement. Vous pouvez voir toutes les branches distantes avec les éléments suivants:
git branch -r
Vous pouvez voir toutes les télécommandes configurées avec les éléments suivants:
git remote show
Vous pouvez voir la configuration de branchement / suivi pour une seule télécommande (par exemple l'origine) comme suit:
git remote show origin
Une fois que vous avez déterminé la branche d'origine appropriée, faites simplement un diff normal :)
En supposant que vous souhaitez différencier vos succursales locales actuelles par HEADrapport à l'origine. Et en supposant que vous êtes sur la branche locale. :)
Si vous utilisez TortoiseGit (il fournit une interface graphique pour Git), vous pouvez cliquer avec le bouton droit sur votre dossier de dépôt Git puis cliquer Git Sync.
Vous pouvez sélectionner vos succursales à comparer si elles ne sont pas sélectionnées. Que vous pouvez afficher les différences de validation. Vous pouvez également cliquer avec le bouton droit sur un commit, puis Compare with previous revisionafficher les différences côte à côte.
git diff HEAD origin/HEAD
ce qui semble pointer vers une branche distante différente de celle que je voulais. L'utilisation du nom de branche complet fonctionne comme prévu.Réponses:
Pour mettre à jour les branches de suivi à distance, vous devez d'
git fetch
abord taper puis:Vous pouvez
git branch -a
lister toutes les branches (locales et distantes) puis choisir le nom de la branche dans la liste (il suffit de supprimerremotes/
du nom de la branche distante.Exemple:
git diff master origin/master
(où "maître" est une branche maître locale et "origine / maître" est une télécommande, à savoir l'origine et la branche maître.)la source
git fetch
)[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
Assurez-vous que votre chemin d'accès au fichier code.exe est correct.Par exemple
git diff master origin/master
, ougit diff featureA origin/next
Bien sûr, pour avoir ladite branche de suivi à distance, vous devez d'
git fetch
abord; et vous en avez besoin pour avoir des informations à jour sur les branches dans le référentiel distant.la source
git diff <remote>/<remote branch> <local branch>
pour voir ce que ma poussée fera au repo à distance.git diff origin
est suffisant si vous comparez avec votre branche en amont.git fetch
au début, cela cause des ennuis à un débutant comme moigit diff <remote>/<remote branch> <local branch>
? Sinon, je reçois les ajouts et les suppressions activés sur mon ordinateur (git version 2.7.0.windows.2)Premier type
pour obtenir la liste des succursales disponibles. Sur la sortie, vous pouvez voir quelque chose comme
Ensuite, montrez le diff
la source
...
plutôt que..
?git log origin/my_branch..
qui prendraHEAD
comme référence locale, ce qui est surtout ce que vous voulez dire.fatal: bad revision
oufatal: ambiguous argument
. Tout ce que je voulais, c'était voir le diff sur le même fichier d'une autre branche, était-ce trop demander? Oui, oui. :-)git diff remotes/origin/<base branch> <current branch> -- <filename>
fonctionne très bien sur git 1.8.3.1Si vous êtes sur une branche donnée et que vous souhaitez la comparer avec une branche en amont que vous suivez, utilisez
si votre amont n'est pas défini (généralement le cas, merci Arijoon dans les commentaires)
Gracieuseté de cette réponse , la documentation git pour spécifier les révisions a:
la source
git diff @ @{upstream}
. L'extra@
estHEAD
, qui est où vous êtes maintenant, donc vous comparezHEAD
avec l'amont que votre branche suit. Vous pouvez utiliser à la@{push}
place de l'amont pour obtenir un différentiel entre la branche vers laquelle vous êtes configuréfatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. J'ai dû utiliser à lagit diff @\{upstream\}
place. 😥git fetch
abord, sinon cela ne fait rien, n'affiche aucune sortie; testé en supprimant un fichier dans l'origine du référentiel et exécuté cette commande localement. ..fonctionne uniquement après la récupération.Je comprends beaucoup mieux la sortie de:
git diff <remote-tracking branch> <local branch>
cela me montre ce qui va être supprimé et ce qui va être ajouté si je pousse la branche locale. Bien sûr, c'est la même chose, juste l'inverse, mais pour moi, c'est plus lisible et je suis plus à l'aise de regarder ce qui va se passer.
la source
La manière la plus simple:
Cela va d'abord récupérer les modifications de votre télécommande par défaut (origine). Cela sera créé automatiquement lorsque vous clonerez un dépôt. Vous pouvez également être explicite:
git fetch origin master
.Ensuite, git log est utilisé pour comparer votre branche actuelle avec celle qui vient d'être récupérée. (L'
-p
option (générer un patch) est ce qui montre les différences .)la source
Voilà comment je le fais.
cela récupérera tout de la télécommande, donc lorsque vous vérifiez la différence, il comparera la différence avec la branche distante.
la commande ci-dessus affichera toutes les branches.
Maintenant, vous pouvez vérifier la différence comme suit.
cela permettra de comparer votre succursale locale avec la succursale distante
la source
Laissez votre branche de travail est le développement et souhaitez faire la différence entre la branche de développement local et la branche de développement à distance, dans ce cas, la syntaxe devrait être comme
git diff remotes/origin/development..development
ou
git fetch origin git diff origin/development
la source
tl; dr :
git diff <local branch> <remote branch>
Lorsque j'utilise git sur la coque, j'aime d'abord m'orienter en regardant autour. Voici une commande pour afficher toutes les branches
Ici , j'ai deux branches locales (
my-branch
etmaster
) et 4 à distance (some-branch
,some-other-branch
,master
etmy-branch
).De plus, l'astérisque à côté
my-branch
signale le fait que je suis actuellement dans cette branche (vous le savez également en utilisant la commandegit status
qui afficherait:)On branch my-branch.
.Remarque: les branches distantes dans le shell git bash sont affichées en rouge tandis que les branches locales sont affichées en vert.
Si vous souhaitez simplement afficher les branches distantes :
Pour afficher uniquement les branches locales, vous pourriez être tenté d'utiliser,
git branch -l
mais c'est une commande complètement différente. Pour afficher les succursales locales à utilisergit branch
sans optionsPour terminer un examen des options de branche de base, il y a le
--list
contraire à ce que vous pourriez attendre est de permettre le filtrage . Utilisez-le avec un motif comme celui-ci:Vous pouvez également combiner
--list
avec les options-a
et-r
assurez-vous d'adapter votre modèle en conséquence ( rappelez-vous: les branches distantes commencent par des "télécommandes" ). Exemple:Documents: https://git-scm.com/docs/git-branch
Maintenant vous pouvez comparer deux branches parmi toutes les branches disponibles (vous pouvez également comparer deux sections locales ou deux télécommandes).
Ici, je compare le local avec le distant
my-branch
, ils sont synchronisés, donc je ne reçois aucune sortie:Remarque: vous devez donner le nom complet des branches sans guillemets.
Je peux également comparer le local
my-branch
à la télécommandemaster
. Ici, j'obtiens une sortie car la télécommandemy-branch
n'a pas été fusionnée dans la branche principale.la source
Si vous voulez voir la différence que seulement les noms des fichiers modifiés puis utilisez:
git diff --name-status <remote-branch> <local-branch>
, d'autre cela montrerait les différences entre les deux branches:
git diff <remote-branch> <local-branch>
la source
Voici une réponse abrégée si vous comparez votre branche actuelle à quelque chose que vous souhaitez
git pull
.La première commande déterminera quelle branche distante correspond à votre branche actuelle. Un artefact de ce calcul dans la
FETCH_HEAD
référence. Ensuite, la deuxième commande utilise cette référence par rapport à celle de votre branche actuelle.la source
Je sais qu'il y a déjà plusieurs réponses à cette question, mais j'obtenais une erreur étrange en essayant la plupart d'entre elles.
Dans mon cas, j'ai une deuxième télécommande appelée
heroku
qui n'est pas leorigin
et parce qu'elle n'était pas synchronisée, j'ai eu cette erreur en essayant d'exécuter legit diff master heroku/master
:fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
ou ceci en essayant l'autre approche
git diff master..heroku/master
:fatal: bad revision 'master..heroku/master'
La solution mentionnait explicitement le nom distant
git fetch
avant de s'exécutergit diff
, dans mon cas:J'espère que cela aide les autres avec ce même problème.
la source
Cela comparera le commit que vous souhaitez avec vos fichiers locaux. N'oubliez pas le point à la fin (pour le local).
Par exemple, pour comparer vos fichiers locaux avec certains commit:
(et vous n'avez pas besoin de git fetch, sauf si une comparaison avec de nouveaux commits est nécessaire)
la source
Exemple
Si vous utilisez un éditeur comme webstorm, vous pouvez cliquer avec le bouton droit sur le fichier sélectionner comparer avec la branche et taper / sélectionner votre branche.
la source
Dans VS 2019, faites simplement FETCH Ne tirez pas de code.
C'est ce que j'ai fait. Ajouté ci-dessous dans le fichier .gitconfig pour que je puisse utiliser Beyond Compare
Ajouté ci-dessous
Ouvrez l'invite de commande et accédez au répertoire de travail. J'ai donné ci-dessous pour comparer la branche DEV locale à la branche DEV distante
Cela ouvrira Beyond Compare et ouvrira des répertoires contenant des fichiers différents. Si aucun changement, Beyond Compare ne démarre pas.
la source
Je me demande est - il au sujet de changement de mon maître branche ...
la source
Installer
git config alias.udiff 'diff @{u}'
Différence HEAD avec HEAD @ {upstream}
Différence avec une branche distante arbitraire
Cela répond à la question dans votre rubrique ("sa télécommande"); si vous voulez faire une différence avec "une télécommande" (qui n'est pas configurée en amont de la branche), vous devez la cibler directement. Vous pouvez voir toutes les branches distantes avec les éléments suivants:
git branch -r
Vous pouvez voir toutes les télécommandes configurées avec les éléments suivants:
git remote show
Vous pouvez voir la configuration de branchement / suivi pour une seule télécommande (par exemple l'origine) comme suit:
git remote show origin
Une fois que vous avez déterminé la branche d'origine appropriée, faites simplement un diff normal :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
la source
C'est assez simple. Vous pouvez utiliser:
git diff remote/my_topic_branch my_topic_branch
Où
my_topic_branch
est votre branche thématique.la source
Supposons que vous ayez déjà configuré votre
origin
comme référentiel distant. Alors,git diff <local branch> <origin>/<remote branch name>
la source
essayer:
En supposant que vous souhaitez différencier vos succursales locales actuelles par
HEAD
rapport à l'origine. Et en supposant que vous êtes sur la branche locale. :)la source
Si vous utilisez TortoiseGit (il fournit une interface graphique pour Git), vous pouvez cliquer avec le bouton droit sur votre dossier de dépôt Git puis cliquer
Git Sync
.Vous pouvez sélectionner vos succursales à comparer si elles ne sont pas sélectionnées. Que vous pouvez afficher les différences de validation. Vous pouvez également cliquer avec le bouton droit sur un commit, puis
Compare with previous revision
afficher les différences côte à côte.la source