Dapat git membatalkan checkout file yang tidak dipentaskan
164
Saya tidak sengaja membuang perubahan saya pada file di pohon kerja lokal saya melalui checkout git. File tidak dipentaskan saat ini. Apakah mungkin untuk "membatalkan" checkout ini?
Tidak, kami tidak bisa, Tetapi jika Anda menggunakan gerhana kami dapat memeriksa Tim -> Sejarah Lokal
USM
Jawaban:
105
Saya percaya jika file diubah tetapi belum ditambahkan (dipentaskan), itu murni "pribadi".
Berarti itu tidak dapat dipulihkan oleh GIT jika ditimpa dengan indeks atau versi HEAD (kecuali jika Anda memiliki salinan karya Anda saat ini di suatu tempat). "
Konten "pribadi" adalah satu-satunya yang terlihat di direktori Anda saat ini, tetapi tidak terdaftar dengan cara apa pun di Git.
Saya mengerti bahwa perubahan pada file 'pribadi' tidak dapat diurungkan oleh git. Namun, jika file itu diubah oleh git (misalnya via git checkout --), saya berharap itu dapat membatalkan operasi itu, mungkin melalui reflog. Apakah itu harapan yang salah?
Ciprian Tomoiagă
2
@CiprianTomoiaga reflog untuk komitmen yang tidak direferensikan sebelumnya . Jika apa yang ingin Anda pulihkan tidak dilakukan (atau dipentaskan), reflog tidak akan membantu Anda.
VonC
3
@CiprianTomoiaga untuk segala jenis konten pribadi (belum ditambahkan), Anda hanya akan bergantung pada editor atau fitur IDE Anda. Contoh untuk eclipse: help.eclipse.org/neon/…
VonC
5
Wow! Luar biasa. Saya perlu memeriksa satu file jadi saya bermaksud mengetik git checkout folders/subfolders/filetetapi tekan enter secara tidak sengaja setelah sampai folderdan kehilangan semua pekerjaan saya. Saya adalah 1cm dari enter pada keyboard saya dan saya sering beralih di antara mesin dengan tata letak keyboard yang berbeda sehingga sering ada 10-15 menit dari jari-jari saya terbiasa dengan posisi baru. Sulit dipercaya pada tahun 2018 bahwa git membuang file-file walaupun dikatakan di dalam buku git bahwa git melakukan hal itu agar tidak kehilangan pekerjaan.
GM
1
@ gman apakah jawaban di bawah tentang "sejarah lokal" yang disediakan oleh IDE membantu Anda memulihkan pekerjaan Anda?
VonC
173
Jika Anda menggunakan IDE "profesional" kemungkinan besar Anda dapat mengembalikan file dari Sejarah lokal. Di Rubymine misalnya, Anda dapat mengeklik kanan file dan menonton riwayat perubahan yang terlepas dari perubahan git, menyelamatkan saya beberapa kali sekarang ^^
FYI fitur ini tersedia di seluruh keluarga JetBrains IDE "profesional": Pycharm, IDEA, PHPStorm, Webstorm. Selamatkan bakken saya hari ini. Terima kasih, Christoph!
Ben Roberts
6
Aku harus berterima kasih Saya menggunakan WebStorm, dan benar-benar lupa tentang fitur itu, meskipun saya cukup sering menggunakannya. Saya begitu terjebak dengan hilangnya kode, saya tidak memikirkannya!
Tyson Phalp
8
Dalam gerhana Anda dapat mengklik kanan pada file -> bandingkan dengan -> sejarah lokal
Maragues
5
hebat. Sublime2 undo juga memutar kembali perubahan yang dilakukan oleh checkout git yang tidak disengaja pada disk.
shuckc
8
Jika seseorang menemukan utas ini telah menghancurkan beberapa pekerjaan di XCode, ada cara untuk mendapatkan riwayat Hemat Otomatis. XCode sendiri tidak memiliki entri menu untuk melihat histori AutoSave, tetapi ia menyimpannya. Jika Anda membuka file yang dimaksud di TextEdit, Anda dapat mengembalikan dan melihat riwayat AutoSave di bawah File> Revert.
qingu
66
Jika Anda bekerja di editor seperti Sublime Text, dan file yang dimaksud masih terbuka, Anda dapat menekan ctrl + z, dan itu akan kembali ke keadaan sebelum git checkout.
Jawaban ini menyelamatkan hari saya. Terima kasih banyak!
feyyaz
Saya menemukan perbaikan ini secara tidak sengaja sekarang, dan akan mengirim jawaban baru. Sepertinya Sublime menangkap Git yang mengubah status file dalam riwayat modifikasi file-nya.
Timmah
Bekerja untuk saya di Ecipse.
Anomali
4
Bekerja untuk Visual Studio Code juga
intotecho
44
Sayangnya perubahan Anda hilang. Modifikasi pribadi Anda hanya ditimpa. Kecuali Anda melakukannya git stashsebelum melakukan checkout ...
Ambillah dari sisi yang lebih cerah: Anda sekarang dapat menerapkan hal-hal yang lebih baik;)
Baru saja melakukan kesalahan karena tidak melakukan perubahan saya dan memaksa checkout. Saya memeriksa riwayat lokal saya di Android Studio (lihat -> perubahan terbaru) dan mengembalikan perubahan terakhir yang saya buat. Info lebih lanjut di sini, jetbrains.com/help/idea/2016.3/…
emen
Ini berfungsi dengan baik di RubyMine, tindakan memusnahkan perubahan Anda akan dirujuk sebagai "Perubahan eksternal." Terima kasih banyak untuk Marcin ini, itu menyelamatkan saya satu jam dari pekerjaan yang hilang!
AndrewSouthpaw
25
Berkembang di OS X? Menggunakan Xcode? Anda mungkin beruntung!
Seperti dijelaskan dalam komentar oleh qungu , OS X memelihara riwayat versi file yang disimpan otomatis, bahkan jika Anda tidak menggunakan mesin waktu .
Jadi, jika Anda telah meledakkan perubahan lokal Anda yang tidak terencana dengan ceroboh git checkout ., inilah cara Anda mungkin dapat memulihkan semua pekerjaan Anda.
Jika seseorang menemukan utas ini telah menghancurkan beberapa pekerjaan di XCode, ada cara untuk mendapatkan riwayat Hemat Otomatis. XCode sendiri tidak memiliki entri menu untuk melihat histori AutoSave, tetapi ia menyimpannya. Jika Anda membuka file yang dimaksud di TextEdit, Anda dapat mengembalikan dan melihat riwayat AutoSave di bawah File> Revert.
Yang luar biasa, dan pulih sekitar satu hari kerja untuk saya, kemarin.
Anda mungkin bertanya, "Mengapa tidak git UI command-line, VCS utama yang digunakan untuk rekayasa perangkat lunak di2016201720182019, setidaknya buat cadangan file sebelum hanya membuangnya? Seperti, Anda tahu, alat perangkat lunak yang ditulis dengan baik selama sekitar tiga dekade terakhir. "
Atau mungkin Anda bertanya, "Mengapa fitur sejarah file yang luar biasa ini dapat diakses di TextEdit tetapi tidak Xcode di mana saya benar-benar membutuhkannya?"
... dan keduanya, saya pikir, akan memberi tahu Anda cukup banyak tentang industri kami. Atau mungkin Anda akan pergi dan memperbaiki alat-alat itu. Yang mana yang super.
Saya dapat mengkonfirmasi bahwa ini berfungsi. Ini baru saja menyelamatkan saya dari jam kerja!
Bruno Rocha
tidak bekerja untuk saya karena file yang bersangkutan Modelsayangnya
brahimm
@brahimm the Model?
Benjohn
1
Ini baru saja menyelamatkan saya dari sakit hati. Terima kasih banyak.
squarefrog
1
Sangat menarik: Saya mengklik kanan pada file sumber saya dan melihat menu "Open With". Baik TextEdit 1.14 dan TextEdit 1.6 ada sebagai pilihan. Hanya TextEdit 1.14 yang memiliki opsi untuk kembali ke revisi yang lebih lama. UI-nya sangat bagus, seperti TimeMachine.
bugloaf
7
Dalam VSCODE ctrl + z (batalkan) bekerja untuk saya
Saya melakukan git checkout .alih - alih git add .dan semua perubahan file saya hilang.
Tapi Sekarang menggunakan command + zdi mac saya, memulihkan perubahan dan menyimpan nada kerja untuk saya.
Penyelamat yang efektif untuk situasi semacam ini adalah Time Machine (OS X) atau sistem cadangan berbasis waktu yang serupa. Ini menyelamatkan saya beberapa kali karena saya dapat kembali dan mengembalikan hanya satu file itu.
Dear downvoter - dapatkah Anda menjelaskan bagaimana saya dapat meningkatkan jawaban ini?
sscirrus
1
Saya baru saja mengalami itu pada saya, saya memeriksa seluruh folder yang berisi jam kerja! Untungnya saya menemukan bahwa Netbeans IDE saya menyimpan sejarah setiap file, yang memungkinkan saya untuk memulihkan 99% dari hal-hal itu walaupun saya perlu memperbaiki beberapa hal secara manual.
Secara teknis ya. Tetapi hanya pada contoh tertentu. Misalnya, jika Anda memiliki halaman kode dan menekan git checkout, dan Anda menyadari bahwa Anda secara tidak sengaja memeriksa halaman yang salah atau sesuatu. Buka halaman dan klik undo. (bagi saya, perintah + z), dan itu akan kembali ke posisi Anda sebelumnya sebelum Anda menekan checkout git tua yang baik.
Ini tidak akan berfungsi jika halaman Anda telah ditutup, dan kemudian Anda menekan checkout git. Ini hanya berfungsi jika halaman kode yang sebenarnya terbuka
Jika Anda bekerja dengan / terminal cmd cepat terbuka, dan digunakan setiap perintah git yang akan menunjukkan perubahan luar area stage ( diff, add -p, checkout -p, dll), dan belum menutup / terminal cmd cepat karena, Anda akan menemukan perubahan tidak bertahap masih tersedia jika Anda menggulir ke tempat Anda menjalankan perintah-perintah git tersebut.
katakanlah Anda adalah pria yang sangat beruntung seperti saya, kembali ke editor Anda dan melakukan undo (perintah + Z untuk mac), Anda akan melihat konten Anda yang hilang di file. Semoga ini bisa membantu Anda. Tentu saja, ini hanya akan berfungsi untuk file yang ada.
Mungkin perubahan Anda tidak hilang. Periksa "git reflog"
Saya mengutip artikel di bawah ini:
"Pada dasarnya setiap tindakan yang Anda lakukan di dalam Git di mana data disimpan, Anda dapat menemukannya di dalam reflog. Git berusaha sangat keras untuk tidak kehilangan data Anda, jadi jika karena alasan tertentu Anda pikir itu memiliki, kemungkinan Anda dapat menggalinya menggunakan git reflog "
Jangan terlalu berharap - dapatkan reflog hanya membantu jika Anda telah berinteraksi dengan git dengan cara yang berarti. Hanya mengedit file, lalu membuangnya melalui checkout git? git tidak pernah punya kesempatan.
Bob Gilmore
1
+1 dari saya - Pikirkan nilainya menyebutkan di git reflogsini, saya menemukan jawaban ini ketika saya sedang mencari untuk membatalkan git checkout HEAD .- saya bermaksud mengetik git reset HEAD .- Saya baru saja melakukan 'git reset --soft HEAD ~ 1' dan tidak tahu tentang git refloghal itu bisa mendapatkan kembali pekerjaan yang telah saya lakukan :)
Russell England
1
Sayangnya git checkout <revision> dan git checkout <path> adalah dua perintah yang sama sekali berbeda dan tidak terkait. Yang pertama menyimpan perubahan lokal Anda, yang terakhir tidak.
Jawaban:
Saya percaya jika file diubah tetapi belum ditambahkan (dipentaskan), itu murni "pribadi".
Berarti itu tidak dapat dipulihkan oleh GIT jika ditimpa dengan indeks atau versi HEAD (kecuali jika Anda memiliki salinan karya Anda saat ini di suatu tempat). "
Konten "pribadi" adalah satu-satunya yang terlihat di direktori Anda saat ini, tetapi tidak terdaftar dengan cara apa pun di Git.
sumber
git checkout --
), saya berharap itu dapat membatalkan operasi itu, mungkin melaluireflog
. Apakah itu harapan yang salah?git checkout folders/subfolders/file
tetapi tekan enter secara tidak sengaja setelah sampaifolder
dan kehilangan semua pekerjaan saya. Saya adalah 1cm dari enter pada keyboard saya dan saya sering beralih di antara mesin dengan tata letak keyboard yang berbeda sehingga sering ada 10-15 menit dari jari-jari saya terbiasa dengan posisi baru. Sulit dipercaya pada tahun 2018 bahwa git membuang file-file walaupun dikatakan di dalam buku git bahwa git melakukan hal itu agar tidak kehilangan pekerjaan.Jika Anda menggunakan IDE "profesional" kemungkinan besar Anda dapat mengembalikan file dari Sejarah lokal. Di Rubymine misalnya, Anda dapat mengeklik kanan file dan menonton riwayat perubahan yang terlepas dari perubahan git, menyelamatkan saya beberapa kali sekarang ^^
sumber
Jika Anda bekerja di editor seperti Sublime Text, dan file yang dimaksud masih terbuka, Anda dapat menekan ctrl + z, dan itu akan kembali ke keadaan sebelum git checkout.
sumber
Sayangnya perubahan Anda hilang. Modifikasi pribadi Anda hanya ditimpa. Kecuali Anda melakukannya
git stash
sebelum melakukan checkout ...Ambillah dari sisi yang lebih cerah: Anda sekarang dapat menerapkan hal-hal yang lebih baik;)
sumber
Periksa riwayat lokal di IDE Anda.
sumber
Berkembang di OS X? Menggunakan Xcode? Anda mungkin beruntung!
Seperti dijelaskan dalam komentar oleh qungu , OS X memelihara riwayat versi file yang disimpan otomatis, bahkan jika Anda tidak menggunakan mesin waktu .
Jadi, jika Anda telah meledakkan perubahan lokal Anda yang tidak terencana dengan ceroboh
git checkout .
, inilah cara Anda mungkin dapat memulihkan semua pekerjaan Anda.Yang luar biasa, dan pulih sekitar satu hari kerja untuk saya, kemarin.
Anda mungkin bertanya, "Mengapa tidak git UI command-line, VCS utama yang digunakan untuk rekayasa perangkat lunak di
2016201720182019, setidaknya buat cadangan file sebelum hanya membuangnya? Seperti, Anda tahu, alat perangkat lunak yang ditulis dengan baik selama sekitar tiga dekade terakhir. "Atau mungkin Anda bertanya, "Mengapa fitur sejarah file yang luar biasa ini dapat diakses di TextEdit tetapi tidak Xcode di mana saya benar-benar membutuhkannya?"
... dan keduanya, saya pikir, akan memberi tahu Anda cukup banyak tentang industri kami. Atau mungkin Anda akan pergi dan memperbaiki alat-alat itu. Yang mana yang super.
sumber
Model
sayangnyaDalam VSCODE ctrl + z (batalkan) bekerja untuk saya
Saya melakukan
git checkout .
alih - alihgit add .
dan semua perubahan file saya hilang.Tapi Sekarang menggunakan
command + z
di mac saya, memulihkan perubahan dan menyimpan nada kerja untuk saya.sumber
Jika Anda pernah menyembunyikan perubahan sebelumnya (misalnya, sebelum rebasing), ini kemungkinan akan membantu
Bagaimana memulihkan simpanan yang dijatuhkan di Git?
bahkan jika Anda sudah 'menyimpan pop'ed perubahan.
sumber
Penyelamat yang efektif untuk situasi semacam ini adalah Time Machine (OS X) atau sistem cadangan berbasis waktu yang serupa. Ini menyelamatkan saya beberapa kali karena saya dapat kembali dan mengembalikan hanya satu file itu.
sumber
Saya baru saja mengalami itu pada saya, saya memeriksa seluruh folder yang berisi jam kerja! Untungnya saya menemukan bahwa Netbeans IDE saya menyimpan sejarah setiap file, yang memungkinkan saya untuk memulihkan 99% dari hal-hal itu walaupun saya perlu memperbaiki beberapa hal secara manual.
sumber
Saya biasanya memiliki semua pekerjaan saya di folder dropbox. Ini memastikan saya bahwa saya akan memiliki folder saat ini tersedia di luar mesin lokal saya dan Github. Saya pikir ini langkah saya yang lain untuk menjamin "kontrol versi" selain git. Anda dapat mengikuti ini untuk mengembalikan file Anda ke versi file dropbox Anda sebelumnya
Semoga ini membantu.
sumber
Secara teknis ya. Tetapi hanya pada contoh tertentu. Misalnya, jika Anda memiliki halaman kode dan menekan git checkout, dan Anda menyadari bahwa Anda secara tidak sengaja memeriksa halaman yang salah atau sesuatu. Buka halaman dan klik undo. (bagi saya, perintah + z), dan itu akan kembali ke posisi Anda sebelumnya sebelum Anda menekan checkout git tua yang baik.
Ini tidak akan berfungsi jika halaman Anda telah ditutup, dan kemudian Anda menekan checkout git. Ini hanya berfungsi jika halaman kode yang sebenarnya terbuka
sumber
Jika Anda bekerja dengan / terminal cmd cepat terbuka, dan digunakan setiap perintah git yang akan menunjukkan perubahan luar area stage (
diff
,add -p
,checkout -p
, dll), dan belum menutup / terminal cmd cepat karena, Anda akan menemukan perubahan tidak bertahap masih tersedia jika Anda menggulir ke tempat Anda menjalankan perintah-perintah git tersebut.sumber
Bung,
katakanlah Anda adalah pria yang sangat beruntung seperti saya, kembali ke editor Anda dan melakukan undo (perintah + Z untuk mac), Anda akan melihat konten Anda yang hilang di file. Semoga ini bisa membantu Anda. Tentu saja, ini hanya akan berfungsi untuk file yang ada.
sumber
Mungkin perubahan Anda tidak hilang. Periksa "git reflog"
Saya mengutip artikel di bawah ini:
"Pada dasarnya setiap tindakan yang Anda lakukan di dalam Git di mana data disimpan, Anda dapat menemukannya di dalam reflog. Git berusaha sangat keras untuk tidak kehilangan data Anda, jadi jika karena alasan tertentu Anda pikir itu memiliki, kemungkinan Anda dapat menggalinya menggunakan git reflog "
Lihat detail:
http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html
sumber
git reflog
sini, saya menemukan jawaban ini ketika saya sedang mencari untuk membatalkangit checkout HEAD .
- saya bermaksud mengetikgit reset HEAD .
- Saya baru saja melakukan 'git reset --soft HEAD ~ 1' dan tidak tahu tentanggit reflog
hal itu bisa mendapatkan kembali pekerjaan yang telah saya lakukan :)