Befehl zum Abrufen des neuesten Git-Commit-Hash von einem Zweig [geschlossen]

84

Wie kann ich über die Befehlszeile den neuesten Commit-Hash eines bestimmten Git-Zweigs überprüfen?

mbdvg
quelle
1
Haben Sie versucht, 'git log -n 1' zu verwenden, als Sie diesen bestimmten Zweig ausgecheckt haben?
Rick van Bodegraven
Git-Protokoll gibt lokalen Repositorys Hash, aber Git Hub Repository hat neuen Hash.
mbdvg
1
git log -n 1 [branch_name]branch_name (kann ein entfernter oder lokaler Zweig sein) ist optional. Ohne branch_name wird das letzte Commit des aktuellen Zweigs angezeigt.
Rahul Tapali
11
Mit solchen Abstimmungen wird SO zu Wikipedia.
Eric Walker
Siehe auch hier .
Raphael

Antworten:

59

Verwenden Sie git ls-remote git://github.com/<user>/<project>.git. Zum Beispiel gibt mein Trac-Backlog-Projekt Folgendes:

:: 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^{}

Greifen Sie einfach nach dem, den Sie brauchen, und schneiden Sie es aus:

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

Oder Sie können in der Befehlszeile angeben, welche Refs Sie möchten, und das grep vermeiden mit:

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

Hinweis: Es muss nicht die git://URL sein. Es könnte sein https://oder [email protected]:auch.

Ursprünglich war dies darauf ausgerichtet, das letzte Commit eines Remote-Zweigs herauszufinden (nicht nur aus Ihrem letzten Abruf, sondern auch aus dem tatsächlich letzten Commit in dem Zweig im Remote-Repository). Wenn Sie den Commit-Hash für etwas vor Ort benötigen, lautet die beste Antwort:

git rev-parse branch-name

Es ist schnell, einfach und ein einziger Befehl. Wenn Sie den Commit-Hash für den aktuellen Zweig möchten, können Sie sich HEAD ansehen:

git rev-parse HEAD
John Szakmeister
quelle
4
Verdient mehr Liebe. Das funktioniert wunderbar.
SuperFamousGuy
git rev-parse my_branch_nameODER git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'einfachere Antwort; wird nur den letzten Commit-Hash vonmy_branch_name
betoharres
@betoharres Das OP hat ursprünglich versucht, das Commit für ein Remote-Repository zu ermitteln (nicht das, was wir haben refs/remotes, sondern das tatsächliche Remote-Repo). git rev-parse branch-nameist definitiv der richtige Weg für eine lokale Niederlassung.
John Szakmeister
Dies funktioniert nur im Feld von, git svnweil git svn fetchdie git logAusgabe geändert wird und daher git lognicht mehr verwendet werden kann, um den letzten Remote- Git-Repository-Commit-Hash abzurufen.
Andry
@ Andy Ich bin mir nicht sicher, was du meinst ... Ich habe Probleme, deinem Kommentar zu folgen. Kannst du mehr erklären?
John Szakmeister
138
git log -n 1 [branch_name]

branch_name(kann eine entfernte oder lokale Zweigstelle sein) ist optional. Ohne branch_namewird das letzte Commit für den aktuellen Zweig angezeigt.

Zum Beispiel:

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
quelle
19
git log -n 1 --pretty = format: "% H" funktioniert perfekt für mich
Jaro
9
Holen Sie sich einen kurzen Hash: 'git rev-parse --short --verify my_branch' aus einer ähnlichen Frage: stackoverflow.com/a/949391/134761
angularsen
Schön, ich habe dies zu meiner .gitconfig hinzugefügt, damit ich das letzte Commit einfach mit git hash | pbcopy clip `` `[alias] hash ="! F () {\ git log -n 1 --pretty = format: "% H" kopieren kann; \}; f "` ``
Hose
2

Versuchen Sie es git log -n 1nach a git checkout branchname. Hier werden der Commit-Hash, der Autor, das Datum und die Commit-Nachricht für das letzte Commit angezeigt.

Führen Sie eine git pull origin/branchnameerste Aktion durch , um sicherzustellen, dass Ihr lokales Repo mit dem Upstream übereinstimmt.

Wenn Sie möglicherweise nur eine Liste der Commits anzeigen möchten, hinter denen sich Ihre lokale Niederlassung in der Remote-Niederlassung befindet, gehen Sie wie folgt vor:

git fetch origin
git cherry localbranch remotebranch

Dadurch werden alle Hashes der Commits aufgelistet, die Sie noch nicht in Ihrer lokalen Niederlassung zusammengeführt haben.

Rick van Bodegraven
quelle
Meine Anforderung besteht darin, zu überprüfen, ob lokale Repositorys und Commit-Hashs für Github-Repositorys gleich sind oder nicht. Wie können wir dies tun?
mbdvg
Soweit ich weiß, können sich die Commit-Hashes für dieselben Commits auf keinen Fall zwischen Ihren lokalen und Ihren Remote-Repos unterscheiden. Meinten Sie vielleicht eine Liste der Commits, die in Ihrem lokalen Repository im Vergleich zum Remote-Repository fehlen?
Rick van Bodegraven
Ja, Rick van, es gibt ein Missverhältnis, also möchte ich zeigen, dass es einen Unterschied zwischen lokalem und Github-Repo gibt. Ich brauche also einen Weg, dies herauszufinden
mbdvg
2

Sie können git fetch nameofremoterepodanngit log

und persönlich ich alias gitlogzu git log --graph --oneline --pretty --decorate --all. Probieren Sie es aus und sehen Sie, ob es zu Ihnen passt

nglinh
quelle
Und Git Fetch zieht die Änderungen noch nicht
nglinh
--onlineist eine Abkürzung für --pretty=oneline --abbrev-commit. Aber Sie verwenden --prettyauch, was zurückkehrt --pretty=oneline... Ich würde git log --graph --abbrev-commit --decorate --allstattdessen empfehlen .
Felix Kling
Cool. Das habe ich nicht bemerkt. Vielen Dank!
Nglinh
0

In einem Kommentar, den Sie geschrieben haben

Ich möchte zeigen, dass es einen Unterschied zwischen lokalem und Github-Repo gibt

Wie bereits in einer anderen Antwort erwähnt, sollten Sie git fetch originzuerst eine machen. Wenn sich die Fernbedienung vor Ihrer aktuellen Zweigstelle befindet, können Sie alle Commits zwischen Ihrer lokalen Zweigstelle und der Fernbedienung mit auflisten

git log master..origin/master --stat

Wenn Ihre lokale Niederlassung voraus ist:

git log origin/master..master --stat

--stat zeigt auch eine Liste der geänderten Dateien.

Wenn Sie die Hinzufügungen und Löschungen explizit auflisten möchten, verwenden Sie git diff:

git diff master origin/master
Felix Kling
quelle
0

Beachten Sie, dass bei Verwendung der Option "git log -n 1 [branch_name]". -n gibt nur eine Protokollzeile zurück, aber die Reihenfolge, in der diese zurückgegeben wird, kann nicht garantiert werden. Es folgt ein Auszug aus der git-log-Manpage

.....
.....
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
quelle