Lebih
Menemukan dan memulihkan file yang dihapus dalam repositori Git
Mengatakan I'm di sebuah repositori Git. Aku menghapus file dan melakukan perubahan itu. Saya terus bekerja dan membuat lebih banyak melakukan. Kemudian, saya menemukan saya perlu untuk mengembalikan file tersebut.
Aku tahu aku bisa checkout file menggunakan git checkout KEPALA^ foo.bar`, tapi aku don't benar-benar tahu ketika file yang telah dihapus.
- Apa yang akan menjadi cara tercepat untuk menemukan komitmen yang dihapus yang diberi nama file?
- Apa yang akan menjadi cara termudah untuk mendapatkan file kembali ke kerja saya copy?
I'm berharap aku don't harus secara manual browsing saya log, checkout seluruh proyek yang diberikan SHA dan kemudian secara manual copy file tersebut ke my asli proyek checkout.
2703
24
Menemukan komit terakhir yang mempengaruhi diberikan jalan. Sebagai file isn't di KEPALA melakukan, melakukan ini harus dihapus.
Kemudian checkout versi yang di lakukan sebelum, menggunakan karet (
^
) simbol:Atau dalam satu perintah, jika
$file
file tersebut.Jika anda menggunakan zsh dan memiliki EXTENDED_GLOB pilihan diaktifkan, karet simbol won't bekerja. Anda dapat menggunakan
~1
sebagai gantinya.Di mana
$melakukan
adalah nilai komit anda've ditemukan pada langkah 1, misale4cf499627
Untuk mengembalikan semua file yang dihapus di folder masukkan perintah berikut.
Aku datang untuk pertanyaan ini yang ingin mengembalikan file yang baru saja dihapus tapi saya tidak't belum dilakukan perubahan. Hanya dalam kasus anda menemukan diri anda dalam situasi ini, semua yang perlu anda lakukan adalah sebagai berikut:
git checkout KEPALA-path/ke/file.ext
Jika kau gila, gunakan
git-membagi dua
. Berikut ini's apa yang harus dilakukan:Sekarang ini's waktu untuk menjalankan tes otomatis. Shell perintah
'[ -e foo.bar ]'
akan mengembalikan 0 jikafoo.bar
ada, dan 1 jika tidak. "run" perintah git-membagi dua` akan menggunakan pencarian biner untuk secara otomatis menemukan komit pertama di mana tes gagal. Mulai pertengahan kisaran yang diberikan (dari yang baik sampai yang buruk) dan luka dalam setengah didasarkan pada hasil uji yang ditentukan.Sekarang anda'kembali pada komitmen yang dihapus itu. Dari sini, anda dapat melompat kembali ke masa depan dan menggunakan
git-kembalikan
untuk membatalkan perubahan,atau anda bisa kembali satu kali dan secara manual memeriksa kerusakan:
Favorit saya baru alias, berdasarkan bonyiii's jawaban (upvoted), dan saya sendiri jawaban tentang "Lulus argumen untuk Git alias command":
Saya telah kehilangan file yang telah dihapus oleh kesalahan beberapa komitmen yang lalu? Cepat:
Krisis dihindari.
Robert Dailey mengusulkan komentar berikut ini alias:
Dan jegan menambahkan komentar:
Jika anda tahu nama file, ini adalah cara yang mudah dengan perintah-perintah dasar:
Daftar semua komit untuk file itu.
Komit terakhir (paling atas) adalah salah satu yang dihapus file. Jadi, anda perlu untuk mengembalikan kedua untuk komit terakhir.
Untuk memulihkan dihapus dan berkomitmen file:
Itu diuji pada versi Git 1.7.5.4.
Jika anda hanya membuat perubahan dan menghapus file, tetapi tidak melakukan itu, dan sekarang anda putus dengan perubahan
tapi file yang dihapus tidak kembali, anda cukup melakukan perintah berikut:
Dan presto, file anda kembali.
I've got solusi.
git log --grep=*kata*
git log -Pedang
git log | grep --konteks=5 *kata*
git log --stat | grep --konteks=5 *kata*
# dianjurkan jika anda tidak ingat apa-apa3. Sekarang menggunakan komit id bfe68bd117e1091c96d2976c99b3bcc8310bebe7 lakukan:
Sebagai komit id referensi komit mana file sudah dihapus yang anda butuhkan untuk referensi komit sebelum bfe68b yang dapat anda lakukan dengan menambahkan
^1
. Ini berarti: memberi saya komit sebelum bfe68b.git undelete path/ke/file.ext
.bash_profile
(atau lainnya yang relevan file yang akan terbuka bila anda membuka command shell):git config --global alias.undelete '!sh -c "git checkout $(git rev-daftar -n 1 KEPALA - $1)^ -- $1" -'
git undelete path/ke/file.ext
Alias ini cek pertama untuk menemukan komit terakhir di mana file ini ada, maka tidak git checkout path file itu dari yang komit terakhir di mana file ini ada. source
Dalam banyak kasus, hal ini dapat berguna untuk menggunakan coreutils (grep, sed, dll.) dalam hubungannya dengan Git. Aku sudah tahu alat ini cukup baik, tapi Git kurang begitu. Jika saya ingin lakukan pencarian file yang dihapus, saya akan melakukan hal-hal berikut:
Ketika saya menemukan revisi/commit:
Sama seperti orang lain telah menyatakan di hadapan-ku.
File sekarang akan dikembalikan ke negara itu sebelum penghapusan. Ingat untuk kembali berkomitmen untuk bekerja pohon jika anda ingin menyimpan sekitar.
Jadi saya harus mengembalikan sekelompok file yang dihapus dari tertentu melakukan dan saya berhasil dengan dua perintah:
(Perhatikan trailing spasi di akhir setiap perintah.)
File telah ditambahkan ke .gitignore file dan kemudian dibersihkan dengan git rm, aku yang dibutuhkan untuk mengembalikan file tapi kemudian disimpan mereka. Aku telah ratusan file untuk memulihkan, hal mengetik secara manual untuk masing-masing file seperti dalam contoh-contoh lain akan menjadi terlalu lambat.
Sebenarnya, pertanyaan ini secara langsung tentang
Git
, tapi orang seperti saya bekerja dengan GUI alat-alat sepertiWebStorm
VCS lain dari mengetahui tentang gitcli
perintah.Saya klik kanan pada path yang berisi file yang dihapus, kemudian pergi ke
Git
dan kemudian klikShow History
.VCS alat tampilkan semua revisi kereta dan aku bisa melihat semua komit dan perubahan masing-masing dari mereka.
Maka saya pilih komit bahwa teman saya hapus
PostAd.js
file. sekarang lihat di bawah ini:Dan sekarang, saya bisa melihat keinginan saya dihapus file. Aku hanya klik-ganda pada nama file dan pulih.
Saya tahu jawaban saya adalah tidak
Git
perintah tapi hal ini cepat, handal dan mudah untuk pemula dan pengembang profesional. Webstorm VCS alat-alat yang mengagumkan dan sempurna untuk bekerja dengan Git` dan doesn't perlu plugin lain atau alat-alat.Saya memiliki pertanyaan yang sama. Tanpa sadar, aku telah menciptakan sebuah menjuntai melakukan.
Daftar menjuntai melakukan
git fsck-hilang-ditemukan
Memeriksa setiap menjuntai melakukan
git reset --hard <komit id>
File saya muncul kembali ketika saya pindah ke menjuntai melakukan.
git status
dengan alasan:"KEPALA terpisah dari <komit id di mana ia terpisah>"
Mengembalikan file yang dihapus:
Dalam kasus kami, kami tidak sengaja menghapus file dalam berbuat dan melakukan beberapa kemudian kami menyadari kesalahan kami dan ingin mendapatkan kembali semua file-file yang dihapus tetapi tidak dimodifikasi.
Berdasarkan Charles Bailey's jawaban yang sangat baik di sini adalah saya salah satu kapal:
Jika anda tahu melakukan itu dihapus file(s), jalankan perintah ini di mana
<SHA1_deletion>
adalah melakukan yang dihapus file:Bagian sebelum pipa berisi daftar semua file yang dihapus di commit; mereka semua checkout dari sebelumnya berkomitmen untuk mengembalikan mereka.
Menemukan berkomitmen bahwa dihapus file anda:
Contoh output:
Sebagai Git 2.23 sebenarnya ada
mengembalikan
perintah. Itu adalah masih eksperimental tapi dalam rangka untuk mengembalikan sesuatu yang anda dihapus dalam melakukan (4711174 dalam hal ini) anda dapat kemudian ketik:Catatan ^ setelah melakukan id seperti yang kita ingin mengembalikan sesuatu dari komit sebelum salah satu yang dihapus file.
The
--sumber
argumen menceritakanmengembalikan
perintah mana untuk mencari file(s) untuk mengembalikan dan hal ini dapat setiap melakukan dan bahkan indeks.Lihat: git-mengembalikan doc untuk git 2.23.0