Comment comparer une branche git locale avec sa branche distante?

Comment puis-je voir le diff entre une succursale et une branche distante?

778
git
demandé sur Flip 2009-11-26 02:58:17

16 réponses

pour mettre à jour les branches de suivi à distance, vous devez taper git fetch en premier et ensuite:

git diff <masterbranch_path> <remotebranch_path>

vous pouvez git branch -a pour lister toutes les branches (locales et distantes) choisissez ensuite 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ù "master" est la branche principale locale et "origin/master" est une branche distante à savoir origin et master.)

331
répondu meder omuraliev 2018-04-25 18:39:08
git diff <local branch> <remote>/<remote branch>

par exemple git diff master origin/master , ou git diff featureA origin/next

bien sûr à ont dit branche de suivi à distance vous avez besoin de git fetch d'abord; et vous en avez besoin pour avoir des informations à jour sur les branches dans le dépôt à distance.

1204
répondu Jakub Narębski 2016-01-06 18:44:03

premier type

git branch -a

pour obtenir la liste des branches. Sur la sortie vous pouvez voir quelque chose comme

* master
  remotes/main/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mt
  remotes/upstream/master
  remotes/upstream/mt

alors afficher la diff

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
164
répondu YSN 2012-04-12 19:26:29

si vous êtes sur une branche donnée, et que vous voulez la comparer avec une branche amont que vous suivez, utilisez

git diff @{upstream}

avec l'aimable autorisation de cette réponse , le git de la documentation pour les spécification de révisions a:

<branchname>@{upstream} , p.ex. master@{upstream} , @{u}

Suffixe @{upstream} à un nom de branche (forme abrégée <branchname>@{u} ) se réfère à la branche que la branche spécifiée par branchname est définie pour construire sur top of (configuré avec branch.<name>.remote et branch.<name>.merge ). Un branchname manquant par défaut est celui de la version courante.

84
répondu Andrew Grimm 2017-05-23 12:18:29

je comprends beaucoup mieux la sortie de:

git diff <remote-tracking branch> <local branch>

qui 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 en regardant ce qui se passe.

40
répondu manfer 2011-04-14 19:38:26

la voie de La facilité:

git fetch
git log -p HEAD..FETCH_HEAD

cela va d'abord récupérer les modifications à partir de votre télécommande par défaut (origin). Ce sera créée automatiquement lorsque vous clonez un repo. Vous pouvez aussi être explicite: git fetch origin master .

puis git log est utilisé pour comparer votre branche actuelle avec celle que vous venez de récupérer. (L'option -p (generate patch) est ce qui montre les différences .)

27
répondu Brent Faust 2015-02-07 06:27:24

laissez votre branche de travail est le développement et voulez faire la différence entre la branche de développement local et la branche de développement à distance, ce cas, la syntaxe devrait être comme git diff remotes/origin/development..development

ou

git fetch origin git diff origin/development

10
répondu Ratna Halder 2015-02-05 06:24:05

C'est comme ça que je le fais.

#To update your local.
git fetch --all

cela va tout récupérer à partir de la télécommande, donc quand vous vérifiez la différence, il comparera la différence avec la branche distante.

#to list all branches
git branch -a

la commande ci-dessus affichera toutes les branches.

#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
    (or)
git status

Maintenant, vous pouvez vérifier la différence comme suit.

git diff origin/<branch_name>

ceci comparera votre branche locale avec la branche éloignée

10
répondu new_user 2017-02-21 06:27:17

Voici une réponse abrégée si vous comparez votre branche actuelle et à quelque chose que vous voulez git pull .

git fetch
git diff FETCH_HEAD

La première commande va déterminer à distance branche correspond à votre branche. Un artefact de ce calcul dans la référence FETCH_HEAD . Ensuite, la deuxième commande utilise cette référence comparer par rapport à ce que votre branche actuelle a.

8
répondu William Entriken 2017-06-07 17:38:21

tl; dr : git diff <local branch> <remote branch>

en utilisant git sur la coque, j'aime d'abord m'orienter en regardant autour. Voici une commande pour afficher toutes les branches

$ git branch -a  # (or git branch --all) 
* my-branch
  master
  remotes/origin/some-branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/my-branch
  remotes/origin/some-other-branch
  remotes/origin/master

Ici, j'ai deux branches locales ( my-branch et master ) et 4 à distance ( some-branch , some-other-branch , master , et my-branch ).

aussi, l'astérisque à côté de my-branch signale le fait que je suis actuellement dans cette branche (vous le sauriez aussi en utilisant la commande git status qui produirait: On branch my-branch. ).

Note: les branches distantes dans la coquille de git bash sont indiquées en rouge tandis que les branches locales sont indiquées en vert.

Si vous voulez juste afficher les branches distantes :

$ git branch -r # (or git branch --remotes)
  origin/some-branch
  origin/HEAD -> origin/master
  origin/my-branch
  origin/some-other-branch
  origin/master

pour ne montrer que les succursales locales vous pourriez être tenté d'utiliser git branch -l mais c'est complètement différent de commande. à afficher les succursales locales utiliser git branch sans option

$ git branch
* my-branch 
  master

pour compléter un examen des options de base de la branche il y a le --list qui contrairement à ce que vous pourriez attendre est là pour permettre filtrage . Utilisez - le avec un modèle comme celui-ci:

$ git branch --list 'my*'
* my-branch

vous pouvez aussi combinez --list avec les options -a et -r mais assurez-vous d'adapter votre modèle en conséquence ( rappelez-vous: les branches distantes commencent par" remotes " ). 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

Docs: https://git-scm.com/docs/git-branch

Maintenant vous pouvez comparer deux branches de toutes les branches disponibles (vous pouvez également comparer deux locaux ou deux télécommandes).

ici je compare le local avec la télécommande my-branch , ils sont synchronisés donc je ne reçois pas de sortie:

$ git diff my-branch remotes/origin/my-branch

Note: vous devez indiquer le nom complet des succursales sans guillemets.

je peux aussi comparer le local my-branch au distant master . Ici j'obtiens une sortie parce que la télécommande my-branch n'a pas été fusionnée dans la branche principale.

$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
   /*
    *  Function: doCall
[ . . . ]
7
répondu user2314737 2018-01-06 13:38:51

je sais qu'il y a déjà plusieurs réponses à cette question mais j'ai eu une erreur étrange en essayant la plupart d'entre eux.

dans mon cas j'ai une deuxième télécommande appelée heroku qui est et non le origin et 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 de ce en essayant de l'autre approche git diff master..heroku/master :

fatal: bad revision 'master..heroku/master'

la solution mentionnait explicitement le nom distant sur git fetch avant de lancer git diff , dans mon cas:

$ git fetch heroku
$ git diff master heroku/master

l'Espoir qui aide les autres avec cette même question.

6
répondu fagiani 2017-03-16 14:29:49

si vous voulez voir la différence comme juste les noms des fichiers changés puis utiliser:

git diff --name-status <remote-branch> <local-branch> ,

dans le cas contraire, cela montrerait toutes les différences entre les deux branches.:

git diff <remote-branch> <local-branch>

5
répondu Sarvesh Kesharwani 2016-11-02 08:11:59
git difftool <commit> .

ceci comparera la propagation que vous voulez avec vos fichiers locaux. N'oubliez pas le point à la fin (pour les locaux).

par exemple, Pour comparer vos fichiers locaux avec certains commettent:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341 .

(et vous n'avez pas besoin de git fetch, à moins que l'on compare à la nouvelle s'engage est nécessaire)

4
répondu Izik 2017-08-27 07:23:57

exemple

git diff 'master' 'testlocalBranch'

si vous utilisez editor comme webstorm, vous pouvez cliquer avec le bouton droit de la souris sur File select compare with branch et taper/select your branch.

enter image description here

enter image description here

3
répondu Kurkula 2017-10-05 18:00:13

Setup

git config alias.udiff 'diff @{u}'

Comparaison TÊTE à TÊTE@{en amont}

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

de Comparaison avec un Arbitraire à Distance de la Branche

cela répond à la question de votre rubrique ("sa télécommande"); si vous voulez faire une différence avec" une télécommande " (qui n'est pas configurée comme l'amont de la branche), vous devez la cibler directement. Vous pouvez voir toutes les branches distantes avec ce qui suit:

git branch -r

vous pouvez voir tous les télécommandes configurées avec ce qui suit:

git remote show

vous pouvez voir la configuration de branche/suivi pour une seule télécommande (par exemple origin) comme suit:

git remote show origin

une fois que vous avez déterminé la branche d'origine appropriée, faites juste une différence normale:)

git diff [MY_LOCAL] MY_REMOTE_BRANCH

0
répondu DylanYoung 2018-10-05 13:31:52

je me demande s'il y a un changement dans ma branche master ...

  1. tout d'abord, vous devez changer votre branche (si vous êtes déjà sous cette branche, vous n'avez pas besoin de faire cela!)

git checkout master

  1. vous pouvez voir quel fichier a été modifié sous votre branche principale par cette commande

git status

  1. énumérer les succursales

git branch-a

  • maître

    remotes/origin / master
  1. trouver les différences

git diff origin / master

-1
répondu Ali Atakan 2018-09-02 16:59:40