Dapatkan hash versi Git singkat


382

Apakah ada cara yang lebih bersih untuk mendapatkan hash versi pendek HEADdari Git?

Saya ingin melihat output yang sama seperti yang saya dapatkan dari:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Saya awalnya menggunakan perintah di atas untuk menghasilkan versi string, tetapi ini lebih baik lagi:

git describe --tags

Ini akan menampilkan string seperti 0.1.12(tagged commit) atau 0.1.11-5-g0c85fbc(lima commit setelah tag).


2
Karena Anda tampaknya pandai memanipulasi data dengan pipa dan yang lainnya, Anda harus tahu tentang alias git . Dalam hal ini, ada perintah untuk apa yang Anda inginkan (lihat jawaban) tetapi akhirnya Anda akan menemukan sesuatu yang tidak ada, dan alias bagus untuk itu.
MatrixFrog

@ MatrixFrog terima kasih atas tipnya! Saya sudah memiliki beberapa alias git sederhana, tapi saya tidak tahu seberapa kuat mereka sampai sekarang. Saya terutama suka tampilan graphviz.
Attila O.

1
Hah. Ketika saya menjalankan git describe --tagssaya mendapatkan pesan, "fatal: Tidak ada nama yang ditemukan, tidak dapat menggambarkan apa pun." .
Quinn Comendant

@QuinnComendant Anda mungkin perlu menandai sesuatu terlebih dahulu --tagsagar berfungsi. Coba buat tag terlebih dahulu ; mis git tag 1.0.0.
Attila O.

Jawaban:


697

Coba ini:

git rev-parse --short HEAD

Perintah ini git rev-parsedapat melakukan banyak hal yang berbeda, jadi Anda harus membaca dokumentasi dengan cermat untuk mengetahui hal itu.


4
Anda dapat melakukan sebaliknya dan mendapatkan hash komit panjang dari hash komit pendek dengan melakukan hal berikutgit rev-parse HEAD
Andy

9
Perintah ini juga bekerja dengan ID panjang yang disalin dari sumber lain seperti git log, misalnya git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fpengembalian97dd2ae
chiborg

3
Ini hanya berfungsi dengan referensi. Anda dapat menggunakan KEPALA, nama tag, nama cabang atau hash biasa.
d12frosted

1
Peringatan, ini mengembalikan hash komit 7 karakter (secara default) sementara banyak tempat seperti gitlab menggunakan 8 karakter!
masterxilo

3
Anda dapat menggunakan git rev-parse --short=8 HEADuntuk mendapatkan panjang 8 karakter yang digunakan oleh GitLab. Anda juga dapat mengatur core.abbrevke 8 untuk repo git tertentu dengan perintah seperti git config core.abbrev 8 Source
n8felton

112

Anda dapat melakukan hampir semua format yang Anda inginkan --pretty=format:

git log -1 --pretty=format:%h 

70
git log -1 --abbrev-commit

juga akan melakukannya.

git log --abbrev-commit

akan mendaftar entri log dengan singkatan SHA-1 checksum.


1
Yang kedua adalah persis apa yang saya cari! Sangat mudah diingat dan bermanfaat dalam kehidupan sehari-hari.
iFreilicht

Juga berfungsi dengan git log --pretty=oneline, yang tidak seperti --oneline, jika tidak mencetak hash ukuran penuh.
sdaau

46

Cara sederhana untuk melihat Git commit versi pendek dan pesan Git commit adalah:

git log --oneline

Perhatikan bahwa ini adalah singkatan

git log --pretty=oneline --abbrev-commit

1
--oneline adalah pilihan terbaik
Juan Ignacio Barisich

1
@JuanIgnacioBarisich opsi terbaik tergantung pada seberapa banyak informasi yang Anda perlu lihat. Jika seseorang membutuhkan informasi lebih lanjut seperti penulis atau tanggal maka git log --abbrev-commit akan menjadi pilihan yang lebih baik. juga log --pretty mungkin merupakan pilihan yang lebih baik untuk memilih informasi mana yang akan log
velocity

35

Cara yang sangat sederhana adalah dengan:

git describe --always

1
ha, manis, yang membahas kasus-kasus di mana git menggambarkan akan gagal sebaliknya (karena menggambarkan mengharapkan tag di suatu tempat dalam sejarah) thx
tajam

8
Tidak baik jika Anda benar-benar menginginkan hash pendek - karena ini dapat mengembalikan tag beranotasi jika ada.
Zitrax

Dalam beberapa kasus git describe --longbisa membantu. Dari dokumen : "Selalu tampilkan format panjang (tag, jumlah komit dan nama komit yang disingkat) bahkan ketika itu cocok dengan tag ." [penekanan saya]
djvg

Menggunakan --longlebih baik tetapi kadang-kadang Anda mendapatkan hash pendek dan kadang-kadang 3 item dipisahkan oleh tanda hubung. Hari ini, saya menggunakan jawaban yang diterima. Kembali pada hari itu, saya tidak tahu tentang tag beranotasi - mungkin mereka bahkan tidak ada!
Steven Shaw

16

Cabang dengan hash pendek dan komentar terakhir:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

Saya memiliki Git versi 2.7.4 dengan pengaturan berikut:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Sekarang ketika saya melakukannya:

git log --pretty=oneline

Saya mendapatkan id komit yang terdiri dari delapan digit:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan mengapa pemecahan masalah akan meningkatkan nilai jangka panjang jawaban.
SherylHohman

1
Ide yang hebat. Menghargai itu, Sheryl
Down the Stream

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.