Affichage de Git Commits non compressés

Comment puis-je consulter les commits locaux que j’ai effectués, qui n’ont pas encore été transférés dans le référentiel distant? Occasionnellement, le git status que ma twig est X commise avant l’ origin/master , mais pas toujours.

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

 git log origin/master..HEAD 

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

 git diff origin/master..HEAD 

Si vous voulez voir tous les commits sur toutes les twigs qui ne sont pas encore poussées, vous pourriez chercher quelque chose comme ceci:

 git log --twigs --not --remotes 

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

 git log --twigs --not --remotes --simplify-by-decoration --decorate --oneline 

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

 git log @{u}.. 

@{u} ou @{upstream} signifie la twig en amont de la twig en cours (voir les git help revisions de git rev-parse --help ou git help revisions pour plus de détails).

Cela a fonctionné pour moi:

 git cherry -v 

Comme indiqué à Git: Voir tous les commits non validés ou les commits qui ne sont pas dans une autre twig .

Vous pouvez le faire avec git log :

 git log origin.. 

En supposant que l’ origin est le nom de votre amont, ne pas utiliser de nom de révision après .. implique HEAD , qui répertorie les nouveaux commits qui n’ont pas été poussés.

Handy git alias pour rechercher les commits non compressés dans la twig courante :

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

Qu’est-ce que cela fait essentiellement:

 git log origin/branch..branch 

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

Tu pourrais essayer….

 gitk 

Je sais que ce n’est pas une option de ligne de commande pure, mais si vous l’avez installé et que vous êtes sur 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 un peu surpris que personne n’en ait parlé jusqu’ici.)

Toutes les autres réponses parlent de “amont” (la twig que vous extrayez).
Mais une twig locale peut pousser vers une twig différente de celle qu’elle tire.

master peut ne pas pousser vers la twig de suivi à distance ” origin/master “.
La twig en amont de master peut être d’ origin/master , mais elle peut être transmise à l’ origin/xxx twig de suivi distante ou même à un anotherUpstreamRepo/yyy .
Ceux-ci sont définis par branch.*.pushremote pour la twig en cours avec la valeur global remote.pushDefault .

C’est cette twig de suivi à distance qui compte lors de la recherche de commits non compressés: celle qui suit la branch at the remote où la twig locale serait poussée.
La branch at the remote peut être, à nouveau, d’ origin/xxx ou même un autre anotherUpstreamRepo/yyy .

Git 2.5+ (Q2 2015) introduit un nouveau raccourci pour cela: @{push}

Voir commit 29bc885 , commettre 3dbe9db , commettre adfe5d0 , commettre 48c5847 , commettre a1ad0eb , commettre e291c75 , commettre 979cb24 , commettre 1ca41a1 , commettre 3a429d0 , commettre a9f9f8c , commettre 8770e6f , commettre da66b27 , commettre f052154 , commettre 9e3751d , commettre ee2499f 2015], et commettre e41bf35 [01 mai 2015] par Jeff King ( peff ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit c4a8354 , 05 juin 2015)

Commettre adfe5d0 explique:

sha1_name : implémente @{push} raccourci

Dans un workflow sortingangular, chaque twig peut avoir deux points d’intérêt distincts: le @{upstream} que vous tirez normalement et la destination vers laquelle vous passez normalement. Il n’y a pas de raccourci pour ce dernier, mais c’est utile d’avoir.

Par exemple, vous pouvez vouloir savoir quels commits vous n’avez pas encore poussés :

 git log @{push}.. 

Ou, comme exemple plus compliqué, imaginez que vous tiriez normalement les modifications de l’ origin/master (que vous définissez comme @{upstream} ) et que vous poussez les modifications sur votre propre fork (par exemple, myfork/topic ).
Vous pouvez accéder à votre fourche à partir de plusieurs machines, ce qui vous oblige à intégrer les modifications depuis 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 : accepter le format ” %(push)

Tout comme nous avons ” %(upstream) ” pour signaler le ” @{upstream} ” pour chaque ref, ce patch ajoute ” %(push) ” pour correspondre à ” @{push} “.
Il prend en charge les mêmes modificateurs de format de suivi que ceux en amont (car vous souhaiterez peut-être savoir, par exemple, quelles twigs s’engagent à pousser ).

Si vous voulez voir combien de vos succursales locales sont en avance ou en retard par rapport à la twig vers laquelle vous poussez:

 git for-each-ref --format="%(refname:short) %(push:track)" refs/heads 

git branch -v affichera, pour chaque twig locale, si elle est “en avance” ou non.

J’utilise l’alias suivant pour obtenir uniquement la liste des fichiers (et le statut) qui ont été validés mais qui n’ont pas été poussés (pour la twig en cours)

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

alors juste faire:

 git unpushed 

Je crois que la manière la plus typique de faire ceci 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 toutes les twigs qui ne sont pas fusionnées en amont, plus la dernière validation en amont (qui apparaît comme un nœud racine pour tous les autres commits). Je l’utilise si souvent que j’ai créé un pseudonyme pour cela.

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

Je vous suggère d’aller voir le script https://github.com/badele/gitcheck , j’ai codé ce script pour vérifier en une fois tous vos repositorys git, et cela montre qui n’a pas commis et qui n’a pas poussé / tiré.

Voici un exemple de résultat entrer la description de l'image ici

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

Pour voir les commits entre repo local et remote, faites ceci:

 git fetch 

Ceci est sûr à 100% et ne créera pas votre copie de travail. S’il y avait des changements, le git status montrera que 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 le local:

 git log HEAD..origin 

Il existe un outil nommé unpushed qui parsing tous les repositorys Git, Mercurial et Subversion dans le répertoire de travail spécifié et affiche la liste des fichiers non validés et des commits non compressés. 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 non- unpushed --help ou description officielle pour plus d’informations. Il dispose également d’un script unpushed-notify pour la notification à l’écran des modifications non validées et non publiées.

 git cherry -v 

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

Cela a fonctionné mieux pour moi:

 git log --oneline @{upstream}.. 

ou:

 git log --oneline origin/(remotebranch).. 

Pour lister facilement tous les commit non poncés dans toutes les twigs, vous pouvez utiliser cette commande:

  git log --twigs @{u}.. 

J’ai eu un engagement fait précédemment, pas poussé à une twig, ni à distance ni local. Juste le commit. Rien des autres réponses n’a fonctionné pour moi, mais avec:

 git reflog 

Là j’ai trouvé mon engagement.

Si le nombre de commits qui n’ont pas été expulsés est un nombre à un chiffre, ce qui est souvent le cas, le plus simple est:

 $ git checkout 

git répond en vous disant que vous êtes “avant N commits” par rapport à votre origine. Alors maintenant, gardez simplement ce chiffre à l’esprit lorsque vous consultez les journaux. Si vous êtes “en avance de 3 commits”, les 3 premiers commits de l’histoire sont encore privés.

Similaire: Pour afficher les twigs non fusionnées:

 git branch --all --no-merged 

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

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

 git log ^origin/master master 

Voici ma solution portable (script shell qui fonctionne aussi sous Windows sans installation supplémentaire) qui montre les différences d’origine pour toutes les twigs: git-fetch-log

Un exemple de sortie:

 ==== branch [behind 1] > commit 652b883 (origin/branch) | Author: BimbaLaszlo  | Date: 2016-03-10 09:11:11 +0100 | | Commit on remote | o commit 2304667 (branch) Author: BimbaLaszlo  Date: 2015-08-28 13:21:13 +0200 Commit on local ==== master [ahead 1] < commit 280ccf8 (master) | Author: BimbaLaszlo  | Date: 2016-03-25 21:42:55 +0100 | | Commit on local | o commit 2369465 (origin/master, origin/HEAD) Author: BimbaLaszlo  Date: 2016-03-10 09:02:52 +0100 Commit on remote ==== test [ahead 1, behind 1] < commit 83a3161 (test) | Author: BimbaLaszlo  | Date: 2016-03-25 22:50:00 +0100 | | Diverged from remote | | > commit 4aafec7 (origin/test) |/ Author: BimbaLaszlo  | Date: 2016-03-14 10:34:28 +0100 | | Pushed remote | o commit 0fccef3 Author: BimbaLaszlo  Date: 2015-09-03 10:33:39 +0200 Last common commit 

Les parameters transmis pour le journal, par exemple --oneline ou --patch peuvent être utilisés.

 git show 

affichera tous les diffs dans vos commits locaux.

 git show --name-only 

affichera l’ID de validation local et le nom de commit.

 git diff origin 

En supposant que votre twig est configurée pour suivre l’origine, cela devrait vous montrer les différences.

 git log origin 

Vous donnera un résumé des engagements.