Biasanya, untuk membuang perubahan pada file yang akan Anda lakukan:
git checkout -- <file>
Bagaimana jika perubahan yang ingin saya buang adalah menghapus file? Baris di atas akan memberikan kesalahan:
error: pathspec '<file>' did not match any file(s) known to git.
Perintah apa yang akan mengembalikan file tunggal itu tanpa membatalkan perubahan lain?
poin bonus: Juga, bagaimana jika perubahan yang ingin saya buang adalah menambahkan file? Saya ingin tahu bagaimana cara unstage perubahan itu juga.
git
git-checkout
lurscher
sumber
sumber
Jawaban:
Dengan asumsi Anda ingin membatalkan efek
git rm <file>
ataurm <file>
diikuti olehgit add -A
atau sesuatu yang serupa:Untuk membatalkan
git add <file>
, baris pertama di atas sudah cukup, dengan anggapan Anda belum berkomitmen.sumber
--
adalah kuncinya.git reset <file>
tidak bekerja, itulah yang membawaku ke sini.end-of-options-marker
diperlukan dalam case file yang dihapus?git reset HEAD <file>
, yang setara), tetapigit reset
memperlakukan argumen pertamanya sebelumend-of-options-marker
sebagai nama ref, bukan nama file. Mungkinkah itu ditulis sedikit lebih fleksibel? Mungkin. Kenapa tidak? Mungkin hanya pengembang yang tahu pasti.git reset filename
berfungsi dengan baik untuk file yang tidak dihapus.git reset <file>
dangit reset -- <file>
. Saya mengalami kesulitan menemukan jawaban untuk itu di google.Kedua pertanyaan dijawab dalam
git status
.Untuk menghapus tahapan menambahkan penggunaan file baru
git rm --cached filename.ext
Untuk menghapus tahapan menghapus penggunaan file
git reset HEAD filename.ext
Di sisi lain,
git checkout --
jangan pernah turun panggung, itu hanya membuang perubahan yang tidak dipentaskan.sumber
git status
dikutip; menunjukkan kepada pengguna cara untuk membantu sendiri sekarang dan nanti, dan jika informasi ditambahkan atau diperbarui di versi git yang akan datang.git reset
. Setelah itugit reset
, Anda melihat "Berubah tetapi tidak diperbarui" yang berarti "Perubahan tidak dipentaskan" dalam bahasa asli penulis git, tampaknya. Lebih penting lagi, seluruh dogma tentang "status git memberi tahu Anda semua yang Anda tahu" adalah bohong. (Manajer yang mengatakan bahwa itu membuang-buang waktu orang dan harus dipecat.)Jawaban untuk dua pertanyaan Anda terkait. Saya akan mulai dengan yang kedua:
Setelah Anda mementaskan file (sering kali dengan
git add
, meskipun beberapa perintah lain secara implisit juga melakukan tahapan perubahan,git rm
Anda) dapat mundur dari perubahan itu dengangit reset -- <file>
.Dalam kasus Anda, Anda harus menggunakan
git rm
untuk menghapus file, yang setara dengan hanya menghapusnya denganrm
dan kemudian menentukan perubahan itu. Jika Anda pertama kali membatalkan stage dengangit reset -- <file>
Anda, maka Anda dapat memulihkannya dengangit checkout -- <file>
.sumber
Jika telah dipentaskan dan dikomit, maka yang berikut ini akan mengatur ulang file:
Ini akan berfungsi untuk penghapusan yang terjadi beberapa komit sebelumnya.
sumber
git revert COMMIT_HASH
Pada git v2.23 , Anda memiliki opsi lain:
git restore --staged -- <file>
sumber