Katakanlah saya memiliki grafik seperti ini:
A---B---C---D (master)
\
\-E---F (HEAD)
Jika saya melakukannya git log --all --oneline
, saya akan mendapatkan semua enam komitmen saya.
Tetapi jika grafiknya adalah
A---B---C---D (master, HEAD)
\
\-E---F
Saya tidak akan melihat E dan F. Bisakah saya meminta git untuk memberi tahu saya semua komitmen, termasuk yang ada di cabang yang tidak disebutkan namanya?
Terima kasih
commit --amend
ataurebase
dan yang tidak sengaja menjadi yatim piatu dengan bekerja dengan KEPALA lepas, katakanlah.git commit --amend
dll meninggalkan jalan buntu, kehilangan komitmen. Saya melakukan rebasing dan yang lainnya dan berakhir dengan beberapa komit yang tidak dapat dijangkau dari cabang mana pun, dan merasa agak kotor meninggalkan mereka di repo. Sekarang pikiran itu tidak cukup mengganggu lagi. :)git fsck --unreachable
tidak memberikan itu. Saya baru saja mencobanya. Pendekatan yang lebih baik adalah--reflog
pilihan untukgit log
, seperti yang dijawab kenorb . Apa yang sangat baik tentang ini adalah bahwa dikombinasikan dengan--graph
, Anda mendapatkan konteks visual yang mudah diurai, seperti yang diilustrasikan dalam pertanyaan asli. Misalnya, coba:git log --graph --all --oneline --reflog
Mencoba:
yang mencantumkan semua komit git dengan berpura-pura bahwa semua objek yang disebutkan oleh reflogs (
git reflog
) terdaftar pada baris perintah sebagai<commit>
.sumber
Ketika saya mengatasi masalah ini saya menggunakan perintah berikut:
Ini memungkinkan saya memvisualisasikan komitmen baru yang telah menjadi tanpa kepala.
Saya sudah membungkus ini dengan penolong naskah yang disebut
~/bin/git-reflog-gitk
.sumber
when the tips of branches and other references were updated in the *local repository*
. Anda mungkin ingin menggunakangit log --reflog
jika Anda ingin melakukan ini untuk perubahan referensi non-lokalApa yang menyelamatkan hidup saya adalah perintah berikut:
Di sana Anda menemukan layar dengan komit riwayat yang dilakukan untuk git seperti ini:
Pada titik ini, Anda hanya perlu menemukan
HEAD@{X}
yang Anda butuhkan, membuat cabang sementara dan pindah ke sana seperti ini:Dengan begitu Anda akan memiliki cabang sementara dengan komit Anda yang hilang tanpa rebasing atau menghancurkan lebih banyak gudang git Anda.
Semoga ini membantu...
sumber
Seperti @Kieran's Answer, tetapi untuk konsol:
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
sumber
git log --all
. Contoh cepat: Setelahgit reset --hard @^
komit @ @ 0 0 komit Anda hanya akan berada di reflog, dan karenagit reflog
tidak mendukung--graph
Anda harus melewati komitgit log --graph
untuk mendapatkan representasi visual.--reflog
sebagai gantinya$(git reflog | awk '{print $1}')
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
dengangit log --oneline --all --graph --decorate --reflog
, mereka hampir identik kecuali --reflog termasuk rincian seperti entri WIP.reflog
mengapa tidak digunakanlog --reflog
sebagai gantinya?Bagaimana saya mengatasi masalah ini? Gunakan
git fsck
dan masuk!Pertama buat file yang mengandung komit dan gumpalan yang hilang (tidak dapat dijangkau). (CATATAN: jika Anda melakukan sesuatu seperti
git gc
itu maka akan mengumpulkan sampah semua komitmen mereka dan Anda tidak akan menemukannya di sini!)Itu memberi Anda file seperti ini:
Anda kemudian dapat membuka file ini dengan editor teks favorit Anda untuk menyalin hash komit / blog dari sana. (* batuk * vim macro sangat cocok untuk ini * batuk *)
Sekarang Anda dapat masuk kembali dari komit ini dengan sesuatu seperti
git log --oneline <commit hash>
. Atau, gitk, tig, atau penampil git lainnya harus berfungsi.Dalam kasus Anda jika Anda menemukan hash untuk melakukan F log akan menunjukkan kepada Anda sesuatu seperti ini,
Cepat dan mudah! Sekarang Anda dapat menemukan konteks di balik semua komitmen yang menggantung itu.
PS Ya, saya tahu, posting terlambat, tapi oh well, seseorang mungkin menemukannya di sini dan merasa berguna. (Kemungkinan besar saya dalam 6 bulan ketika saya google ini lagi)
sumber
Saya beruntung dapat memulihkan komit dengan melihat reflog yang terletak di
.git/logs/HEAD
Saya kemudian harus scoll ke ujung file , dan saya menemukan komit saya baru saja kehilangan.
sumber
Kami akan
git log
kadang-kadang tidak baik untuk mendapatkan semua detil komit, sehingga untuk melihat ini ...Untuk Mac: Ikutilah proyek git Anda dan ketik:
untuk melihat Anda semua melakukan itu, atau:
untuk melihat Anda semua melakukan itu,
maka Anda dapat mengedit di salah satu browser favorit Anda.
sumber
@bimmons
Kemudian buat cabang untuk masing-masing:
Sekarang banyak alat akan menunjukkan kepada Anda visualisasi grafis dari komitmen yang hilang itu.
sumber
Jika Anda menggunakan Git Extensions GUI, ia dapat menunjukkan kepada Anda visualisasi grafis dari komitmen menjuntai jika Anda memeriksa "Lihat -> Tampilkan referensi reflog". Ini akan menunjukkan komit menggantung di pohon, seperti semua yang direferensikan lainnya. Dengan cara ini lebih mudah untuk menemukan apa yang Anda cari.
Lihat gambar ini untuk demonstrasi. Komit C2, C3, C4, dan C5 pada gambar menjuntai tetapi masih terlihat.
sumber
menyelamatkan saya! Saya kehilangan KEPALA saat saya bergabung dan tidak dapat menemukan daftar komitmen saya! Tidak ditampilkan di pohon sumber tetapi
git log --reflog
tunjukkan semua komit lokal saya sebelumnyasumber