Git undo hapus cabang lokal


377

Saya baru saja menghapus cabang yang salah dengan beberapa perubahan eksperimental yang saya perlukan git branch -D branchName.

Bagaimana cara memulihkan cabang?


7
Senang mengetahui bahwa saya bukan satu-satunya yang lumpuh yang melakukan ini (dan lupa untuk secara teratur mendorong ke jauh salinan)
— Ray

Jawaban:


719

Anda dapat menggunakan git reflog untuk menemukan SHA1 dari commit terakhir dari cabang. Dari titik itu, Anda bisa membuat ulang cabang menggunakan

git branch branchName <sha1>

Sunting: Seperti yang dikatakan @seagullJS, branch -Dperintah memberitahu Anda sha1, jadi jika Anda belum menutup terminal namun itu menjadi sangat mudah. Misalnya ini menghapus dan kemudian segera mengembalikan cabang bernama master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git memberi tahu Anda apa SHA1 itu ketika cabang dihapus, jadi jika Anda hanya menghapusnya mungkin hanya beberapa baris di baris perintah.
— seagullJS

jika cabang ini ada di server, atau Anda dapat menggunakangit branch branchName origin/branchName
— Florian Castellane

selain itu saya akhirnya menggunakan git cherry-pick <sha1> untuk memindahkan komit ke cabang
— Akin Okegbile

54

Jika Anda tahu SHA1 terakhir dari cabang, Anda dapat mencoba

git branch branchName <SHA1>

Anda dapat menemukan SHA1 menggunakan git reflog, dijelaskan dalam solusi di sini .


34

Jika Anda belum mendorong penghapusan, Anda bisa melakukannya:

$ git checkout deletedBranchName

Jawaban ini membuat Git Extensions tutup mulut tentang "cabang yang Anda coba tekan tampaknya merupakan cabang baru untuk remote ini." Terima kasih banyak.
— Omer

29

Jika Anda baru saja menghapus cabang, Anda akan melihat sesuatu seperti ini di terminal Anda:

Deleted branch branch_name(was e562d13)
  • di mana e562d13 adalah ID unik (alias "SHA" atau "hash"), dengan ini Anda dapat mengembalikan cabang yang dihapus.

Untuk memulihkan cabang, gunakan:

git checkout -b <branch_name> <sha>

misalnya :

git checkout -b branch_name e562d13 

4

Pertama: buat cadangan seluruh direktori Anda, termasuk direktori .git.

Kedua: Anda dapat menggunakan git fsck --lost-founduntuk mendapatkan ID dari komitmen yang hilang.

Ketiga: rebase atau gabungkan ke komit yang hilang.

Keempat: Selalu berpikir dua kali sebelum menggunakan -D atau --force with git :)

Anda juga bisa membaca diskusi yang bagus tentang cara memulihkan dari kesalahan semacam ini.

EDIT: Ngomong-ngomong, jangan lari git gc(atau membiarkannya berjalan sendiri - yaitu jangan lari git fetchatau yang serupa) atau Anda mungkin kehilangan komitmen untuk selamanya.


1
1 dan 4 adalah IMO yang berlebihan.
— jwg

ya, itu sebabnya kami menggunakan git, untuk menghindari keharusan membawa semua itu. Setiap tindakan yang telah Anda lakukan masih tersedia untuk Anda.
— mateor

4

Terima kasih, ini berhasil.

git branch new_branch_name sha1

git checkout new_branch_name

// dapat melihat file-file lama saya yang sudah diperiksa di cabang lama saya


3

Ikuti langkah ini:

1: Masukkan:

git reflog show 

Ini akan menampilkan semua sejarah Komit, Anda harus memilih sha-1 yang memiliki komit terakhir yang ingin Anda kembalikan

2: buat nama cabang dengan ID Sha-1 yang Anda pilih misalnya: 8c87714

git branch your-branch-name 8c87714

0

Ini bekerja untuk saya:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.