Setelah komit terakhir, saya memodifikasi banyak file dalam copy pekerjaan saya, tetapi saya ingin membatalkan perubahan ke salah satu file tersebut, seperti di reset ke keadaan yang sama dengan komit terbaru.
Namun, saya hanya ingin membatalkan perubahan copy pekerjaan hanya dari satu file saja, tidak ada yang lain dengan itu.
Bagaimana aku melakukan itu?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
untuk 2 komit dari yang terbaru, atauHEAD^^^
untuk 3 komit. Anda juga dapat menggunakanHEAD~2
, atauHEAD~3
, yang menjadi lebih nyaman jika Anda ingin melakukan lebih banyak komit, sementara ituHEAD^2
berarti "induk kedua dari komit ini"; karena gabungan komit, komit dapat memiliki lebih dari satu komit sebelumnya, sehingga denganHEAD^
nomor memilih yang mana dari orangtua tersebut, sementara denganHEAD~
angka selalu memilih orangtua pertama tetapi jumlah komit kembali. Lihatgit help rev-parse
untuk lebih jelasnya.Gunakan saja
Ini akan mengganti nama file dengan versi terbaru dari cabang saat ini.
PERINGATAN: perubahan Anda akan dibuang - tidak ada cadangan yang disimpan.
sumber
git checkout x
dan x kebetulan merupakan nama cabang dan juga nama file, saya tidak yakin apa perilaku defaultnya tetapi saya pikir git akan menganggap Anda ingin beralih ke cabang x. Ketika Anda menggunakan--
Anda mengatakan bahwa yang berikut adalah nama file.--
. Meskipun masih benar, seperti yang ditunjukkan @hasen, jika ada ambiguitas antara nama file dan nama cabang, Anda mungkin berakhir dengan perilaku yang sangat tidak diinginkan di sini!--
, enak dan mudah. Ketika Anda memberi nama cabang menggunakan nama file, pasti ada pemikiran buruk di suatu tempat ...Saya menggunakan ini hari ini karena saya menyadari bahwa favicon saya telah ditimpa beberapa komit yang lalu ketika saya meningkatkan ke drupal 6.10, jadi saya harus mendapatkannya kembali. Inilah yang saya lakukan:
sumber
git log --oneline <filename>
akan memberi Anda log yang lebih ringkas, dan hanya menyertakan perubahan pada file tertentugit reflog <filename>
Jika file Anda sudah dipentaskan (terjadi ketika Anda melakukan git add dll setelah file diedit) untuk menghapus tahapan perubahan Anda.
Menggunakan
Kemudian
Jika belum dipentaskan, gunakan saja
sumber
Jika Anda ingin membatalkan perubahan komit sebelumnya pada satu file itu, Anda dapat mencoba ini:
Ini akan memeriksa file seperti sebelum komit terakhir. Jika Anda ingin kembali melakukan beberapa komitmen, gunakan
branchname~n
notasi.sumber
branchname^
Saya telah selesai melalui git bash:
(use "git checkout -- <file>..." to discard changes in working directory)
sumber
Saya selalu bingung dengan ini, jadi ini adalah test case pengingat; katakanlah kita memiliki
bash
skrip ini untuk diujigit
:Pada titik ini, perubahan tidak dilakukan dalam cache, demikian
git status
juga:Jika dari titik ini, kita lakukan
git checkout
, hasilnya adalah ini:Jika sebaliknya kita lakukan
git reset
, hasilnya adalah:Jadi, dalam hal ini - jika perubahan tidak dilakukan,
git reset
tidak ada bedanya, sambilgit checkout
menimpa perubahan.Sekarang, katakanlah bahwa perubahan terakhir dari skrip di atas dipentaskan / di-cache, artinya kita juga melakukannya
git add b.txt
di akhir.Dalam hal ini,
git status
pada titik ini adalah:Jika dari titik ini, kita lakukan
git checkout
, hasilnya adalah ini:Jika sebaliknya kita lakukan
git reset
, hasilnya adalah:Jadi, dalam hal ini - jika perubahan dipentaskan,
git reset
pada dasarnya akan membuat perubahan bertahap menjadi perubahan yang tidak dipentaskan - sementaragit checkout
akan menimpa perubahan sepenuhnya.sumber
Jawaban ini untuk perintah yang diperlukan untuk membatalkan perubahan lokal yang ada di beberapa file spesifik di folder yang sama atau lebih dari satu (atau direktori). Jawaban ini secara khusus menjawab pertanyaan di mana pengguna memiliki lebih dari satu file tetapi pengguna tidak ingin membatalkan semua perubahan lokal:
Untuk banyak file dalam folder yang sama:
Tanda bintang di atas melakukan trik membatalkan semua file di lokasi itu di bawah name1 / name2.
Catatan: name1, name2, nameA, subFolder - semua nama folder contoh ini menunjukkan folder atau paket tempat file tersebut berada.
sumber
Saya mengembalikan file saya menggunakan id SHA, Apa yang saya lakukan adalah
git checkout <sha hash id> <file name>
sumber
Bagi saya hanya ini yang berhasil
sumber
Jika Anda belum mendorong atau membagikan komitmen Anda:
sumber
Jika sudah dikomit, Anda bisa mengembalikan perubahan untuk file dan komit lagi, lalu squash komit baru dengan komit terakhir.
sumber
Saya tidak tahu mengapa, tetapi ketika saya mencoba memasukkan kode saya, itu muncul sebagai gambar.
sumber