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

Attila O.
sumber
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.
Kemungkinan duplikat git mendapatkan hash pendek dari hash biasa
Cristian Ciupitu

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.

Mark Longair
sumber
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 
Karl Bielefeldt
sumber
70
git log -1 --abbrev-commit

juga akan melakukannya.

git log --abbrev-commit

akan mendaftar entri log dengan singkatan SHA-1 checksum.

Sanjeev
sumber
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
The Gilbert Arenas Dagger
sumber
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
Steven Shaw
sumber
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
Fabrice
sumber
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
...
Down the Stream
sumber
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
1

bagaimana dengan ini :

git log --pretty="%h %cD %cn %s"  

itu menunjukkan sesuatu seperti:

674cd0d Rabu, 20 Nov 2019 12:15:38 +0000 Bob melakukan pesan

lihat dokumentasi format cantik masukkan deskripsi tautan di sini

kecepatan
sumber