Jika Git menampilkan HEAD detached, file Anda masih di-checkout pada suatu commit, tetapi commit baru tidak akan memajukan branch sampai Anda membuatnya. Di Mac, buka Terminal, buka repositori, periksa perubahan yang belum di-commit, lalu tautkan pekerjaan Anda saat ini ke branch baru atau kembali dengan aman ke branch yang ingin Anda gunakan. Perintah switch dari Git mendukung kedua jalur tersebut. Panduan Terminal Apple menjelaskan cara membuka Terminal; dokumentasi switch Git mendokumentasikan perilaku branch dan detached HEAD.

1. Periksa apa yang telah di-checkout oleh Git

Buka Terminal dari Applications > Utilities, lalu berpindahlah ke repositori Anda. Ganti contoh jalur dengan folder tempat proyek Anda berada; tanda kutip memungkinkan penggunaan spasi pada jalur file. Terminal macOS menggunakan zsh secara default, dan perintah-perintah ini berfungsi di zsh serta shell umum lainnya.

cd "/path/to/your/repository"
git status

Jika git status menyatakan “HEAD detached” atau “not on any branch”, Anda berada dalam kondisi detached HEAD. Git telah melakukan checkout langsung ke sebuah commit, bukan ke sebuah branch. Commit dan file kerja tetap tersedia; risikonya adalah commit yang dibuat di sini tidak secara otomatis terikat pada suatu branch. Panduan checkout Git menjelaskan kondisi ini dan bagaimana branch dapat mempertahankan commit yang dibuat di sana.

Sebelum beralih ke mana pun, baca bagian selebihnya dari git status. Jika terdapat daftar file yang dimodifikasi (modified) atau tidak terlacak (untracked), itu adalah perubahan yang belum di-commit. Anda dapat terus bekerja di tempat, atau membuat branch sekarang; membuat branch pada commit saat ini tidak akan membuang hasil editan. Hindari opsi force atau discard selama proses pemulihan.

2. Simpan pekerjaan saat ini di sebuah branch

Jika Anda telah membuat commit saat dalam kondisi detached—atau ingin terus bekerja dari snapshot persis ini—buatlah branch di posisi Anda saat ini:

git switch -c recovered-work
git status

Gunakan nama branch yang deskriptif untuk menggantikan recovered-work. Git akan membuat branch pada commit saat ini dan beralih ke branch tersebut, sehingga commit berikutnya akan menjadi bagian dari branch itu. Pastikan bahwa git status sekarang menampilkan nama branch tersebut. Ini adalah cara pemulihan tercepat jika snapshot yang detached tersebut merupakan pekerjaan yang ingin Anda simpan. Dokumentasi Git menjelaskan switch -c sebagai pembuatan sekaligus pengalihan ke suatu branch.

Jika Anda memiliki perubahan yang belum di-commit, perubahan tersebut biasanya tetap berada di working tree saat Anda membuat branch. Periksa git status setelahnya untuk memastikan perubahan tersebut masih ada. Jika perintah ditolak karena branch dengan nama tersebut sudah ada, pilihlah nama lain; jangan menambahkan opsi -C, yang dapat me-reset branch yang sudah ada ke titik awal yang baru.

3. Kembali ke branch yang semula ingin Anda gunakan

Jika Anda hanya memeriksa sebuah commit dan tidak memiliki perubahan yang perlu disimpan, beralihlah ke branch yang dimaksud berdasarkan namanya. Contohnya:

git switch main

Gunakan nama branch yang sebenarnya di repositori Anda jika bukan main. Jika Git melaporkan bahwa perubahan lokal akan tertimpa, hentikan dan amankan perubahan tersebut terlebih dahulu: buat branch pemulihan seperti di atas, atau commit pekerjaan tersebut. Git biasanya memblokir perpindahan branch jika hal itu akan menghilangkan modifikasi lokal; hindari opsi --discard-changes selama pemulihan karena opsi ini akan me-reset indeks dan working tree agar sesuai dengan branch target. Manual git switch menjelaskan mekanisme pengaman serta opsi-opsi ini.

Jika Anda baru saja beralih dari suatu branch secara tidak sengaja, git switch - akan mengembalikan Anda ke branch atau commit sebelumnya yang tercatat dalam riwayat perpindahan Git baru-baru ini. Periksa git status setelah beralih untuk memastikan posisi Anda berada.

4. Temukan commit detached yang Anda tinggalkan sebelumnya

Jika Anda sudah terlanjur beralih dan tidak ingat ke mana commit detached Anda pergi, periksa reflog lokal:

git reflog

Reflog mencatat pembaruan referensi lokal terbaru, dan reflog HEAD juga mencatat perpindahan branch. Cari entri dengan pesan commit atau waktu yang sesuai dengan pekerjaan Anda. Untuk memeriksa kandidat commit tanpa mengubah apa pun, salin commit ID pendeknya dari reflog dan jalankan:

git show --stat COMMIT_ID

Ganti COMMIT_ID dengan ID yang sebenarnya—jangan mengetik teks placeholder tersebut secara harfiah. Jika itu adalah commit yang benar, amankan dengan membuat branch pada commit tersebut:

git switch -c recovered-work COMMIT_ID

Langkah ini membuat commit tersebut dapat dijangkau kembali oleh suatu branch. Reflog merupakan catatan lokal, dan entrinya dapat kedaluwarsa; dokumentasi Git mendeskripsikannya sebagai catatan pembaruan referensi terbaru dan menjelaskan perilaku masa berlakunya. Lihat git reflog.

5. Verifikasi sebelum melanjutkan

Jalankan git status dan git log -1 --oneline untuk memastikan branch saat ini dan commit terbaru. Jika pekerjaan Anda sebelumnya belum di-commit, pastikan file-filenya masih muncul dalam output status. Jika tidak ada kandidat yang muncul di reflog, pemulihan mungkin memerlukan pemeriksaan dangling objects; itu adalah langkah terpisah yang membutuhkan kehati-hatian lebih, dan Anda sebaiknya menghindari menjalankan perintah pembersihan seperti git gc selama pencarian.

Kondisi detached HEAD bukan berarti pekerjaan Anda lenyap. Pemulihan yang tepat bergantung pada apakah Anda perlu menyimpan commit saat ini, kembali ke branch yang ada, atau menemukan commit setelah beralih. Branch yang dibuat pada commit yang tepat memberi Git referensi bernama untuk diikuti saat Anda melanjutkan pekerjaan.

Sumber