Команда отримати останній хеш коміту Git з гілки [закрито]


84

Як я можу перевірити за допомогою командного рядка останній хеш коміту певної гілки Git?


1
Ви пробували використовувати 'git log -n 1', коли перевірили цю конкретну гілку?
Рік ван Бодегравен

git log дає хеш локальних сховищ, але сховище git hub має новий хеш.
mbdvg

1
git log -n 1 [branch_name]ім'я_відгалуження (може бути віддаленим або локальним відділенням) необов'язково. Без галузь_назва буде показано останній коміт поточної гілки.
Рахул Тапалі

11
Отримавши такі голоси, SO стає Вікіпедією.
Ерік Уокер

Дивіться також тут .
Рафаель

Відповіді:


60

Використовуйте git ls-remote git://github.com/<user>/<project>.git. Наприклад, мій проект trac-backlog дає:

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

Просто зробіть потрібний і виріжте його:

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

Або ви можете вказати, які посилання ви хочете в командному рядку, і уникнути grep за допомогою:

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

Примітка: це не повинна бути git://URL-адреса. Це може бути https://або git@github.com:теж.

Спочатку це було спрямовано на з’ясування останнього коміту віддаленої гілки (не лише з останнього завантаження, а фактичного останнього коміту у гілці віддаленого сховища). Якщо вам потрібен хеш коміту для чогось локально, найкраща відповідь:

git rev-parse branch-name

Це швидко, легко та єдиною командою. Якщо ви хочете хеш коміту для поточної гілки, ви можете подивитися HEAD:

git rev-parse HEAD

4
Заслуговує більше любові. Це чудово працює.
SuperFamousGuy

git rev-parse my_branch_nameАБО git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'простіша відповідь; видасть лише останній хеш my_branch_name
коміту

@betoharres OP спочатку намагався визначити коміт у віддаленому сховищі (не те, що ми маємо refs/remotes, а власне віддалене репо). git rev-parse branch-nameце, безумовно, шлях до місцевого відділення.
Джон Сакмайстер,

Це працює лише в полі, git svnоскільки git svn fetchзмінює git logвихідні дані, і тому git logбільше не можна використовувати для отримання останнього віддаленого хешу коміту комісії сховища git.
Андрі,

@Andry Я не впевнений, що ти маєш на увазі ... У мене виникають проблеми з підписуванням на ваш коментар. Ви можете пояснити більше?
Джон Сакмайстер,

139
git log -n 1 [branch_name]

branch_name(може бути віддаленим або локальним відділенням) необов’язково. Без branch_nameцього він покаже останні коміти з поточної гілки.

Наприклад:

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

20
git log -n 1 --pretty = format: "% H" для мене ідеально працює
Яро

9
Отримати короткий хеш: «мерзотник преподобним синтаксичного аналізу --short --verify my_branch» з подібним питанням: stackoverflow.com/a/949391/134761
angularsen

Приємно, я додав це до свого .gitconfig, щоб я міг просто скопіювати останній коміт за допомогою git hash | pbcopy clip `` [псевдонім] hash = "! F () {\ git log -n 1 --pretty = format:"% H "; \}; f "` `
Штани

2

Спробуйте використовувати git log -n 1після того, як зробили a git checkout branchname. Це показує хеш коміту, автора, дату та повідомлення коміту для останнього коміту.

Виконайте git pull origin/branchnameспочатку, щоб переконатися, що місцеві репо відповідають вище.

Якщо, можливо, ви хочете побачити лише список комітів, за якими знаходиться ваша локальна гілка на віддаленій гілці, зробіть це:

git fetch origin
git cherry localbranch remotebranch

Тут буде перелічено всі хеші комітів, які ви ще не об’єднали у свою локальну гілку.


моя вимога полягає в тому, щоб перевіряти локальні сховища та хеш комітів комітів сховищ github однакові чи ні, як ми можемо це зробити?
mbdvg

Наскільки я знаю, жодним чином хеші комітів не можуть відрізнятися між вашим локальним та віддаленим репо для тих самих комітів. Ви, мабуть, мали на увазі, що у списку комітів у вашому локальному сховищі немає віддаленого сховища?
Рік ван Бодегравен

Так, Рік ван, є невідповідність, тому я хочу показати, що є різниця в локальному
репозиторії та репозиторії

2

ви можете git fetch nameofremoterepo, тоgit log

і особисто я псевдонім gitlogдля git log --graph --oneline --pretty --decorate --all. спробуйте і перевірте, чи підходить вам це


І git fetch поки що не тягне змін
nglinh,

--onlineце скорочення для --pretty=oneline --abbrev-commit. Але ви використовуєте --prettyтакож, що повертається --pretty=oneline... Я б рекомендував git log --graph --abbrev-commit --decorate --allзамість цього.
Фелікс Клінг

Класно. Я цього не помітив. Дякую!
nglinh

0

У коментарі, який ви написали

я хочу показати, що існує різниця в локальному та github-репо

Як уже зазначалося в іншій відповіді, вам слід зробити git fetch originперший. Потім, якщо пульт випереджає вашу поточну гілку, ви можете перерахувати всі коміти між вашою локальною гілкою та пультом за допомогою

git log master..origin/master --stat

Якщо ваше місцеве відділення випереджає:

git log origin/master..master --stat

--stat також показує список змінених файлів.

Якщо ви хочете явно перерахувати доповнення та видалення, використовуйте git diff:

git diff master origin/master

0

Зверніть увагу, що при використанні параметра "git log -n 1 [ім'я_відгалуження]". -n повертає лише один рядок журналу, але порядок, у якому це повертається, не гарантується. Далі наведено витяг зі сторінки користувача 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>
.....
.....
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.