web-dev-qa-db-fra.com

Comment comparer une branche git locale avec sa branche distante?

Comment voir la diff entre une branche locale et une branche distante?

829
mrblah

Pour mettre à jour les branches de suivi à distance, vous devez d'abord taper git fetch, puis:

git diff <masterbranch_path> <remotebranch_path>

Vous pouvez git branch -a pour répertorier 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 la branche principale locale et "Origine/maître" est une télécommande, à savoir origine et branche principale.)

393
meder omuraliev
git diff <local branch> <remote>/<remote branch>

Par exemple git diff master Origin/master ou git diff featureA Origin/next

Bien sûr, pour avez dit branche de suivi à distance, vous devez d'abord git fetch; et vous en avez besoin pour avoir des informations à jour sur les branches dans le référentiel distant.

1229
Jakub Narębski

Premier type

git branch -a

pour obtenir la liste des branches disponibles. 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

Puis montrer le diff

git diff --stat --color remotes/main/master..Origin/master
git diff remotes/main/master..Origin/master
167
YSN

Si vous êtes sur une branche donnée et que vous souhaitez la comparer à une branche en amont que vous suivez, utilisez

git diff @{upstream}

Avec l'aimable autorisation de cette réponse , la documentation git pour spécifiant les révisions a:

<branchname>@{upstream}, par exemple master@{upstream}, @{u}
Le suffixe @{upstream} à un nom de branche (forme abrégée <branchname>@{u}) fait référence à la branche sur laquelle la branche spécifiée par branchname est configurée pour s'appuyer sur top of (configuré avec branch.<name>.remote et branch.<name>.merge) . La valeur par défaut branchname est la valeur actuelle.

92
Andrew Grimm

Je comprends beaucoup mieux la sortie de:

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

cela me montre ce qui va être abandonné et ce qui va être ajouté si je pousse la branche locale. Bien sûr, c'est la même chose, à l'inverse, mais pour moi, c'est plus lisible et je suis plus à l'aise pour regarder ce qui va se passer.

42
manfer

Le moyen le plus simple:

git fetch
git log -p HEAD..FETCH_HEAD

Cela va d'abord récupérer les modifications depuis votre télécommande par défaut (Origin). Cela sera créé automatiquement lorsque vous clonerez un repo. Vous pouvez également être explicite: git fetch Origin master.

Ensuite, git log est utilisé pour comparer votre branche actuelle à celle qui vient d’être récupérée. (L'option -p (Générer le correctif) est ce qui montre le différences.) 

28
Brent Faust

Laissez votre branche active travailler sur le développement et souhaitez faire la différence entre une branche de développement locale et une branche de développement à distance. Dans ce cas, la syntaxe doit ressembler à git diff remotes/Origin/development..development
ou 

git fetch Origin git diff Origin/development 

11
Ratna Halder

C'est comme ça que je le fais.

#To update your local.
git fetch --all

cela va tout récupérer de la télécommande, donc lorsque 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>

cela comparera votre branche locale avec la branche distante

10
new_user

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

Lorsque j'utilise git sur Shell, j'aime bien m'orienter d'abord en regardant autour de moi. 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).

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

Remarque: les branches distantes du shell git bash sont affichées en rouge et les branches locales 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 afficher uniquement les branches locales, vous pourriez être tenté d'utiliser git branch -l, mais c'est une commande complètement différente. À afficher les branches locales _ utilisez git branch sans options

$ git branch
* my-branch 
  master

Pour compléter la révision des options de base des branches, il existe le --list qui, contrairement à ce que vous pourriez imaginer, autorise le filtrage. Utilisez-le avec un motif comme celui-ci:

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

Vous pouvez également combiner --list avec les options -a et -r mais veillez à adapter votre modèle en conséquence (rappelez-vous: les branches distantes commencent par "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

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

Maintenant, vous pouvez comparer deux branches quelconques parmi toutes les branches disponibles (vous pouvez également comparer deux sections locales ou deux télécommandes). 

Ici, je compare le local avec le my-branch distant, ils sont synchronisés, donc je n’obtiens aucune sortie:

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

Remarque: vous devez donner les noms complets des branches sans guillemets.

Je peux aussi comparer le my-branch local à la master distante. Ici, je reçois une sortie parce que le my-branch distant n’a pas été fusionné 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
[ . . . ]
8
user2314737

Voici une réponse abrégée si vous comparez votre branche actuelle et à 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 référence FETCH_HEAD. Ensuite, la deuxième commande utilise cette référence de comparaison par rapport à celle de votre branche actuelle.

7
William Entriken

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 elles.

Dans mon cas, j'ai une deuxième télécommande appelée heroku qui est pas la Origin et, comme 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 sur git fetch avant d'exécuter git diff, dans mon cas:

$ git fetch heroku
$ git diff master heroku/master

Espérons que cela aide les autres avec ce même problème.

6
fagiani

Si vous voulez voir la différence alors que seuls les noms des fichiers ont été modifiés, utilisez: 

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

sinon, cela montrerait toutes les différences entre les deux branches: 

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

5
git difftool <commit> .

Cela comparera le commit 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 commit:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.

(et vous n'avez pas besoin de chercher git, sauf si vous comparez avec de nouveaux commits)

4
Izik

Exemple

git diff 'master' 'testlocalBranch'

Si vous utilisez un éditeur comme Webstorm, vous pouvez cliquer avec le bouton droit sur le fichier, comparer avec branche et taper/sélectionner votre branche.

 enter image description here

 enter image description here

3
Kurkula

C'est assez simple. Vous pouvez utiliser: git diff remote/my_topic_branch my_topic_branch

my_topic_branch est votre branche de sujet.

0
Elisha Senoo

Installer

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

Diffing HEAD avec HEAD @ {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

Diffusion avec une branche distante arbitraire

Cela répond à la question dans votre rubrique ("sa télécommande"); si vous souhaitez utiliser une "distance" (qui n'est pas configurée en amont pour 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 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, effectuez un diff normal :)

git diff [MY_LOCAL] MY_REMOTE_BRANCH

0
DylanYoung

Je me demande s'il y a un changement dans mon master branche ...

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

maître de caisse

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

statut git

  1. Lister les branches

branche git -a

  • maîtriser
    télécommandes/origine/maître
  1. Trouvez les Différences

git diff Origine/maître

0
Ali Atakan

Supposons que vous avez déjà configuré votre Origin en tant que référentiel distant. Ensuite,

git diff <local branch> <Origin>/<remote branch name>

0
Tirtha

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 sur Git Sync.

Vous pouvez sélectionner vos branches à comparer si elles ne sont pas sélectionnées. Que vous pouvez voir les différences commettent. Vous pouvez également cliquer avec le bouton droit sur n'importe quel commit, puis sur Compare with previous revision pour afficher les différences côte à côte . tortoise git sync to compare remote and local branch

0