Voir Le Git Non Lavé Commet

Comment puis-je voir les propagations locales que j'ai faites et qui n'ont pas encore été déplacées vers le dépôt distant? De temps en temps, git status affichera que ma branche est X engage avant origin/master , mais pas toujours.

est-ce un bug avec mon installation de Git, ou est-ce que je manque quelque chose?

1383
demandé sur Nick Volynkin 2010-01-07 01:41:15

24 réponses

git log origin/master..HEAD

vous pouvez également voir la différence en utilisant la même syntaxe

git diff origin/master..HEAD
1434
répondu Peter B 2011-12-21 12:03:50

si vous voulez voir tous les commits sur toutes les branches qui ne sont pas encore poussées, vous pourriez être à la recherche de quelque chose comme ceci:

git log --branches --not --remotes

et si vous voulez seulement voir le plus récent commit sur chaque branche, et les noms des branches, ceci:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
611
répondu cxreg 2012-07-24 01:14:16

, Vous pouvez afficher tous les commits que vous avez en local, mais pas en amont avec

git log @{u}..

@{u} ou @{upstream} signifie en amont de la direction générale de la branche courante (voir git rev-parse --help ou git help revisions pour plus de détails).

267
répondu Ben Lings 2013-11-06 14:20:28

cela a fonctionné pour moi:

git cherry -v 

comme indiqué à Git: voir toutes les propagations Non écrasées qui ne sont pas dans une autre branche .

127
répondu Christian Vielma 2014-07-01 00:55:45

vous pouvez le faire avec git log :

git log origin..

suppose que origin est le nom de votre amont, laissant de côté tout nom de révision après .. implique HEAD , qui liste les nouvelles propagations qui n'ont pas été poussées.

55
répondu Greg Hewgill 2010-01-06 22:46:35

Pratique git alias pour la recherche de unpushed s'engage dans actuel "151940920 de succursale":

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

ce Que cela fait:

git log origin/branch..branch

mais détermine également le nom de la branche courante.

36
répondu takeshin 2016-01-27 12:41:55

vous pourriez essayer....

gitk

je sais que ce n'est pas une option en ligne de commande pure mais si vous l'avez installé et sont sur un système GUI c'est une excellente façon de voir exactement ce que vous recherchez plus beaucoup plus.

(je suis en fait un peu surpris que personne ne l'ait mentionné jusqu'à présent.)

32
répondu Justin Ohms 2014-01-27 21:04:33

toutes les autres réponses parlent de" en amont " (la branche d'où vous sortez).

Mais une branche locale peut push à une branche différente que celle qu'il tire.

master pourrait ne pas pousser pour le suivi à distance de la branche " origin/master ".

La branche en amont pour master pourrait être origin/master , mais il pourrait pousser à la branche de suivi à distance origin/xxx ou même anotherUpstreamRepo/yyy .

Ceux-ci sont définis par branch.*.pushremote pour la branche courante avec la valeur global remote.pushDefault .

Il est que "1519360920 à distance" suivi de la branche qui compte lorsque l'on cherche unpushed s'engage: celui qui suit le branch at the remote où le succursale serait poussée à.

Le branch at the remote peut être, encore une fois, origin/xxx ou même anotherUpstreamRepo/yyy .

Git 2.5+ (T2 2015) introduit un nouveau raccourci pour ce: <branch>@{push}

Voir commettre 29bc885 , commettre 3dbe9db , commettre adfe5d0 , commettre 48c5847 , commettre a1ad0eb , commettre e291c75 , commit 979cb24 , commettre 1ca41a1 , commettre 3a429d0 , commettre a9f9f8c , commettre 8770e6f , commettre da66b27 , commettre f052154 , commettre 9e3751d , commettre ee2499f [tous à partir du 21 Mai 2015], et commettre e41bf35 [01 Mai 2015] par Jeff King ( peff ) .

(fusionné par Junio CA Hamano -- gitster -- dans commit c4a8354 , 05 juin 2015)

Commettre adfe5d0 , explique:

sha1_name : implémenter @{push} shorthand

dans un flux de travail triangulaire, chaque branche peut avoir deux points d'intérêt: le @{upstream} que vous tirez normalement, et la destination que vous poussez normalement. Il n'y a pas de raccourci pour ce dernier, mais c'est utile de l'avoir.

par exemple, vous voudrez peut-être savoir ce qui s'engage vous n'avez pas poussé encore :

git log @{push}..

ou comme un exemple plus compliqué, imaginez que vous tirez normalement des changements de origin/master (que vous défini comme votre @{upstream} ), et de pousser les changements à votre propre fourche personnelle (par exemple, comme myfork/topic ).

Vous pouvez pousser à votre fourche à partir de plusieurs machines, ce qui vous oblige à intégrer les changements à partir de la destination de la poussée, plutôt qu'en amont .

Avec ce patch, vous pouvez simplement faire:

git rebase @{push}

plutôt que de taper le nom complet.

Commettre 29bc885 , ajoute:

for-each-ref : accepter" %(push) "format

tout comme nous avons " %(upstream) , de "signaler" @{upstream} "pour chaque ref, ce patch ajoute" %(push) "" @{push} ".

Il supporte les mêmes modificateurs de format de tracking qu'en amont (parce que vous pouvez vouloir savoir, par exemple, qui les branches doivent s'engager à appuyer sur ).

si vous voulez voir combien de commit vos branches locales sont devant/derrière par rapport à la branche que vous poussez à:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
31
répondu VonC 2017-02-03 11:13:20

git branch -v indiquera, pour chaque succursale locale, si elle est" en avance " ou non.

25
répondu Aurelien 2015-06-20 11:08:11

j'utilise l'alias suivant pour obtenir juste la liste des fichiers (et le statut) qui ont été engagés mais n'ont pas été poussés (pour la branche courante)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

puis il suffit de faire:

git unpushed
20
répondu CCC 2014-07-01 00:55:06

je crois que la façon la plus typique de faire ceci est de courir quelque chose comme:

git cherry --abbrev=7 -v @{upstream}

cependant, je préfère personnellement courir:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

qui montre les commits de toutes branches qui ne sont pas fusionnées en amont, plus le dernier commit en amont (qui apparaît comme un noeud racine pour toutes les autres commits). Je l'utilise si souvent que j'ai créé alias noup pour elle.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
11
répondu Giorgos Kylafas 2014-07-01 00:56:23

je vous suggère d'aller voir le script https://github.com/badele/gitcheck , j'ai codé ce script pour vérifier en un seul passage tous vos dépôts git, et qui n'a pas commis et qui n'a pas poussé/tiré.

voici un exemple de résultat enter image description here

9
répondu Bruno Adelé 2013-04-27 12:27:41
git cherry -v

cela affichera l'historique de vos commentaires locaux (pas encore poussé) avec le message correspondant

8
répondu adswebwork 2015-03-11 18:48:11

ce n'est pas un bug. Ce que vous voyez probablement est le statut git après une auto-fusion ratée où les modifications de la télécommande sont récupérées mais pas encore fusionnées.

pour voir les commits entre Local repo et remote faites ceci:

git fetch

c'est 100% sûr et ne va pas simuler votre copie de travail. S'il y avait des changements git status affichera X commits ahead of origin/master .

vous pouvez maintenant afficher le log des propagations qui sont dans la télécommande mais pas dans le local:

git log HEAD..origin
7
répondu Igor Zevaka 2010-01-06 22:47:11

il y a un outil nommé unpushed qui scanne toutes les réponses Git, Mercurial et Subversion dans le répertoire de travail spécifié et affiche la liste des fichiers ucommitted et des propagations unpushed. L'Installation est simple sous Linux:

$ easy_install --user unpushed

ou

$ sudo easy_install unpushed

pour installer à l'échelle du système.

L'Usage est simple aussi:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

voir unpushed --help ou description officielle pour plus d'informations. Il a également un script cronjob unpushed-notify pour la notification à l'écran des changements non engagés et non effacés.

7
répondu nailgun 2012-04-26 18:12:52

cela a mieux fonctionné pour moi:

git log --oneline @{upstream}..

ou:

git log --oneline origin/(remotebranch)..
6
répondu VaTo 2015-06-17 18:20:09

pour lister tous les commit dans toutes les branches vous pouvez facilement utiliser cette commande:

 git log --branches  @{u}..
4
répondu Mohsen Kashi 2015-05-20 08:59:54

j'ai fait faire un commit auparavant, non poussé à aucune branche, ni distant ni local. Juste le commettre. Rien dans les autres réponses n'a fonctionné pour moi, mais avec:

git reflog

J'y ai trouvé mon commit.

4
répondu Olaia 2018-02-21 06:32:08

si le nombre de propagations qui n'ont pas été supprimées est un nombre à un chiffre, ce qui est souvent le cas, la manière la plus simple est:

$ git checkout

git répond en vous disant que vous êtes" en avant n commits " relative à votre origine. Donc maintenant, gardez juste ce nombre à l'esprit lors de la lecture des journaux. Si vous êtes "en avance sur 3 commits", les 3 premiers commits de l'histoire sont toujours privés.

3
répondu Kaz 2014-05-01 19:49:42

Similaires: vue dissociées des branches:

git branch --all --no-merged

ceux-ci peuvent être suspects mais je recommande la réponse par cxreg

3
répondu Christophe Roussy 2015-03-31 14:01:28

une façon de faire les choses est de lister les commits qui sont disponibles sur une branche mais pas sur une autre.

git log ^origin/master master
0
répondu Alex 2015-11-04 13:18:17

voici ma solution portable (script shell qui fonctionne sur Windows aussi sans installation supplémentaire) qui montre les différences d'origine pour toutes les branches: git-fetch-log

un exemple de sortie:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit
Les paramètres

transmis pour log, p.ex. --oneline ou --patch peuvent être utilisés.

0
répondu bimlas 2017-05-25 06:51:40
git show

affichera tous les diffs de vos propagations locales.

git show --name-only

affichera l'id de commit local et le nom de commit.

-2
répondu user2387567 2014-06-30 21:13:18
git diff origin

en supposant que votre branche est configurée pour suivre l'origine, alors cela devrait vous montrer les différences.

git log origin

vous donnera un résumé des commits.

-4
répondu mopoke 2010-01-06 22:46:17