Polecenie pobrania najnowszego skrótu zatwierdzania Git z gałęzi [zamknięte]

86

Jak mogę sprawdzić za pomocą wiersza poleceń najnowszy skrót zatwierdzenia konkretnej gałęzi Git?

mbdvg
źródło
1
Czy próbowałeś użyć 'git log -n 1', gdy sprawdzałeś tę konkretną gałąź?
Rick van Bodegraven
git log podaje hash repozytoriów lokalnych, ale repozytorium git hub ma nowy hash.
mbdvg
1
git log -n 1 [branch_name]nazwa_gałęzi (może być oddziałem zdalnym lub lokalnym) jest opcjonalna. Bez nazwa_gałęzi pokaże najnowsze zatwierdzenie aktualnej gałęzi.
Rahul Tapali
11
Mając takie głosy, SO staje się Wikipedią.
Eric Walker
Zobacz także tutaj .
Raphael

Odpowiedzi:

60

Użyj git ls-remote git://github.com/<user>/<project>.git. Na przykład mój projekt trac-backlog podaje:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git
5d6a3c973c254378738bdbc85d72f14aefa316a0    HEAD
4652257768acef90b9af560295b02d0ac6e7702c    refs/heads/0.1.x
35af07bc99c7527b84e11a8632bfb396823326f3    refs/heads/0.2.x
5d6a3c973c254378738bdbc85d72f14aefa316a0    refs/heads/master
520dcebff52506682d6822ade0188d4622eb41d1    refs/pull/11/head
6b2c1ed650a7ff693ecd8ab1cb5c124ba32866a2    refs/pull/11/merge
51088b60d66b68a565080eb56dbbc5f8c97c1400    refs/pull/12/head
127c468826c0c77e26a5da4d40ae3a61e00c0726    refs/pull/12/merge
2401b5537224fe4176f2a134ee93005a6263cf24    refs/pull/15/head
8aa9aedc0e3a0d43ddfeaf0b971d0ae3a23d57b3    refs/pull/15/merge
d96aed93c94f97d328fc57588e61a7ec52a05c69    refs/pull/7/head
f7c1e8dabdbeca9f9060de24da4560abc76e77cd    refs/pull/7/merge
aa8a935f084a6e1c66aa939b47b9a5567c4e25f5    refs/pull/8/head
cd258b82cc499d84165ea8d7a23faa46f0f2f125    refs/pull/8/merge
c10a73a8b0c1809fcb3a1f49bdc1a6487927483d    refs/tags/0.1.0
a39dad9a1268f7df256ba78f1166308563544af1    refs/tags/0.2.0
2d559cf785816afd69c3cb768413c4f6ca574708    refs/tags/0.2.1
434170523d5f8aad05dc5cf86c2a326908cf3f57    refs/tags/0.2.2
d2dfe40cb78ddc66e6865dcd2e76d6bc2291d44c    refs/tags/0.3.0
9db35263a15dcdfbc19ed0a1f7a9e29a40507070    refs/tags/0.3.0^{}

Po prostu grep dla tego, którego potrzebujesz i wytnij go:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git | \
   grep refs/heads/master | cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

Lub możesz określić, które referencje chcesz w linii poleceń i uniknąć grep za pomocą:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git refs/heads/master | \
   cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

Uwaga: nie musi to być git://adres URL. Mógłby być https://albo [email protected]:też.

Pierwotnie miało to na celu znalezienie ostatniego zatwierdzenia zdalnej gałęzi (nie tylko z ostatniego pobrania, ale aktualnego ostatniego zatwierdzenia w gałęzi w zdalnym repozytorium). Jeśli potrzebujesz skrótu zatwierdzenia dla czegoś lokalnego, najlepszą odpowiedzią jest:

git rev-parse branch-name

To szybkie, łatwe i jedno polecenie. Jeśli potrzebujesz skrótu zatwierdzenia dla bieżącej gałęzi, możesz spojrzeć na HEAD:

git rev-parse HEAD
John Szakmeister
źródło
4
Zasługuje na więcej miłości. To działa pięknie.
SuperFamousGuy
git rev-parse my_branch_nameLUB git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'prostsza odpowiedź; zwróci tylko ostatnią wartość skrótu zatwierdzeniamy_branch_name
betoharres
@betoharres OP początkowo próbował określić zatwierdzenie w zdalnym repozytorium (nie w tym, co mamy refs/remotes, ale w rzeczywistym repozytorium zdalnym). git rev-parse branch-nameto zdecydowanie droga do lokalnego oddziału.
John Szakmeister
Działa to tylko w polu, git svnponieważ git svn fetchzmienia dane git logwyjściowe, więc git lognie można już go używać do uzyskania ostatniego skrótu zatwierdzenia repozytorium zdalnego git.
Andry,
@Andry Nie jestem pewien, co masz na myśli ... Mam problem ze zrozumieniem Twojego komentarza. Czy możesz to bardziej wyjaśnić?
John Szakmeister
141
git log -n 1 [branch_name]

branch_name(może to być oddział zdalny lub lokalny) jest opcjonalny. Bez branch_nametego pokaże najnowsze zatwierdzenie w bieżącej gałęzi.

Na przykład:

git log -n 1
git log -n 1 origin/master
git log -n 1 some_local_branch

git log -n 1 --pretty=format:"%H"  #To get only hash value of commit
Rahul Tapali
źródło
20
git log -n 1 --pretty = format: "% H" działa idealnie dla mnie
Jaro
9
Pobierz krótki hash: `` git rev-parse --short --verify my_branch '' z podobnego pytania: stackoverflow.com/a/949391/134761
angularsen
Świetnie, dodałem to do mojego .gitconfig, aby po prostu skopiować ostatnią zmianę za pomocą git hash | pbcopy clip `` [alias] hash = "! F () {\ git log -n 1 --pretty = format:"% H "; \}; f "` ``
Spodnie
2

Spróbuj użyć git log -n 1po wykonaniu git checkout branchname. Pokazuje skrót zatwierdzenia, autora, datę i komunikat o zatwierdzeniu dla ostatniego zatwierdzenia.

Wykonaj git pull origin/branchnamepierwszy, aby upewnić się, że lokalne repozytorium jest zgodne z wcześniejszym.

Jeśli być może chcesz zobaczyć tylko listę zatwierdzeń, które znajduje się za twoim lokalnym oddziałem w zdalnym oddziale, wykonaj następujące czynności:

git fetch origin
git cherry localbranch remotebranch

Spowoduje to wyświetlenie wszystkich skrótów zatwierdzeń, których jeszcze nie scaliłeś z lokalnym oddziałem.

Rick van Bodegraven
źródło
moim wymaganiem jest sprawdzenie, czy lokalne repozytoria i repozytoria github są takie same, czy nie, jak możemy to zrobić?
mbdvg
O ile wiem, nie ma możliwości, aby skróty zatwierdzeń różniły się między repozytoriami lokalnymi i zdalnymi dla tych samych zatwierdzeń. Czy może chodziło Ci o listę zatwierdzeń, których brakuje w twoim lokalnym repozytorium w porównaniu z repozytorium zdalnym?
Rick van Bodegraven
Tak, Rick van, jest niedopasowanie, więc chcę pokazać, że istnieje różnica w repozytorium lokalnym i github, więc potrzebuję sposobu, aby się dowiedzieć
mbdvg
2

możesz git fetch nameofremoterepowięcgit log

i osobiście nazywam gitlogsię git log --graph --oneline --pretty --decorate --all. wypróbuj i zobacz, czy Ci pasuje

nglinh
źródło
I git fetch nie wyciąga jeszcze zmian
nglinh
--onlinejest skrótem dla --pretty=oneline --abbrev-commit. Ale ty też używasz --pretty, co powraca --pretty=oneline... Polecam git log --graph --abbrev-commit --decorate --allzamiast tego.
Felix Kling
Fajne. Nie zauważyłem tego. Dzięki!
nglinh
0

W komentarzu, który napisałeś

chcę pokazać, że istnieje różnica w repozytorium lokalnym i github

Jak już wspomniano w innej odpowiedzi, powinieneś zrobić git fetch originpierwszy. Następnie, jeśli zdalny jest przed bieżącą gałęzią, możesz wyświetlić listę wszystkich zatwierdzeń między lokalnym oddziałem a zdalnym za pomocą

git log master..origin/master --stat

Jeśli Twój lokalny oddział jest przed nami:

git log origin/master..master --stat

--stat pokazuje również listę zmienionych plików.

Jeśli chcesz jawnie wymienić dodatki i usunięcia, użyj git diff:

git diff master origin/master
Felix Kling
źródło
0

Zauważ, że gdy używasz opcji "git log -n 1 [nazwa_gałęzi]". -n zwraca tylko jedną linię dziennika, ale kolejność, w jakiej jest zwracana, nie jest gwarantowana. Poniżej znajduje się wyciąg ze strony podręcznika git-log

.....
.....
Commit Limiting

Besides specifying a range of commits that should be listed using the special notations explained in the     description, additional commit limiting may be applied.

Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted.

Note that these are applied before commit ordering and formatting options, such as --reverse.

-<number>
-n <number>
.....
.....
bhav22
źródło