Comment voir la diff
entre une branche locale et une branche distante?
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.)
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.
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
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 exemplemaster@{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 parbranchname
est configurée pour s'appuyer sur top of (configuré avecbranch.<name>.remote
etbranch.<name>.merge
) . La valeur par défautbranchname
est la valeur actuelle.
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.
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.)
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
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
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
[ . . . ]
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.
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.
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>
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)
C'est assez simple. Vous pouvez utiliser: git diff remote/my_topic_branch my_topic_branch
Où my_topic_branch
est votre branche de sujet.
git config alias.udiff 'diff @{u}'
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
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
Je me demande s'il y a un changement dans mon master branche ...
maître de caisse
statut git
branche git -a
- maîtriser
télécommandes/origine/maître
git diff Origine/maître
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>
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 .