Jak mogę wyświetlić wszelkie zatwierdzenia lokalne, które nie zostały jeszcze wypchnięte do zdalnego repozytorium? Czasami git status
wydrukuje, że moja gałąź to X origin/master
, ale nie zawsze.
Czy to błąd w mojej instalacji Git, czy coś mi brakuje?
git log @{push}..
. Zobacz ten nowy skrót@{push}
(odnoszący się do gałęzi zdalnego śledzenia, do którego naciskasz) w mojej odpowiedzi poniżejgit status --all
powinno się pojawić w 2010 r .; lubgit status -v
powinien faktycznie zapewniać pełne dane wyjściowe, które zawierają dodatkowe informacje.Odpowiedzi:
Możesz także wyświetlić różnicę przy użyciu tej samej składni
źródło
git config --global alias.ahead "log origin/master..HEAD --oneline"
, że mogę szybko dowiedzieć się, gdzie jestem. Jeszcze więcej cukierków:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
za odrobinę dodatkowej niesamowitości@{u}
składnia nie była jeszcze dostępna, stała się dostępna dopiero 12 lutego 2010 r . Również@{u}
nie będzie działać, jeśli lokalny oddział nie jest skonfigurowany z nadrzędnym. Wreszcie,@{u}
obecnie nie obsługuje uzupełniania tabulatorów,<remote>/<branch>
a uzupełnianie tabulatorów pozostaje jednym z najszybszych sposobów na uzyskanie tych informacji i zadziała niezależnie od tego, czy skonfigurowano upstream.Jeśli chcesz zobaczyć wszystkie zatwierdzenia we wszystkich gałęziach, które nie zostały jeszcze wypchnięte, być może szukasz czegoś takiego:
A jeśli chcesz zobaczyć tylko najnowsze zatwierdzenie dla każdej gałęzi i nazwy gałęzi, to:
źródło
git log master..HEAD
nie zadziałało, ponieważ było wiele potoków. Ten post doprowadził mnie dogit log MyBranch --not --remotes
pokazania wszystkich zatwierdzeń, które nie zostały wypchnięte do żadnego z poprzedniej części w jednym oddziale.--decorate
pokazuje również gałęzie.--graph
czyni to jeszcze bardziej oczywistym.Możesz pokazać wszystkie zatwierdzenia, które masz lokalnie, ale nie w górę
@{u}
lub@{upstream}
oznacza odgałęzienie obecnego oddziału (patrzgit rev-parse --help
lub wgit help revisions
celu uzyskania szczegółowych informacji).źródło
git log @{u}.. -p
Jedną z najbardziej przydatnych opcji jest -p , która pokazuje różnice wprowadzone w każdym potwierdzeniu.To działało dla mnie:
Jak wskazano w Git: Zobacz wszystkie nieprzypisane zatwierdzenia lub zatwierdzenia, które nie znajdują się w innej gałęzi .
źródło
Możesz to zrobić za pomocą
git log
:Zakładając, że
origin
jest to nazwa twojego upstream, pomijając nazwę rewizji po..
implikujeHEAD
, która zawiera listę nowych zatwierdzeń, które nie zostały wypchnięte.źródło
git log
„2 kropki-nie-3”, zawsze przypomina mi to stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>
aby skonfigurować w górę, jeśli masz skłonność do używania tego polecenia, aby zobaczyć zatwierdzenia, które są przemieszczane.Wszystkie pozostałe odpowiedzi mówią o „upstream” (gałęzi, z której pobierasz).
Ale lokalny oddział może przesunąć do innego oddziału, niż ten, który ciągnie od.
master
może nie przekazywać do zdalnego oddziału śledzenia „origin/master
”. Upstream oddział dla może być , ale może naciskać na pilocie zdalnego oddziału śledzenia lub nawet . Są one ustawione dla bieżącej gałęzi wraz z wartością.master
origin/master
origin/xxx
anotherUpstreamRepo/yyy
branch.*.pushremote
global remote.pushDefault
Jest to pilot zdalnego śledzenia oddział, który liczy się przy poszukiwaniu unpushed zobowiązuje: ten, który śledzi
branch at the remote
gdzie miejscowy oddział zostanie zepchnięte na. Może być znowu, albo nawet .branch at the remote
origin/xxx
anotherUpstreamRepo/yyy
Git 2.5+ (drugi kwartał 2015 r.) Wprowadza do tego nowy skrót:
<branch>@{push}
Zobacz popełnić 29bc885 , popełnić 3dbe9db , popełnić adfe5d0 , popełnić 48c5847 , popełnić a1ad0eb , popełnić e291c75 , popełnić 979cb24 , popełnić 1ca41a1 , popełnić 3a429d0 , popełnić a9f9f8c , popełnić 8770e6f , popełnić da66b27 , popełnić f052154 , popełnić 9e3751d , popełnić ee2499f [Wszystkie z 21 maja 2015] i zatwierdzenie e41bf35 [01 maja 2015] przez Jeffa Kinga (
peff
) .(Połączone przez Junio C Hamano -
gitster
-w commit c4a8354 , 05 cze 2015)Zatwierdź adfe5d0 wyjaśnia:
Commit 29bc885 dodaje:
Jeśli chcesz zobaczyć, ile zatwierdzeń Twoje lokalne oddziały są do przodu / do tyłu w porównaniu z oddziałem, do którego naciskasz:
źródło
Przydatny alias git do wyszukiwania niepoprawnych commits w bieżącej gałęzi:
Co to w zasadzie robi:
ale także określa bieżącą nazwę oddziału.
źródło
git alias <alias-name> <command>
W takim przypadku polecenie powinno być otoczone pojedynczymi cudzysłowami, aby uniknąć znaków specjalnych z powłoki.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Możesz spróbować....
Wiem, że nie jest to czysta opcja wiersza poleceń, ale jeśli masz ją zainstalowaną i korzystasz z systemu GUI, to świetny sposób, aby zobaczyć dokładnie to, czego szukasz, i wiele więcej.
(Tak naprawdę jestem zaskoczony, że nikt o tym nie wspominał.)
źródło
gitk --all
do przeglądania wszystkich gałęzi.tig
jest alternatywą ncurses.gitk
jest niesamowity! Nigdy nie wiedziałem, że to istnieje! Przydatne do przeglądania zmian w ładnym interfejsie użytkownika.tig
jest najbardziej przydatny w sytuacji „tylko terminala” - gdy nie masz dostępu do graficznego interfejsu użytkownika. Dowiedz się o tym po raz pierwszy! CIEKAWE:tig
jest ODWRÓCONYgit
!git branch -v
pokaże, dla każdego oddziału lokalnego, czy jest „przed”, czy nie.źródło
devel
, odpowiednia linia będzie* devel 8a12fc0 [ahead 1] commit msg
(*
będzie tylko w linii odpowiadającej sprawdzonej gałęzi).ahead 1
oznacza „z wyprzedzeniem o jeden zatwierdzenie”, tzn. istnieje jedno nieprzypisane zatwierdzenie.git branch -vv
? Por. docs: „Jeśli podano dwa razy, wypisz również nazwę gałęzi upstream (patrz także git remote show <remote>).”behind
i / lubahead
każdego oddziału lokalnego, co wystarczy, aby rozwiązać problem OP (wykrywanie niepoprawnych commits).git branch -v
wystarczy do tego, właśnie przetestowałem ponownie z Git 2.16.2 :)Miałem wcześniej dokonane zatwierdzenie, nie wypychane do żadnej gałęzi, ani zdalnie, ani lokalnie. Tylko zatwierdzenie. Nic z innych odpowiedzi nie działało dla mnie, ale z:
Tam znalazłem swoje zatwierdzenie.
źródło
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)
następnie po prostu wykonaj:
źródło
Uważam, że najbardziej typowym sposobem na to jest uruchomienie czegoś takiego:
Jednak osobiście wolę biegać:
który pokazuje zatwierdzenia ze wszystkich gałęzi, które nie są scalone w górę, plus ostatnie zatwierdzenie w górę (które pojawia się jako węzeł główny dla wszystkich pozostałych zatwierdzeń). Używam go tak często, że stworzyłem
noup
dla niego alias .źródło
Sugeruję, abyś zobaczył skrypt https://github.com/badele/gitcheck , kodowałem ten skrypt do sprawdzenia w jednym przejściu wszystkich twoich repozytoriów git i pokazuje, kto się nie zobowiązał, a kto nie pchnął / nie wyciągnął.
Oto przykładowy wynik
źródło
Spowoduje to wyświetlenie lokalnej historii komentarzy (jeszcze nie przekazanych) z odpowiednią wiadomością
źródło
To nie jest błąd. To, co prawdopodobnie widzisz, to status git po nieudanym automatycznym scaleniu, w którym zmiany z pilota są pobierane, ale jeszcze nie scalone.
Aby zobaczyć zatwierdzenia między lokalnym repo i zdalnym wykonaj następujące czynności:
Jest to w 100% bezpieczne i nie będzie wyśmiewać kopii roboczej. Jeśli byłyby zmiany,
git status
pokażą sięX commits ahead of origin/master
.Możesz teraz wyświetlać dziennik zatwierdzeń, które są w trybie zdalnym, ale nie lokalnym:
źródło
To działało dla mnie lepiej:
lub:
źródło
@{upstream}
jest dosłowny (upstream
to magiczne słowo), aremotebranch
to tylko nazwa twojej gałęzi.Istnieje narzędzie o nazwie unpushed, które skanuje wszystkie repozytorium Git, Mercurial i Subversion w określonym katalogu roboczym i wyświetla listę niezatwierdzonych plików i nieprzypisanych zatwierdzeń. Instalacja jest prosta w systemie Linux:
lub
zainstalować w całym systemie.
Użycie jest również proste:
Zobacz
unpushed --help
lub oficjalny opis, aby uzyskać więcej informacji. Posiada również skrypt cronjobunpushed-notify
do powiadamiania na ekranie o niezalecanych i nieprzypisanych zmianach.źródło
Aby łatwo wyświetlić listę wszystkich nieprzypisanych zmian we wszystkich gałęziach , możesz użyć tego polecenia:
źródło
Podobne: Aby wyświetlić nie scalone gałęzie:
Można podejrzewać, ale polecam odpowiedź cxreg
źródło
Jeśli liczba zatwierdzeń, które nie zostały wypchnięte, jest liczbą jednocyfrową, co często jest, najprostszym sposobem jest:
git odpowiada informując cię, że jesteś „z wyprzedzeniem N zobowiązuje” względem swojego pochodzenia. Więc teraz pamiętaj o tej liczbie podczas przeglądania dzienników. Jeśli „wyprzedzasz o 3 zatwierdzenia”, 3 najważniejsze zatwierdzenia w historii są nadal prywatne.
źródło
Jednym ze sposobów robienia rzeczy jest lista zatwierdzeń, które są dostępne w jednym oddziale, ale nie w drugim.
źródło
Jak powiedziano powyżej:
git diff origin / master..HEAD
Ale jeśli używasz git gui
Po otwarciu interfejsu GUI wybierz „Repozytorium” -> Pod tym „ Wizualizuj historię ”
Uwaga: Niektóre osoby lubią używać CMD Monit / Terminal, podczas gdy inne lubią używać Git GUI (dla uproszczenia)
źródło
Oto moje przenośne rozwiązanie (skrypt powłoki, który działa również w systemie Windows bez dodatkowej instalacji), który pokazuje różnice w pochodzeniu dla wszystkich gałęzi: git-fetch-log
Przykładowy wynik:
Parametry przekazane do dziennika, np.
--oneline
Lub--patch
mogą być użyte.źródło
pokaże wszystkie różnice w twoich lokalnych zobowiązaniach.
pokaże identyfikator lokalnego zatwierdzenia i nazwę zatwierdzenia.
źródło
git show
pokazuje tylko ostatnie zatwierdzenie, bez względu na to, czy zostało ono wypchnięte do pilota, czy nie, nie pokaże wszystkich twoich nieprzypisanych zatwierdzeń.Zakładając, że twoja gałąź jest skonfigurowana do śledzenia pochodzenia, powinno to pokazać różnice.
Daje ci podsumowanie zobowiązań.
źródło
git log origin
pokaże zatwierdzenia, które zostały już wypchnięte , ale nie pokażą zatwierdzeń, które nie zostały wypchnięte , co jest bardziej zgodne z tym, o co prosił oryginalny plakat.