Dalam Git, cabang hanyalah pointer (referensi) untuk melakukan dalam grafik asiklik diarahkan (DAG) dari komitmen. Ini berarti bahwa menghapus cabang hanya menghapus referensi untuk melakukan, yang mungkin membuat beberapa komitmen dalam DAG tidak dapat dijangkau, sehingga tidak terlihat. Tetapi semua komit yang ada di cabang yang dihapus masih ada di repositori, setidaknya sampai komit yang tidak terjangkau dipangkas (misalnya menggunakan git gc
).
Catatan yang git branch -d
akan menolak untuk menghapus cabang jika tidak yakin bahwa menghapusnya tidak akan meninggalkan komitmen yang tidak terjangkau. Anda perlu menggunakan yang lebih kuat git branch -D
untuk memaksa penghapusan cabang jika mungkin meninggalkan komitmen yang tidak terjangkau.
Perhatikan juga bahwa komit yang tidak dapat dijangkau, jika ada, hanya komit di antara ujung terakhir dari cabang yang dihapus dan komit yang digabungkan ke cabang lain yang sudah ada, komit yang ditandai, atau titik percabangan; mana yang lebih baru. Misalnya dalam situasi berikut:
---- O ---- * ---- * ---- / M ---- * <- master <- HEAD
\ /
\ --. ---- .-- / - x --- y <- cabang yang dihapus
hanya melakukan 'x' dan 'y' akan menjadi tidak dapat dijangkau setelah menghapus cabang.
Jika Anda beroperasi pada cabang yang dihapus dalam gc.reflogExpire
periode tersebut, default 90 hari, Anda akan memiliki tip terakhir dari cabang yang dihapus dicatat dalam reflog HEAD (lihat git reflog show HEAD
, atau git log --oneline --walk-reflogs HEAD
). Anda harus dapat menggunakan reflog HEAD untuk memulihkan pointer yang dihapus. Perhatikan juga bahwa dalam kasus ini, komit yang tidak dapat dijangkau hanya dalam cabang yang dihapus akan dilindungi dari pemangkasan (penghapusan) dalam gc.reflogExpireUnreachable
periode, yang secara default adalah 30 hari.
Jika Anda tidak dapat menemukan ujung cabang yang baru saja dihapus di reflog untuk HEAD, Anda dapat mencoba menggunakan git fsck
untuk menemukan "komit yang tidak dapat dijangkau <sha1>", dan periksa yang (melalui git show <sha1>
atau git log <sha1>
) untuk menemukan ujung cabang yang dihapus.
Independen tentang bagaimana Anda menemukan ujung cabang yang dihapus, Anda dapat membatalkan penghapusan, atau lebih tepatnya membuat kembali cabang yang baru saja dihapus menggunakan
git branch <deleted-branch> <found-sha1-id>
Namun perlu dicatat bahwa reflog untuk cabang akan hilang.
Ada juga skrip git-resurrect.shcontrib/
yang membantu menemukan jejak tip cabang dengan nama yang diberikan dan membangkitkan (membatalkan penghapusan) itu.