Apakah ada cara untuk menentukan kapan cabang Git dibuat? Saya memiliki cabang di repo saya dan dan saya tidak ingat membuatnya dan berpikir mungkin melihat cap waktu pembuatan akan menyita ingatan saya.
Apakah ada cara untuk menentukan kapan cabang Git dibuat? Saya memiliki cabang di repo saya dan dan saya tidak ingat membuatnya dan berpikir mungkin melihat cap waktu pembuatan akan menyita ingatan saya.
Jawaban:
Menggunakan
git show --summary `git merge-base foo master`
Jika Anda lebih suka melihatnya dalam konteks menggunakan gitk, maka gunakan
gitk --all --select-commit = `git merge-base foo master`
(Di mana foo adalah nama cabang yang Anda cari.)
Seperti yang ditunjukkan dalam komentar dan jawaban Jackub , selama cabang Anda lebih muda dari jumlah hari yang ditetapkan dalam pengaturan konfigurasi gc.reflogexpire
(defaultnya adalah 90 hari), maka Anda dapat menggunakan reflog Anda untuk mengetahui kapan referensi cabang dibuat pertama kali dibuat.
Catatan yang git reflog
dapat mengambil sebagian besar git log
bendera. Perhatikan lebih lanjut bahwa HEAD@{0}
penyeleksi gaya secara efektif adalah pengertian waktu dan, pada kenyataannya, ditangani (dengan cara diretas) sebagai string tanggal. Ini artinya Anda dapat menggunakan flag --date=local
dan mendapatkan output seperti ini:
$ git reflog --date = lokal 763008c HEAD @ {Fri 20 Agustus 10:09:18 2010}: pull: Maju cepat f6cec0a HEAD @ {Sel 10 Agustus 09:37:55 2010}: pull: Maju cepat e9e70bc KEPALA @ {Kamis 4 Feb 02:51:10 2010}: pull: Maju cepat 836f48c KEPALA @ {Kamis 21 Jan 14:08:14 2010}: checkout: pindah dari master ke master 836f48c HEAD @ {Thu 21 Jan 14:08:10 2010}: pull: Maju cepat 24bc734 HEAD @ {Rab 20 Jan 12:05:45 2010}: checkout: pindah dari 74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD @ {Rab 20 Jan 11:55:43 2010}: checkout: pindah dari master ke v2.6.31 24bc734 HEAD @ {Rab 20 Jan 11:44:42 2010}: pull: Maju cepat 964fe08 HEAD @ {Sen 26 Okt 15:29:29 2009}: checkout: pindah dari 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a KEPALA @ {Senin 26 Okt 14:52:12 2009}: checkout: pindah dari master ke v2.6.28
Mungkin juga berguna pada waktu untuk menggunakan --date=relative
:
$ git reflog --date = relatif 763008c HEAD @ {4 minggu lalu}: pull: Maju cepat f6cec0a HEAD @ {6 minggu lalu}: pull: Maju-cepat e9e70bc HEAD @ {8 bulan lalu}: pull: Maju cepat 836f48c HEAD @ {8 bulan lalu}: checkout: pindah dari master ke master 836f48c HEAD @ {8 bulan lalu}: pull: Maju cepat 24bc734 HEAD @ {8 bulan lalu}: checkout: pindah dari 74fca6a42863ffacaf7ba6f1936a9f228950f657 untuk dikuasai 74fca6a HEAD @ {8 bulan lalu}: checkout: pindah dari master ke v2.6.31 24bc734 HEAD @ {8 bulan lalu}: pull: Maju cepat 964fe08 HEAD @ {11 bulan lalu}: checkout: pindah dari 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 untuk dikuasai 4a6908a HEAD @ {11 bulan lalu}: checkout: pindah dari master ke v2.6.28
Satu catatan terakhir: --all
bendera (yang benar-benar merupakan bendera git-log yang dipahami oleh git-reflog) akan menunjukkan reflog untuk semua referensi yang dikenal di refs/
(bukan hanya, HEAD
) yang akan menunjukkan kepada Anda acara cabang dengan jelas:
git reflog --date = local --all 860e4e4 ref / kepala / master @ {Sun 19 Sep 23:00:30 2010}: commit: Kedua. 17695bc ref / kepala / example_branch @ {Senin 20 Sep 00:31:06 2010}: cabang: Dibuat dari HEAD
gc.reflogexpire
beberapa hari.
Pro Git § 3.1 Git Branching - Apa Cabang Apakah memiliki penjelasan yang baik tentang apa sebenarnya cabang git
Cabang di Git hanyalah sebuah pointer ringan yang dapat dipindahkan ke [a] commit.
Karena sebuah cabang hanyalah sebuah penunjuk yang ringan, git tidak memiliki gagasan eksplisit tentang sejarah atau tanggal pembuatannya. "Tapi tunggu dulu," Aku mendengar kamu berkata, "tentu saja git tahu sejarah cabang saya!" Yah, semacam itu.
Jika Anda menjalankan salah satu dari berikut ini:
git log <branch> --not master
gitk <branch> --not master
Anda akan melihat apa yang tampak seperti "sejarah cabang Anda", tetapi sebenarnya adalah daftar komitmen yang dapat dicapai dari 'cabang' yang tidak dapat dijangkau dari master. Ini memberi Anda informasi yang Anda inginkan, tetapi jika dan hanya jika Anda tidak pernah menggabungkan 'cabang' kembali ke master, dan tidak pernah menggabungkan master menjadi 'cabang' sejak Anda membuatnya. Jika Anda telah bergabung, maka riwayat perbedaan ini akan runtuh.
Untungnya reflog sering berisi informasi yang Anda inginkan, seperti dijelaskan dalam berbagai jawaban lain di sini. Gunakan ini:
git reflog --date=local <branch>
untuk menunjukkan sejarah cabang. Entri terakhir dalam daftar ini adalah (mungkin) titik di mana Anda membuat cabang.
Jika cabang telah dihapus maka 'cabang' bukan lagi pengenal git yang valid, tetapi Anda dapat menggunakan ini sebagai gantinya, yang mungkin menemukan apa yang Anda inginkan:
git reflog --date=local | grep <branch>
Atau di shell Windows cmd:
git reflog --date=local | find "<branch>"
Perhatikan bahwa reflog tidak akan bekerja secara efektif pada cabang-cabang jarak jauh, hanya yang Anda kerjakan secara lokal.
gc.reflogexpire
hari, sebagaimana ditunjukkan dalam jawaban dan jawaban ini .
git reflog --date=local <branch>
Pertama, jika cabang Anda dibuat dalam gc.reflogexpire
beberapa hari (default 90 hari, yaitu sekitar 3 bulan), Anda dapat menggunakan git log -g <branch>
atau git reflog show <branch>
untuk menemukan entri pertama di reflog, yang akan menjadi acara pembuatan, dan terlihat seperti di bawah ini (untuk git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
Anda akan mendapatkan siapa yang membuat cabang, berapa operasi yang lalu, dan dari cabang mana (yah, itu mungkin hanya "Created from HEAD", yang tidak banyak membantu).
Itulah yang dikatakan MikeSep dalam jawabannya .
Kedua, jika Anda memiliki cabang lebih lama dari gc.reflogexpire
dan Anda telah menjalankan git gc
(atau dijalankan secara otomatis), Anda harus menemukan leluhur bersama dengan cabang tempat cabang itu dibuat. Lihatlah file config, mungkin ada branch.<branchname>.merge
entri, yang akan memberi tahu Anda berdasarkan cabang apa ini.
Jika Anda tahu bahwa cabang yang dimaksud dibuat dari cabang master (bercabang dari cabang master), misalnya, Anda dapat menggunakan perintah berikut untuk melihat leluhur yang sama:
git show $(git merge-base <branch> master)
Anda juga bisa mencoba git show-branch <branch> master
, sebagai alternatif.
Inilah yang dikatakan gbacon dalam jawabannya .
Saya belum yakin dengan perintah git untuk itu, tapi saya pikir Anda dapat menemukannya di reflog.
.git/logs/refs/heads/<yourbranch>
File saya tampaknya memiliki cap waktu unix di dalamnya.
Pembaruan: Tampaknya ada opsi untuk menggunakan riwayat reflog alih-alih riwayat komit saat mencetak log:
git log -g
Anda dapat mengikuti log ini juga, kembali ke saat Anda membuat cabang. git log
menunjukkan tanggal komit, bukan tanggal ketika Anda membuat tindakan yang membuat entri di reflog. Saya belum menemukan itu kecuali dengan melihat reflog yang sebenarnya di jalan di atas.
Coba ini
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
sebelumnya(refname)
| cut -c 5- | sort -r |
dan kemudian menyalurkan melalui grep untuk bulan itu, memberi saya urutan kronologis terbalik daftar, kurang lebih.
--sort='-committerdate'
(perhatikan '-' sebelum committerdate untuk urutan kronologis terbalik).
Menggunakan:
git reflog
untuk menampilkan semua siklus hidup repositori Anda di folder saat ini. Nama cabang yang pertama kali muncul (dari bawah ke atas) adalah sumber yang telah dibuat.
855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development
855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development
535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce HEAD@{7}: checkout: moving from development to feature-jira35
855a3ce HEAD@{8}: checkout: moving from master to development
Itu berarti:
Pengembangan cabang dibuat (checkout -b) dari master
Fitur cabang-jira35 dibuat (checkout -b) dari pengembangan
Cabang fitur-jira-sut-46 dibuat (checkout -b) dari pengembangan
Ini adalah sesuatu yang saya buat sebelum saya menemukan utas ini.
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'
Perintah ini menunjukkan tanggal dibuat cabang dev
darimain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
Jika Anda ingin mendapatkan detail untuk semua cabang
for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
Saya menemukan cara terbaik: Saya selalu memeriksa cabang terbaru yang dibuat dengan cara ini
git for-each-ref --sort=-committerdate refs/heads/
Dikombinasikan dengan jawaban dari Andrew Sohn ( https://stackoverflow.com/a/14265207/1929406 )
branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
Ini berhasil untuk saya: (10 tahun kemudian)
git log [--remotes] --no-walk --decorate
Karena tidak ada informasi yang tersimpan pada waktu pembuatan cabang, yang dilakukan adalah menampilkan komit pertama dari masing-masing cabang ( --no-walk
), yang mencakup tanggal komit. Menggunakan--remotes
untuk cabang jarak jauh, atau hilangkan untuk cabang lokal.
Karena saya melakukan setidaknya satu komit di cabang sebelum membuat yang lain, ini memungkinkan saya melacak beberapa bulan kreasi cabang (dan mulai fitur dev) untuk keperluan dokumentasi.