Bagaimana cara membuang semua perubahan yang dilakukan pada cabang?


116

Saya bekerja di sebuah cabang (yaitu design) dan saya telah membuat sejumlah perubahan, tetapi saya harus membuang semuanya dan mengatur ulang agar sesuai dengan versi repositori. Saya pikir git checkout designakan melakukannya, tetapi itu hanya memberi tahu saya bahwa saya sudah di cabang designdan bahwa saya memiliki 3 file yang dimodifikasi.

Bagaimana cara membuang perubahan tersebut dan mendapatkan cabang seperti sekarang di server jarak jauh?

Jawaban:


207

Catatan: Anda TIDAK DAPAT MENGURUNGKAN ini.

Coba git checkout -fini akan membuang semua perubahan lokal yang tidak dilakukan di SEMUA cabang dan master.


86

git reset --hard dapat membantu Anda jika Anda ingin membuang semuanya sejak commit terakhir Anda


6
ataugit reset --hard HEAD^
deadfish

28
git reset --hard HEAD^harus menjadi jawaban yang diterima. OP tidak bertanya tentang cabang lain ...
vphilipnyc

2
Saya mencoba ini, dan saya pikir itu menghapus semuanya sejak dorongan terakhir saya, bukan hanya komit terakhir saya.
Chase Roberts

3
Saya mencoba git reset --hard HEAD ^ dan masih meninggalkan banyak file yang tidak terlacak. Sekarang ke google cara menghapusnya dalam satu perintah sederhana.
John Deighan

20
git diff master > branch.diff
git apply --reverse branch.diff

Langkah-langkah ini bisa sangat berguna, jika tujuan Anda adalah menetapkan status cabang tertentu agar sama dengan cabang master. Untuk melakukannya, jalankan ini dari dalam cabang tertentu, dan kemudian hapus file .diff [nama cabang] setelah selesai menggunakangit rm [branch name].diff
karolus

18

Jika Anda tidak ingin ada perubahan apa pundesign dan pasti ingin mencocokkan cabang jarak jauh, Anda juga dapat menghapus cabang dan membuatnya kembali:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
juga: desain git checkout; git reset --hard origin / design
Dan

Saya juga akan berkomitmen sebelum menghapus cabang
Asarluhi

Jika Anda memiliki komit di cabang lokal yang tidak ada di remote, ini adalah resep untuk masuk ke situasi yang sangat membingungkan menurut saya. Saya pasti tidak akan menggunakan solusi ini.
erewok

1
@erewok: Ya, pertanyaannya memang secara khusus mengatakan bahwa penanya ingin membuang semua perubahan.
mipadi

Dan menurut saya jawaban ini tidak mencapai itu.
erewok

7

@Will, git immersion adalah tutorial git yang sangat bagus dan sederhana. ini akan menunjukkan kepada Anda cara membatalkan perubahan untuk kasus berikut: tidak bertahap, bertahap, dan berkomitmen. laboratorium 14-18


2
Saya hanya ingin mengatakan bahwa saya sekarang telah melakukan git immersion .. lebih dari setahun kemudian. OI! Aku seharusnya melakukan ini lebih cepat ...
Apakah

1
Ini perlu Rubydipasang .. yang sepertinya tidak selalu menjadi pilihan
Wisnu

5

Saat Anda ingin membuang perubahan di cabang lokal Anda, Anda dapat menyimpan perubahan ini menggunakan perintah git stash.

git simpanan simpan "some_name"

Perubahan Anda akan disimpan dan Anda dapat mengambilnya nanti, jika Anda mau atau Anda dapat menghapusnya. Setelah melakukan ini, cabang Anda tidak akan memiliki kode yang tidak terikat dan Anda dapat menarik kode terbaru dari cabang utama Anda menggunakan git pull.


4

Di root sumber: git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes


0

Metode REVERSIBLE untuk Membuang Semua Perubahan:

Saya menemukan pertanyaan ini setelah setelah melakukan penggabungan dan melupakan untuk checkout mengembangkan segera setelah itu. Anda dapat menebaknya: Saya mulai memodifikasi beberapa file langsung di master . D'Oh! Karena situasi saya hampir tidak unik (kita semua pernah melakukannya, bukan; ->), saya akan menawarkan cara reversibel yang biasa saya gunakan untuk membuang semua perubahan agar master terlihat seperti berkembang lagi.

Setelah melakukan a git diffuntuk melihat file apa yang diubah dan menilai ruang lingkup kesalahan saya, saya mengeksekusi:

git stash
git stash clear

Setelah terlebih dahulu menyembunyikan semua perubahan, selanjutnya mereka dibersihkan. Semua perubahan yang dibuat pada file karena kesalahan pada master hilang dan paritas dipulihkan.

Katakanlah sekarang saya ingin memulihkan perubahan itu. Aku bisa melakukan ini. Langkah pertama adalah menemukan hash dari simpanan yang baru saja saya bersihkan / jatuhkan:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Setelah mempelajari hash, saya berhasil memulihkan perubahan yang tidak dilakukan dengan:

git stash apply hash-of-cleared-stash

Saya tidak benar-benar ingin memulihkan perubahan itu, hanya ingin memvalidasi saya bisa mendapatkannya kembali, jadi saya menghapusnya lagi.

Pilihan lainnya adalah menerapkan simpanan ke cabang yang berbeda , daripada menghapus perubahan. Jadi dalam hal menghapus perubahan yang dibuat dari bekerja di cabang yang salah, stashmemberi Anda banyak fleksibilitas untuk memulihkan dari boo-boo Anda.

Anyhoo, jika Anda menginginkan cara yang dapat dibalik untuk menghapus perubahan pada cabang, hal tersebut di atas adalah cara yang kurang berbahaya dalam kasus penggunaan ini.


-1

git checkout -f

Ini cukup untuk pertanyaan Anda. Hanya masalahnya, setelah selesai, selesai. Tidak ada pengurungan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.