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?

Stefan Kendall
sumber
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
bobDevil
sumber
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 .

Chetan
sumber
34

Jika Anda belum mendorong penghapusan, Anda bisa melakukannya:

$ git checkout deletedBranchName
amichaud
sumber
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 
Freelancer
sumber
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.

Cameron Skinner
sumber
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

Rajeev Jayaswal
sumber
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
greencheese
sumber
0

Ini bekerja untuk saya:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Alej priv
sumber