web-dev-qa-db-fra.com

Affichage des commits Git non compressés

Comment puis-je afficher les commits locaux que j'ai faits et qui n'ont pas encore été placés dans le référentiel distant? De temps en temps, git status indiquera que ma branche est X valide avant Origin/master, mais pas toujours.

Est-ce un problème avec mon installation de Git ou est-ce que quelque chose me manque?

1591
Josh Buhler
git log Origin/master..HEAD

Vous pouvez également afficher le diff en utilisant la même syntaxe

git diff Origin/master..HEAD
1655
Peter B

Si vous voulez voir tous les commits sur toutes les branches qui ne sont pas encore poussées, vous pouvez rechercher quelque chose comme ceci:

git log --branches --not --remotes

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

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
654
cxreg

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

_git log @{u}..
_

_@{u}_ ou _@{upstream}_ désigne la branche en amont de la branche actuelle (voir git rev-parse --help ou git help revisions pour plus de détails).

297
Ben Lings

Cela a fonctionné pour moi:

git cherry -v 

Comme indiqué à la rubrique Git: voir tous les commits non compressés ou qui ne font pas partie d'une autre branche .

152
Christian Vielma

Vous pouvez le faire avec git log :

_git log Origin..
_

En supposant que Origin soit le nom de votre amont, laisser n'importe quel nom de révision après _.._ implique HEAD, qui répertorie les nouveaux commits qui n'ont pas été poussés.

60
Greg Hewgill

Pratique alias git pour rechercher les commits non envoyés dans la branche actuelle:

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 fondamentalement:

git log Origin/branch..branch

mais détermine également le nom de la branche en cours.

37
takeshin

Toutes les autres réponses parlent d '"amont" (la branche d'où vous tirez).
Mais une branche locale peut pousser vers un branche différente de celle dont elle tire.

master pourrait ne pas transmettre à la branche de suivi à distance "_Origin/master_".
La branche en amont de master pourrait être _Origin/master_, mais elle pourrait transmettre à la branche de suivi distante _Origin/xxx_ ou même _anotherUpstreamRepo/yyy_.
Ceux-ci sont définis par _branch.*.pushremote_ pour la branche actuelle avec la valeur _global remote.pushDefault_.

C’est que branche de télé-suivi qui compte lorsqu’on cherche des commits non contus: celle qui suit le _branch at the remote_ où la branche locale serait poussé vers.
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 cela: <branch>@{Push}

Voir commit 29bc885 , commit 3dbe9db , commit adfe5d , commit 48c5847 , commit a1ad0eb , commit e291c75 , commit 979cb24 , commit 1ca41a1 , commit 3a429d , commit a9f9f8c , commit 8770e6f , commit da66b27 , commit f052154 , commit 9e3751d , commit ee2499f [tous à partir du 21 mai 2015], et commit e41bf35 [01 mai 2015] par Jeff King (peff) .
(Fusion de Junio ​​C Hamano - gitster - dans commit c4a8354 , 5 juin 2015)

Commit adfe5d explique:

_sha1_name_: implémenter _@{Push}_ sténographie

Dans un flux de travail triangulaire, chaque branche peut avoir deux points d’intérêt distincts: le _@{upstream}_ à partir duquel vous extrayez normalement et la destination vers laquelle vous appuyez normalement. Il n'y a pas de raccourci pour ce dernier, mais c'est utile d'avoir.

Par exemple, vous voudrez peut-être savoir quels commits vous n'avez pas encore poussé :

_git log @{Push}..
_

Ou, à titre d'exemple plus compliqué, imaginez que vous extrayiez normalement les modifications de _Origin/master_ (que vous définissiez comme votre _@{upstream}_) et que vous transmettiez les modifications à votre propre fork (par exemple, en tant que _myfork/topic_). .
Vous pouvez appuyer sur votre fork depuis plusieurs machines, ce qui vous oblige à intégrer les modifications à partir de la destination Push plutôt que vers l’amont .
Avec ce patch, vous pouvez simplement faire:

_git rebase @{Push}
_

plutôt que de taper le nom complet.

Commit 29bc885 ajoute:

_for-each-ref_: accepte le format "%(Push)"

Tout comme nous avons "%(upstream)" pour signaler le "_@{upstream}_" pour chaque ref, ce patch ajoute "%(Push)" pour correspondre à "_@{Push}_".
Il supporte les mêmes modificateurs de format de suivi qu'en amont (parce que vous voudrez peut-être savoir, par exemple, quelles branches ont des commits à Push ) .

Si vous voulez voir combien de commissions vos branches locales sont devant/derrière par rapport à la branche que vous souhaitez pousser:

_git for-each-ref --format="%(refname:short) %(Push:track)" refs/heads
_
36
VonC

Tu pourrais essayer....

gitk

Je sais que ce n'est pas une option de ligne de commande pure, mais si vous l'avez installée et que vous utilisez un système d'interface graphique, c'est un excellent moyen de voir exactement ce que vous recherchez et bien plus encore.

(Je suis en fait assez surpris que personne ne l'ait mentionné jusqu'à présent.)

33
Justin Ohms

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

28
Aurelien

J'utilise l'alias suivant pour obtenir uniquement la liste des fichiers (et le statut) qui ont été validés mais n'ont pas été poussés (pour la branche actuelle)

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

alors juste faire:

git unpushed
20
CCC

J'avais un commit précédemment, pas poussé vers une branche, ni distant ni local. Juste le commit. Rien des autres réponses n'a fonctionné pour moi, mais avec:

git reflog

Là j'ai trouvé mon commit.

15
Olaia

Je crois que la manière la plus typique de faire est de faire 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 tous branches qui ne sont pas fusionnées en amont, plus le dernier commit en amont (qui apparaît sous forme de nœud racine pour tous les autres commits). Je l’utilise si souvent que j’ai créé le pseudonyme noup.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
12
Giorgos Kylafas
git cherry -v

Ceci listera votre historique de commentaires local (pas encore poussé) avec le message correspondant

9
adswebwork

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

Pour voir les commits entre le dépôt local et distant, procédez comme suit:

git fetch

Ceci est 100% sûr et ne simulera pas votre copie de travail. S'il y avait des modifications, git status affichera X commits ahead of Origin/master.

Vous pouvez maintenant afficher le journal des commits qui se trouvent dans la télécommande mais pas dans la locale:

git log HEAD..Origin
9
Igor Zevaka

Je vous suggère d'aller voir le script https://github.com/badele/gitcheck , j'ai codé ce script pour qu'il vérifie en un seul passage tous vos référentiels git et qu'il montre qui ne s'est pas engagé et qui n'a pas poussé/tiré.

Voici un exemple de résultat enter image description here

9
Bruno Adelé

Il existe un outil nommé non compressé qui analyse tous les dépôts Git, Mercurial et Subversion dans le répertoire de travail spécifié et affiche la liste des fichiers ucommited et des validations non corrigées. L'installation est simple sous Linux:

$ easy_install --user unpushed

ou

$ Sudo easy_install unpushed

installer à l'échelle du système.

L'utilisation 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 comporte également un script cronjob unpushed-notify pour la notification à l'écran des modifications non validées et non validées.

7
nailgun

Cela a mieux fonctionné pour moi:

git log --oneline @{upstream}..

ou:

git log --oneline Origin/(remotebranch)..
7
VaTo

Similaire: Pour afficher les branches non fusionnées:

git branch --all --no-merged

Ceux-ci peuvent être suspects mais je recommande la réponse de cxreg

4
Christophe Roussy

Pour lister tous les commit non-pressés dans toutes les branches vous pouvez facilement utiliser cette commande:

 git log --branches  @{u}..
4
Mohsen Kashi

Si le nombre de validations qui n'ont pas été repoussées est un nombre à un chiffre, ce qui est souvent le cas, la méthode la plus simple consiste à:

$ git checkout

git répond en vous disant que vous êtes "en avance de N commits" par rapport à votre origine. Alors maintenant, gardez ce numéro à l’esprit lorsque vous consultez des journaux. Si vous êtes "en avance de 3 commits", les 3 meilleurs commits de l'historique sont toujours privés.

3
Kaz

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

git log ^Origin/master master
2
Alex

Voici ma solution portable (script Shell qui fonctionne aussi sous Windows sans installation supplémentaire) qui montre les différences par rapport à Origin pour toutes les branches: git-fetch-log

Un exemple de sortie:

==== branch [behind 1]

> commit 652b883 (Origin/branch)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <[email protected]>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (Origin/master, Origin/HEAD)
  Author: BimbaLaszlo <[email protected]>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

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

< commit 83a3161 (test)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (Origin/test)
|/  Author: BimbaLaszlo <[email protected]>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <[email protected]>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

Paramètres transmis pour le journal, par exemple --oneline ou --patch peuvent être utilisés.

0
bimlas