Comment comparer une branche git locale avec sa branche distante?
Comment puis-je voir le diff
entre une succursale et une branche distante?
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.)
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.
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
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 parbranchname
est définie pour construire sur top of (configuré avecbranch.<name>.remote
etbranch.<name>.merge
). Unbranchname
manquant par défaut est celui de la version courante.
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.
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 .)
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
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
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.
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
[ . . . ]
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.
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>
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)
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.
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
je me demande s'il y a un changement dans ma branche master ...
- 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
- vous pouvez voir quel fichier a été modifié sous votre branche principale par cette commande
git status
- énumérer les succursales
git branch-a
- maître
remotes/origin / master
- trouver les différences
git diff origin / master