Inilah yang terjadi:
Saya memiliki cabang A. Pada cabang AI melakukan banyak perubahan. Saya tidak puas dengan kodenya, jadi saya memeriksa komit sebelumnya di cabang A. Saya kemudian membuat lebih banyak perubahan dan berkomitmen pada cabang A. Sekarang saya tidak dapat menemukan komit ini di mana pun. Apakah saya kehilangan kode ini?
git reset
lebih sukagit checkout
?HEAD
dan cabang A akan tetap di commit sebelumnya. Tepatnya perintah apa yang Anda jalankan?Jawaban:
Komitmen lama masih dalam reflog.
Ini akan menampilkan daftar komit, dan komit yang "hilang" seharusnya ada di sana. Anda bisa membuatnya menjadi cabang baru. Misalnya, jika SHA-1 adalah ba5a739, Anda dapat membuat cabang baru bernama "new-branch" di komit lama dengan:
Perhatikan bahwa komit yang "hilang" akan terhapus saat database dipangkas.
sumber
git cherry-pick [SHA]
untuk memindahkan komit ke cabang yang ada jika Anda tidak sengaja berkomitmen saat berada dalam status kepala terpisahprune
komit akan menghapus juga terlepas yang sedang direferensikan dalam pesan komit? Atau itu membuat mereka bisa dihubungi ?Komit Anda masih tersedia di reflog, seperti yang sudah ditunjukkan. Selain jawaban lainnya, berikut adalah cara untuk mengambil alih komit HEAD yang terlepas ke cabang Anda saat ini secara langsung , tanpa membuat dan menggabungkan cabang baru:
Cari hash SHA-1 dari komit yang Anda buat dalam status HEAD terpisah
Kemudian jalankan, dengan semua hash komit yang diurutkan dari yang terlama ke terbaru:
Misalnya jika saya hanya punya satu, diberikan dalam format hash pendek "7 karakter pertama":
Ini akan membuat komit baru ke cabang Anda saat ini, satu komit per hash komit terpisah-HEAD yang Anda sebutkan di perintah. Itu juga mengambil alih pesan komit asli.
sumber
Anda mungkin menemukan komitmen yang hilang (menggantung) dengan perintah berikut:
Perhatikan, jika kepala Anda saat ini menggantung komit, itu tidak terdaftar sebagai hilang.
Anda dapat menemukan info lebih lanjut di git-fsck (1) Halaman Manual
Kemudian Anda dapat membuat cabang pada komit yang hilang itu:
sumber
Bahasa Git untuk status direktori kerja Anda adalah " HEAD terpisah ". Inilah tempat lain yang
git reflog
melakukan penyelamatan.Jika saya mencoba untuk memeriksa cabang yang berbeda, git-1.7.5.1 memberikan saran yang berguna.
sumber
Anda tidak kehilangannya, Git masih menyimpan salinannya (tetapi saat ini tidak dapat dijangkau oleh kepala cabang mana pun). Anda dapat menemukan komit Anda yang hilang menggunakan
git reflog
perintah. Reflog melacak posisi historis dari kepala cabang, dan Anda dapat menggunakannya untuk menemukan hal-hal yang ditunjuk oleh kepala cabang sebelumnya.sumber
Ikuti langkah-langkah ini untuk menautkan kepala Anda yang terpisah kembali ke git repo
git checkout "your branch with path but without remote name"
Misalnya jika nama remote adalah origin dan nama cabang
bugfix/somebranch
kemudian digunakangit checkout bugfix/somebranch
git reflog
dapatkan komit SHA yang terdaftar dari daftar komit Anda dari cabang yang terpisah.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
SIAP!!
sumber
Di Sourcetree, saya menemukan bahwa git reflog tidak berfungsi, jadi saya menemukan cara melakukannya menggunakan GUI.
Pertama, coba temukan komit "hilang" dengan mencari pesan di Riwayat Perintah (tampilan: Tampilkan Output Perintah). Mudah-mudahan akan ada di perintah "Switching Branch" setelah komit yang hilang dan Anda akan melihat komentar komit dengan ID komit 1234567.
Bawa ID Komit itu ke langkah berikutnya.
Tekan tombol "Cabang" di toolbar bagian atas dan Anda akan mendapatkan dialog "Cabang Baru" di mana Anda dapat menentukan komit tertentu. Letakkan ID Komit di sana, tentukan nama cabang baru, tekan Buat Cabang dan Anda akan mendapatkan cabang baru dengan komit yang hilang!
Ini membawa kembali beberapa pekerjaan yang hilang untuk saya!
sumber