Saya baru saja mengkloning repositori git dan memeriksa cabang. Saya mengerjakannya, dan kemudian memutuskan untuk menghapus semua perubahan lokal saya, karena saya ingin salinan aslinya.
Singkatnya, saya harus melakukan dua perintah berikut untuk menghapus perubahan lokal saya
git checkout .
git clean -f
Pertanyaanku adalah,
(1) Apakah ini pendekatan yang benar dalam menyingkirkan perubahan lokal, atau tolong beri tahu saya pendekatan yang benar.
(2) kapan kita menggunakan git reset --hard
karena saya dapat mengatur ulang bahkan tanpa perintah ini
Terima kasih
* Solusi: Sunting Utama: 03/26: * Mengganti banyak istilah yang tidak jelas dengan terminologi spesifik git [dilacak / tidak dilacak / dipentaskan / tidak dipentaskan]
Hanya ada tiga kategori file ketika kami membuat perubahan lokal:
Jenis 1. Staged Tracked files
Jenis 2. File Dilacak Tidak Stage
Ketik 3. File UnTracked UnTracked alias File UnTracked
- Staged - Mereka yang dipindahkan ke area staging / Ditambahkan ke indeks
- File yang dilacak - dimodifikasi
- Tidak dilacak - file baru. Selalu tidak panggung. Jika dipentaskan, itu berarti mereka dilacak.
Apa yang masing-masing perintah lakukan:
git checkout .
- HANYA Menghapus File yang Tidak Dilacak HANYA [Tipe 2]git clean -f
- HANYA Menghapus File UnTracked UnTracked [Tipe 3]git reset --hard
- Menghapus file yang dilacak bertahap dan dilacak tidak panggung hanya [tipe 1, tipe 2]git stash -u
- Menghapus semua perubahan [Tipe 1, Tipe 2, Tipe 3]
Kesimpulan:
Jelas bahwa kita dapat menggunakan keduanya
(1) combination of `git clean -f` and `git reset --hard`
ATAU
(2) `git stash -u`
untuk mencapai hasil yang diinginkan.
Catatan: Menyimpan, karena kata tersebut berarti 'Simpan (sesuatu) dengan aman dan diam-diam di tempat yang ditentukan.' Ini selalu dapat diambil menggunakan git stash pop
. Jadi memilih antara dua opsi di atas adalah panggilan pengembang.
Terima kasih Christoph dan Frederik Schøning.
Edit: 03/27
Saya pikir ada baiknya menaruh catatan ' waspada 'git clean -f
git clean -f
Tidak ada jalan untuk kembali. Gunakan -n
atau --dry-run
untuk melihat pratinjau kerusakan yang akan Anda lakukan.
Jika Anda ingin juga menghapus direktori, jalankan git clean -f -d
Jika Anda hanya ingin menghapus file yang diabaikan, jalankan git clean -f -X
Jika Anda ingin menghapus file yang diabaikan dan juga yang tidak diabaikan, jalankan git clean -f -x
referensi: lebih lanjut tentang git clean
: Bagaimana cara menghapus file lokal (tidak terlacak) dari pohon kerja Git saat ini?
Edit: 05/20/15
Membuang semua komit lokal di cabang ini [Menghapus komit lokal]
Untuk membuang semua komitmen lokal pada cabang ini, untuk membuat cabang lokal identik dengan "hulu" cabang ini, jalankan saja git reset --hard @{u}
Referensi: http://sethrobertson.github.io/GitFixUm/fixup.html
atau lakukan git reset --hard origin/master
[jika cabang lokal master
]
Catatan: 06/12/2015 Ini bukan duplikat dari pertanyaan SO lainnya yang ditandai sebagai duplikat. Pertanyaan ini membahas bagaimana cara menghapus perubahan GIT lokal [menghapus file yang ditambahkan, menghapus perubahan yang ditambahkan ke file yang ada, dll, dan berbagai pendekatan; Di mana di utas SO lainnya hanya membahas cara menghapus komit lokal. Jika Anda menambahkan file, dan Anda ingin menghapusnya sendiri, maka utas SO lainnya tidak membahasnya. Karenanya ini bukan duplikat dari yang lain]
Edit: 06/23/15
Bagaimana cara mengembalikan komit yang sudah didorong ke repositori jarak jauh?
$ git revert ab12cd15
Edit: 09/01/2015
Hapus komit sebelumnya dari cabang lokal dan cabang jarak jauh
Kasus: Anda baru saja melakukan perubahan ke cabang lokal Anda dan segera mendorong ke cabang terpencil, Tiba-tiba menyadari, Oh tidak! Saya tidak butuh perubahan ini. Sekarang lakukan apa?
git reset --hard HEAD~1
[untuk menghapus komit dari cabang lokal]
git push origin HEAD --force
[kedua perintah harus dijalankan. Untuk menghapus dari cabang jarak jauh]
Apa cabangnya? Ini adalah cabang yang sedang diperiksa.
Edit 09/08/2015 - Hapus git merge lokal :
Saya berada di master
cabang dan menggabungkan master
cabang dengan cabang yang baru bekerjaphase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
T: Bagaimana cara menyingkirkan gabungan ini? Mencoba git reset --hard
dan git clean -d -f
Keduanya tidak berhasil.
Satu-satunya hal yang berhasil adalah yang di bawah ini:
$ git reset --hard origin/master
atau
$ git reset --hard HEAD~8
atau
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - ini adalah kode yang ada sebelum semua komitmen gabungan Anda terjadi]
git stash -a
[atau --semua] juga akan menyimpan file yang diabaikan dan tidak terlacak. git clean -x
akan membersihkan file yang diabaikan juga. git clean -X
hanya akan membersihkan file yang diabaikan.