Saya punya proyek di mana saya berlari git init
. Setelah beberapa komitmen, saya lakukan git status
yang memberi tahu saya semuanya sudah mutakhir dan tidak ada perubahan lokal.
Kemudian saya melakukan beberapa perubahan berturut-turut dan menyadari bahwa saya ingin membuang semuanya dan kembali ke keadaan semula. Apakah perintah ini akan melakukannya untuk saya?
git reset --hard HEAD
sumber
git checkout path/to/file
hanya akan mengembalikan perubahan lokal kepath/to/file
git checkout .
dangit reset [--hard HEAD]
tidak berhasil, saya harus melakukangit clean -fd
untuk mengembalikan perubahan saya.git reset
tidak mengatur ulang perubahan Anda,git reset --hard
apakah itu.Catatan: Anda mungkin juga ingin menjalankan
sebagai
akan tidak menghapus file tidak terlacak, dimana git-bersih akan menghapus file dari direktori root dilacak yang tidak di bawah pelacakan git. PERINGATAN - HATI-HATI DENGAN INI! Sangat membantu untuk menjalankan dry-run dengan git-clean terlebih dahulu, untuk melihat apa yang akan dihapus.
Ini juga sangat berguna ketika Anda mendapatkan pesan kesalahan
Yang dapat terjadi ketika melakukan beberapa hal, salah satunya memperbarui salinan yang berfungsi ketika Anda dan teman Anda berdua menambahkan file baru dengan nama yang sama, tetapi dia melakukan itu ke dalam kontrol sumber terlebih dahulu, dan Anda tidak peduli menghapus salinan yang tidak dilacak. .
Dalam situasi ini, melakukan dry run juga akan membantu menunjukkan kepada Anda daftar file yang akan ditimpa.
sumber
Kloning ulang
.gitignore
(seperti membangun file).gitignore
Berikut ini adalah perintah lain yang saya lupa setiap hari.
Bersihkan dan atur ulang
.gitignore
(seperti membangun file).gitignore
Bersih
.gitignore
(seperti membangun file).gitignore
Setel ulang
.gitignore
(seperti membangun file).gitignore
Catatan
Test case untuk mengkonfirmasi semua hal di atas (gunakan bash atau sh):
Lihat juga
git revert
untuk membuat komitmen baru yang membatalkan komitmen sebelumnyagit checkout
untuk kembali ke masa sebelum komit sebelumnya (mungkin perlu menjalankan perintah di atas terlebih dahulu)git stash
sama seperti digit reset
atas, tetapi Anda dapat membatalkannyasumber
git clean -f -d -x
: jika opsi -x ditentukan, file yang diabaikan juga dihapus. Ini dapat, misalnya, berguna untuk menghapus semua produk build.- dari GIT docsJika Anda ingin mengembalikan semua perubahan DAN memperbarui dengan master jarak jauh saat ini (misalnya Anda menemukan bahwa kepala HEAD telah bergerak maju sejak Anda bercabang dan push Anda sedang 'ditolak') Anda dapat menggunakan
sumber
origin
dalamgit reset --hard origin/master
(yang berfungsi) - tanpanya (yaitugit reset --hard
) tidak ada yang berubah.Lihatlah ke git-reflog. Ini akan mencantumkan semua status yang diingatnya (standarnya adalah 30 hari), dan Anda cukup checkout yang Anda inginkan. Sebagai contoh:
sumber
git rebase -i
salah (berakhir dengan menghapus beberapa komitmen karena kesalahan pengeditan). Berkat tip ini saya kembali dalam keadaan baik!BAHAYA KE DEPAN: (baca komentar. Menjalankan perintah yang diajukan dalam jawaban saya mungkin menghapus lebih dari yang Anda inginkan)
untuk sepenuhnya menghapus semua file termasuk direktori yang harus saya jalankan
sumber
Setelah membaca banyak jawaban dan mencobanya, saya telah menemukan berbagai kasus tepi yang berarti kadang-kadang mereka tidak sepenuhnya membersihkan copy pekerjaan.
Inilah skrip bash saya saat ini untuk melakukannya, yang berfungsi sepanjang waktu.
Jalankan dari direktori copy root yang berfungsi.
sumber
error: pathspec 'HEAD' did not match any file(s) known to git.
git checkout HEAD
git reset --hard
mengembalikan file yang dilacak (dipentaskan atau tidak),git clean -f -d
menghapus file yang tidak terlacak, lalugit checkout -- HEAD
mengapa kita membutuhkan ini?cukup jalankan -
itu akan menghapus semua perubahan lokal Anda. dan Anda juga dapat menggunakannya nanti dengan menjalankan -
sumber
git stash pop
akan secara otomatis menghapus paling atas perubahan simpanan untuk Andagit stash drop
untuk menghapus status simpanan terbaru tanpa berlaku untuk copy pekerjaan.Saya bertemu masalah serupa. Solusinya adalah menggunakan
git log
untuk mencari versi komit lokal mana yang berbeda dari remote. (Misalnya versinya3c74a11530697214cbcc4b7b98bf7a65952a34ec
).Kemudian gunakan
git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
untuk mengembalikan perubahan.sumber
Saya mencari masalah serupa,
Ingin membuang komitmen lokal:
Begitu juga yang di bawah ini:
Memeriksa:
sekarang komit lokal hilang, kembali ke keadaan kloning awal, poin 1 di atas.
sumber
Anda mungkin tidak perlu / perlu menyimpan pekerjaan Anda / file di direktori kerja Anda, tetapi cukup singkirkan mereka sepenuhnya. Perintah
git clean
akan melakukan ini untuk Anda.Beberapa kasus penggunaan umum untuk melakukan ini adalah dengan menghapus cruft yang telah dihasilkan oleh gabungan atau alat eksternal atau menghapus file lain sehingga Anda dapat menjalankan build yang bersih.
Ingatlah bahwa Anda harus sangat berhati-hati dengan perintah ini, karena ini dirancang untuk menghapus file dari direktori kerja lokal Anda yang TIDAK DILACAK. jika Anda tiba-tiba berubah pikiran setelah menjalankan perintah ini, tidak akan kembali untuk melihat konten file yang telah dihapus. Alternatif yang lebih aman adalah mengeksekusi
git stash --all
yang akan menghapus semuanya tetapi menyimpan semuanya dalam simpanan. Simpanan ini kemudian dapat digunakan.
Namun, jika Anda benar-benar DO ingin menghapus semua file dan membersihkan direktori kerja Anda, Anda harus menjalankannya
git clean -f -d
Ini akan menghapus semua file dan juga sub-direktori yang tidak memiliki item apa pun sebagai hasil dari perintah. Hal yang cerdas untuk dilakukan sebelum menjalankan
git clean -f -d
perintah adalah menjalankannyayang akan menunjukkan kepada Anda pratinjau apa yang AKAN dihapus setelah mengeksekusi
git clean -f -d
Jadi di sini adalah ringkasan dari pilihan Anda dari yang paling agresif hingga paling tidak agresif
Opsi 1 : Hapus semua file secara lokal (Paling agresif)
Opsi 2 : Pratinjau dampak di atas (Pratinjau paling agresif)
Opsi 3 : Simpan semua file (Paling tidak agresif)
sumber
Coba ini untuk mengembalikan semua perubahan yang tidak dikomit di cabang lokal
Tetapi jika Anda melihat kesalahan seperti ini:
Anda dapat menavigasi ke folder '.git' lalu menghapus file index.lock:
Akhirnya, jalankan lagi perintah:
sumber
Pertanyaan ini lebih lanjut tentang reset / pengembalian repositori yang lebih luas, tetapi jika Anda tertarik untuk mengembalikan perubahan individu - Saya telah menambahkan jawaban yang sama di sini:
https://stackoverflow.com/a/60890371/2338477
Jawaban atas pertanyaan:
Cara mengembalikan perubahan individu dengan atau tanpa perubahan yang tersimpan dalam sejarah git
Cara kembali ke versi lama untuk memulai kembali dari kondisi yang sama
sumber