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?

Akan
sumber

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.

ismail
sumber
86

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

gor
sumber
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
Mike Kaganski
sumber
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
mipadi
sumber
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

Cesar A. Rivas
sumber
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.

pengguna4948761
sumber
4

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

Clifford Harms
sumber
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.

F1Linux
sumber
-1

git checkout -f

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

bintang
sumber