Przeglądanie Nieupoważnionych Commitów Git

W Jaki Sposób mogę wyświetlić wprowadzone przez siebie zmiany lokalne, które nie zostały jeszcze wysłane do zdalnego repozytorium? Od czasu do czasu git status wypisuje, że moja gałąź jest commitem X przed origin/master, ale nie zawsze.

Czy to błąd z moją instalacją Gita, czy coś mi umyka?

Author: Nick Volynkin, 2010-01-07

24 answers

git log origin/master..HEAD

Można również wyświetlić diff używając tej samej składni

git diff origin/master..HEAD
 1434
Author: Peter B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 12:03:50

Jeśli chcesz zobaczyć wszystkie commity na wszystkich gałęziach, które nie są jeszcze wypchnięte, możesz szukać czegoś takiego:

git log --branches --not --remotes

I jeśli chcesz zobaczyć tylko najnowszy commit na każdej gałęzi i nazwy gałęzi, to:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
 611
Author: cxreg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-24 01:14:16

Możesz pokazać wszystkie commity, które masz lokalnie, ale nie pod prąd za pomocą

git log @{u}..

@{u} lub @{upstream} oznacza gałąź nadrzędną bieżącej gałęzi (patrz git rev-parse --help lub git help revisions po szczegóły).

 267
Author: Ben Lings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-06 14:20:28
 127
Author: Christian Vielma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-01 00:55:45

Możesz to zrobić z git log:

git log origin..

Zakładając, że {[2] } jest nazwą Twojego źródła, pomijając nazwę rewizji po .. implikuje HEAD, która wymienia nowe commity, które nie zostały wypchnięte.

 55
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 22:46:35

Handy Git alias do szukania nieużywanych commitów w current branch:

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

Co to w zasadzie robi:

git log origin/branch..branch

Ale również określa bieżącą nazwę gałęzi.

 36
Author: takeshin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 12:41:55

Możesz spróbować....

gitk

Wiem, że nie jest to czysta opcja wiersza poleceń, ale jeśli masz ją zainstalowaną i jesteś w systemie GUI, jest to świetny sposób, aby zobaczyć dokładnie to, czego szukasz plus dużo więcej.

(Jestem trochę zaskoczony, że nikt o tym nie wspomniał.)
 32
Author: Justin Ohms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-27 21:04:33

Wszystkie inne odpowiedzi mówią o "upstream" (gałąź, z której wyciągasz).
Ale lokalna gałąź może wcisnąć do innej gałęzi niż ta, z której wyciąga.

master może nie przesunąć do gałęzi zdalnego śledzenia " origin/master".
Może to być gałąź upstream dla master, ale może przesunąć się do gałęzi zdalnego śledzenia origin/xxx lub nawet anotherUpstreamRepo/yyy.
Są one ustawiane przez branch.*.pushremote dla bieżącej gałęzi wraz z global remote.pushDefault wartość.

Jest to gałąź zdalnego śledzenia, która liczy się przy wyszukiwaniu nieprzepuszczonych commitów: ta, która śledzi branch at the remote, gdzie lokalna gałąź zostanie pchnięta.
branch at the remote może być ponownie origin/xxx lub nawet anotherUpstreamRepo/yyy.

Git 2.5 + (Q2 2015) wprowadza nowy skrót do tego: <branch>@{push}

Zobacz commit 29bc885, commit 3dbe9db, commit adfe5d0, / align = "left" / 485847, commit a1ad0eb , commit e291c75, / align = "left" / 979cb24, / align = "left" / 1ca41a1, / align = "left" / 3a429d0, commit a9f9f8c, / align = "left" / 8770e6f, commit da66b27, / align = "left" / f052154, / align = "left" / 9e3751d, commit ee2499f [Wszystkie od 21 maja 2015] i commit e41bf35 [01 maja 2015] by Jeff King (peff).
(dodane przez Junio C Hamano -- gitster -- in commit c4a8354, 05 Jun 2015)

Commit adfe5d0 wyjaśnia:

sha1_name: @{push} Skrót

W trójkątnym przepływie pracy, każda gałąź może mieć dwa różne punkty zainteresowania: @{upstream}, z którego normalnie się ciągnie, i miejsce docelowe, do którego zwykle się pcha. Nie ma skrótu dla tego drugiego, ale warto go mieć.

Na przykład, możesz chcieć wiedzieć, których commitów nie posiadasz popchnięty jeszcze :

git log @{push}..

Lub jako bardziej skomplikowany przykład, wyobraź sobie, że zwykle wyciągasz zmiany z origin/master (które ustawiasz jako @{upstream}) i przesuwasz zmiany do własnego widelca (np. jako myfork/topic).
Można naciskać na widelec z wielu maszyn, wymagających zintegrować zmiany z miejsca docelowego push, a nie przed.
Z tym patchem możesz po prostu zrobić: {]}

git rebase @{push}

Zamiast wypisywać pełną nazwisko.

Commit 29bc885 dodaje:

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

Tak jak mamy "%(upstream) "do zgłoszenia" @{upstream} "dla każdego ref, ta łatka dodaje" %(push)" do dopasowania "@{push}".
Obsługuje te same modyfikatory formatu śledzenia, co w upstream (ponieważ możesz chcieć wiedzieć, na przykład, które gałęzie mają commity do wypchnięcia ).

Jeśli chcesz zobaczyć ile commitów jest Twoich lokalnych gałęzi przed/za w porównaniu do gałęzi, do której pcha się:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
 31
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 11:13:20

git branch -v pokaże, dla każdego oddziału lokalnego, czy jest "przed", czy nie.

 25
Author: Aurelien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-20 11:08:11

Używam następującego aliasu, aby uzyskać tylko listę plików (i status), które zostały zatwierdzone, ale nie zostały wypchnięte (dla bieżącej gałęzi)

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

To po prostu zrób:

git unpushed
 20
Author: CCC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-01 00:55:06

Uważam, że najbardziej typowym sposobem jest prowadzenie czegoś takiego jak:

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

Jednak ja osobiście wolę biegać:

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

, który pokazuje commity zwszystkich gałęzi , które nie są scalane pod prąd, plus ostatni commit w pod prąd (który pokazuje się jako węzeł główny dla wszystkich pozostałych commitów). Używam go tak często, że stworzyłem dla niego alias noup.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
 11
Author: Giorgos Kylafas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-01 00:56:23

Proponuję zapoznać się ze skryptem https://github.com/badele/gitcheck , zakodowałem ten skrypt, aby sprawdzić w jednym przejściu wszystkie repozytoria git, i pokazuje on, kto nie zlecił, a kto nie pchnął / pociągnął.

Tutaj przykładowy wynik Tutaj wpisz opis obrazka

 9
Author: Bruno Adelé,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-27 12:27:41
git cherry -v

To wyświetli lokalną historię komentarzy (jeszcze nie wypchniętą) z odpowiednią wiadomością

 8
Author: adswebwork,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-11 18:48:11

To nie jest błąd. Prawdopodobnie widzisz git status po nieudanym Auto-merge, gdzie zmiany z pilota są pobierane, ale nie są jeszcze scalane.

Aby zobaczyć commity pomiędzy lokalnym repo a zdalnym, wykonaj następujące czynności:

git fetch

To jest w 100% bezpieczne i nie będzie makiety kopii roboczej. Jeśli nastąpiły zmiany git status wil Pokaż X commits ahead of origin/master.

Możesz teraz wyświetlać log commitów, które znajdują się w zdalnym, ale nie w lokalnym:

git log HEAD..origin
 7
Author: Igor Zevaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 22:47:11

Istnieje narzędzie o nazwie unpushed, które skanuje wszystkie repozytoria Git, Mercurial i Subversion w podanym katalogu roboczym i wyświetla listę ucommited plików i unpushed commitów. Instalacja jest prosta pod Linuksem:

$ easy_install --user unpushed

Lub

$ sudo easy_install unpushed

Do instalacji w całym systemie.

Użycie jest również proste:

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

Zobacz unpushed --helplub oficjalny opis aby uzyskać więcej informacji. Posiada również skrypt cronjob unpushed-notify do powiadamiania na ekranie o niezatwierdzonych i nieużywanych zmiany.

 7
Author: nailgun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 18:12:52

Dla mnie to działało lepiej:

git log --oneline @{upstream}..

Lub:

git log --oneline origin/(remotebranch)..
 6
Author: VaTo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 18:20:09

Aby wyświetlić listę wszystkich nieprzepisanych commitów we wszystkich gałęziach , możesz użyć polecenia:

 git log --branches  @{u}..
 4
Author: Mohsen Kashi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 08:59:54

Miałem commit zrobiony wcześniej, nie wypchnięty do żadnej gałęzi, ani odległy, ani lokalny. Tylko zobowiązanie. Nic z innych odpowiedzi mi nie wyszło, ale z:

git reflog

Tam znalazłem mój commit.

 4
Author: Olaia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 06:32:08

Jeśli liczba commitów, które nie zostały wypchnięte jest liczbą jednocyfrową, którą często jest, najprostszym sposobem jest:

$ git checkout

Git odpowiada mówiąc, że jesteś "przed N commits" w stosunku do swojego pochodzenia. Więc teraz po prostu pamiętaj o tym numerze podczas przeglądania dzienników. Jeśli "wyprzedzasz o 3 commity", 3 ostatnie commity w historii są nadal prywatne.

 3
Author: Kaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-01 19:49:42

Podobne: aby wyświetlić unmerged branches:

git branch --all --no-merged

Te mogą być podejrzane, ale polecam odpowiedź przez cxreg

 3
Author: Christophe Roussy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-31 14:01:28

Jednym ze sposobów działania jest lista commitów, które są dostępne w jednej gałęzi, ale nie w innej.

git log ^origin/master master
 0
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 13:18:17

Oto moje przenośne rozwiązanie (skrypt powłoki, który działa również na Windows bez dodatkowej instalacji), które pokazuje różnice od pochodzenia dla wszystkich gałęzi: git-fetch-log

Przykładowe wyjście:

==== 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

Mogą być użyte parametry przekazywane do logu, np. --oneline lub --patch.

 0
Author: bimlas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 06:51:40
git show

Pokaże wszystkie diffy w Twoich lokalnych commitach.

git show --name-only

Wyświetli lokalny identyfikator zatwierdzenia i nazwę zatwierdzenia.

 -2
Author: user2387567,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-30 21:13:18
git diff origin

Zakładając, że Twoja gałąź jest ustawiona do śledzenia pochodzenia, to powinno to pokazać różnice.

git log origin

Da ci podsumowanie commitów.

 -4
Author: mopoke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 22:46:17