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.Jawaban:
Semuanya tergantung pada apa yang ingin Anda batalkan / kembalikan. Mulailah dengan membaca posting di tautan Ube . Tetapi untuk mencoba jawaban:
Hard Reset pengaturan pabrik
sepenuhnya menghapus semua perubahan bertahap dan tidak bertahap untuk file yang dilacak.
Saya menemukan diri saya sering menggunakan pengaturan ulang yang sulit, ketika saya seperti "hanya membatalkan semuanya seperti jika saya telah melakukan kloning lengkap dari remote". Dalam kasus Anda, di mana Anda hanya menginginkan repo Anda yang asli, ini akan berhasil.
Bersih
Hapus file yang tidak dilacak.
Untuk menghapus file sementara, tetapi tetap melakukan perubahan bertahap dan tidak dipentaskan untuk file yang sudah dilacak. Sering kali, saya mungkin akan berakhir dengan mengabaikan-aturan alih-alih membersihkan berulang kali - misalnya untuk folder bin / obj dalam proyek C #, yang biasanya Anda ingin kecualikan dari repo Anda untuk menghemat ruang, atau sesuatu seperti itu.
Opsi -f (force) juga akan menghapus file, yang tidak dilacak dan juga diabaikan oleh git meskipun mengabaikan-aturan. Dalam kasus di atas, dengan aturan abaikan untuk tidak pernah melacak folder bin / obj, meskipun folder ini diabaikan oleh git, menggunakan opsi-paksa akan menghapusnya dari sistem file Anda. Saya secara sporadis telah melihat kegunaan untuk ini, misalnya saat scripting deployment, dan Anda ingin membersihkan kode Anda sebelum menggunakan, zip atau apa pun.
Git clean tidak akan menyentuh file, yang sudah dilacak.
Lihat "dot"
Sebenarnya saya belum pernah melihat notasi ini sebelum membaca posting Anda. Saya kesulitan menemukan dokumentasi untuk ini (mungkin seseorang dapat membantu), tetapi dari sedikit bermain-main, sepertinya artinya:
"batalkan semua perubahan di pohon kerja saya".
Yaitu membatalkan perubahan yang tidak bertahap dalam file yang dilacak. Tampaknya tidak menyentuh perubahan yang dipentaskan dan membiarkan file yang tidak dilacak sendirian.
Stashing
Beberapa jawaban menyebutkan menyembunyikan. Seperti kata-kata yang tersirat, Anda mungkin akan menggunakan simpanan ketika Anda berada di tengah-tengah sesuatu (tidak siap untuk komit), dan Anda harus sementara beralih cabang atau entah bagaimana bekerja pada keadaan lain dari kode Anda, kemudian kembali ke "berantakan" meja tulis". Saya tidak melihat ini berlaku untuk pertanyaan Anda, tetapi jelas berguna.
Untuk menyimpulkan
Secara umum, jika Anda yakin telah melakukan dan mungkin mendorong ke perubahan penting jarak jauh, jika Anda hanya bermain-main atau sejenisnya, menggunakan
git reset --hard HEAD
diikuti olehgit clean -f
akan secara pasti membersihkan kode Anda ke negara, itu akan berada di, seandainya itu sudah dikloning dan keluar dari cabang. Sangat penting untuk ditekankan, bahwa pengaturan ulang juga akan menghapus perubahan bertahap, tetapi tidak berkomitmen. Ini akan menghapus semua yang belum dilakukan (kecuali file yang tidak terlacak, dalam hal ini, gunakan clean ).Semua perintah lain ada untuk memfasilitasi skenario yang lebih kompleks, di mana diperlukan granularity "undoing stuff" :)
Saya merasa, pertanyaan Anda nomor 1 sudah tercakup, tetapi terakhir, untuk menyimpulkan pada # 2: alasan Anda tidak pernah menemukan kebutuhan untuk digunakan
git reset --hard
adalah bahwa Anda belum pernah melakukan apa pun. Memiliki Anda dipentaskan perubahan, baikgit checkout .
ataugit clean -f
akan dikembalikan itu.Semoga ini mencakup.
sumber
git reset --hard
. Aku mencoba keluar, dan ya .. file-file ditambahkan ke indeks (staging) telah dihapus hanya setelahgit reset --hard
, dan saya menganggap secara defaultgit reset --hard
adalahgit reset --hard head
. Tautan ini juga membantu gitready.com/beginner/2009/01/18/the-staging-area.htmlgit stash -u
paling masuk akal di sini.git stash -u
dilakukan dan bagaimana menghapusnya, tetapi Frederik memberi tahu saya pengaturan ulang dengan keras dan menggunakan kombinasi darigit reset --hard
dangit clean -f
, dan mengapa tidakstash
disukai dalam beberapa skenario. Sekarang Tolong bantu saya dalam memilih mana yang harus saya tandai sebagai Jawaban :), keduanya adalah jawaban saya..
adalah pathspec yang merujuk ke direktori kerja saat ini, yang mungkin merupakan akar dari repo. Dari git-scm.com:git checkout [<tree-ish>] [--] <pathspec>…
memperbarui jalur yang dinamai di pohon yang berfungsi dari file indeks atau dari yang bernama <tree-ish>.git reset --hard
dangit clean -dfx
sejenisnya merusak . Bagaimanapun, tolong perbaiki huruf kecilhead
di jawabannya, itu harus huruf besarHEAD
atau tidak ada sama sekali.Alasan untuk menambahkan jawaban saat ini:
Sejauh ini saya menambahkan kesimpulan dan 'jawaban' untuk pertanyaan awal saya sendiri, membuat pertanyaan itu sangat panjang, karenanya pindah ke jawaban yang terpisah.
Saya juga menambahkan lebih sering menggunakan perintah git yang membantu saya di git, untuk membantu orang lain juga.
Pada dasarnya untuk membersihkan semua komit lokal
$ git reset --hard
dan$ git clean -d -f
Langkah pertama sebelum Anda melakukan komit adalah mengkonfigurasi nama pengguna dan email yang muncul bersama dengan komit Anda.
# Atur nama yang ingin Anda lampirkan pada transaksi komit Anda
# Setel email yang ingin Anda tambahkan ke transaksi komit Anda
#Daftar konfigurasi global
#Daftar URL jarak jauh
# periksa status
#Daftar semua cabang lokal dan jarak jauh
#membuat cabang lokal baru dan mulai mengerjakan cabang ini
atau, dapat dilakukan sebagai proses dua langkah
buat cabang:
git branch branchname
kerjakan cabang ini:git checkout branchname
#komit perubahan lokal [proses dua langkah: - Tambahkan file ke indeks, itu berarti menambah area pementasan. Kemudian komit file yang ada di area pementasan ini]
#checkout beberapa cabang lokal lainnya
#hapus semua perubahan di cabang lokal [Misalkan Anda membuat beberapa perubahan di cabang lokal seperti menambahkan file baru atau memodifikasi file yang ada, atau membuat komit lokal, tetapi tidak lagi memerlukan itu]
git clean -d -f
dangit reset --hard
[bersihkan semua perubahan lokal yang dilakukan pada cabang lokal kecuali jika komit lokal]git stash -u
juga menghapus semua perubahanCatatan: Jelas bahwa kita dapat menggunakan (1) kombinasi dari
git clean –d –f
dangit reset --hard
ATAU (2)git stash -u
untuk mencapai hasil yang diinginkan.Catatan 1: Menyimpan, karena kata tersebut berarti 'Simpan (sesuatu) dengan aman dan diam-diam di tempat tertentu.' Ini selalu dapat diambil menggunakan pop git stash. Jadi memilih antara dua opsi di atas adalah panggilan pengembang.
Catatan 2:
git reset --hard
akan menghapus perubahan direktori kerja. Pastikan untuk menyembunyikan perubahan lokal yang ingin Anda pertahankan sebelum menjalankan perintah ini.# Beralih ke cabang master dan pastikan Anda up to date.
git fetch
[ini mungkin diperlukan (tergantung pada konfigurasi git Anda) untuk menerima pembaruan pada asal / master]# Gabungkan cabang fitur ke cabang master.
# Reset cabang master ke kondisi asal.
# Secara tidak sengaja menghapus file dari lokal, bagaimana cara mengambilnya kembali? Lakukan
git status
untuk mendapatkan filepath lengkap dari sumber yang dihapusitu dia!
#Merge cabang master dengan someotherbranch
cabang lokal #rename
#hapus cabang lokal
Hapus cabang jauh
atau
#revert komit yang sudah didorong ke repositori jarak jauh
# cabang dari komit sebelumnya menggunakan GIT
#Ubah pesan komit dari komit terbaru yang telah didorong ke jarak jauh
# 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
Referensi: http://sethrobertson.github.io/GitFixUm/fixup.html atau lakukan
git reset --hard origin/master
[jika cabang lokal adalah master]# Kembalikan komit yang sudah didorong ke repositori jarak jauh?
# Hapus komit sebelumnya dari cabang lokal dan cabang jarak jauh
Use-Case: 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. 1 menunjukkan SATU komit yang Anda buat]git push origin HEAD --force
[kedua perintah harus dijalankan. Untuk menghapus dari cabang jarak jauh]. Cabang yang saat ini diperiksa akan disebut sebagai cabang tempat Anda melakukan operasi ini.# Hapus beberapa komit terbaru dari repo lokal dan jarak jauh dan pertahankan komit yang Anda inginkan. (semacam mengembalikan komit dari lokal dan jarak jauh)
Mari kita asumsikan Anda memiliki 3 komitmen yang Anda dorong ke cabang jauh bernama '
develop
'Untuk kembali ke komit lama (untuk mengubah status cabang)
git log --oneline --decorate --graph
// untuk melihat semua komid Andagit clean -d -f
// bersihkan setiap perubahan lokalgit reset --hard commitid-1
// secara lokal kembali ke komid inigit push -u origin +develop
// dorong status ini ke jarak jauh. + untuk melakukan push paksa# Hapus git merge lokal: Kasus: Saya berada di cabang master dan menggabungkan cabang master dengan fase2 cabang yang baru berfungsi
Pada master cabang
$ git merge phase2
$ git status
Pada master cabang
Cabang Anda di depan 'asal / master' oleh 8 komit.
T: Bagaimana cara menyingkirkan git git lokal ini? Mencoba
git reset --hard
dangit clean -d -f
Keduanya tidak berhasil. Satu-satunya hal yang berhasil adalah yang di bawah ini:reset $ git --barang asli / master
atau
reset $ git --hard HEAD ~ 8
atau
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - ini adalah kode yang ada sebelum semua komitmen gabungan Anda terjadi]#membuat file gitignore
touch .gitignore
// buat file di pengguna mac atau unixsampel .gitignore konten:
Tautan referensi ke lembar contekan GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
sumber
git push origin :branch-name
namun saya sarankan menggunakangit push origin --delete branchname
Seperti halnya semua yang ada di git, ada banyak cara untuk melakukannya. Dua perintah yang Anda gunakan adalah salah satu cara untuk melakukannya. Hal lain yang bisa Anda lakukan adalah menyembunyikannya
git stash -u
. The-u
memastikan bahwa baru ditambahkan file (tidak terlacak) juga disertakan.Hal yang berguna tentang
git stash -u
itugit stash pop
(itu seperti menghapus email di gmail di mana Anda bisa membatalkan jika Anda berubah pikiran setelah itu)Pada pertanyaan Anda yang lain,
git reset --hard
tidak akan menghapus file yang tidak terlacak sehingga Anda masih memerlukannyagit clean -f
. Tapigit stash -u
mungkin yang paling nyaman.sumber
git reset --hard
memang tidak akan menghapus file yang tidak dilacak , tetapi akan menghapus perubahan yang tidak terlacak, yaitu perubahan pada file, yang sudah ada dalam indeks. Saya yakin itulah yang Anda maksudkan :)git stash -u
, saya melihat respons ini dari git bash. "Direktori kerja tersimpan dan indeks negara WIP pada {branchname}. Mungkin ini disimpan adalah apa yang bisa kita ambil menggunakangit stash pop
.git stash -u
dilakukan dan bagaimana menghapusnya, tetapi Frederik memberi tahu saya pengaturan ulang dengan keras dan menggunakan kombinasi darigit reset --hard
dangit clean -f
, dan mengapa tidakstash
disukai dalam beberapa skenario. Sekarang Tolong bantu saya dalam memilih mana yang harus saya tandai sebagai Jawaban :), keduanya adalah jawaban saya.1. Saat Anda tidak ingin menyimpan perubahan lokal sama sekali.
Perintah ini akan sepenuhnya menghapus semua perubahan lokal dari repositori lokal Anda. Ini adalah cara terbaik untuk menghindari konflik selama perintah tarik, hanya jika Anda tidak ingin menyimpan perubahan lokal sama sekali.
2. Saat Anda ingin menyimpan perubahan lokal Anda
Jika Anda ingin menarik perubahan baru dari jarak jauh dan ingin mengabaikan perubahan lokal selama tarik ini,
Ini akan menyembunyikan semua perubahan lokal, sekarang Anda dapat menarik perubahan jarak jauh,
Sekarang, Anda dapat mengembalikan perubahan lokal Anda dengan,
sumber
git reset --hard
tidak menghapus semua perubahan lokal. Itu hanya menghapus modifikasi. Jika Anda ingin menghapus add, maka Anda juga harusgit clean -fd
Menggunakan:
Untuk membuang perubahan di direktori kerja.
sumber
Saya pikir git memiliki satu hal yang tidak terdokumentasi dengan jelas. Saya pikir itu sebenarnya diabaikan.
git checkout .
Man, kamu menyelamatkan hariku. Saya selalu memiliki hal-hal yang ingin saya coba menggunakan kode yang dimodifikasi. Tetapi hal-hal yang kadang-kadang berakhir mengacaukan kode yang dimodifikasi, menambahkan file baru yang tidak terlacak dll. Jadi yang ingin saya lakukan adalah, tahap apa yang saya inginkan, lakukan hal-hal yang berantakan, kemudian bersihkan dengan cepat dan lakukan jika saya senang.
Ada
git clean -fd
berfungsi baik untuk file yang tidak dilacak.Maka
git reset
cukup menghapus dipentaskan, tetapigit checkout
agak terlalu rumit. Menentukan file satu per satu atau menggunakan direktori tidak selalu ideal. Terkadang file yang diubah yang ingin saya singkirkan berada dalam direktori yang ingin saya simpan. Saya berharap untuk satu perintah ini yang hanya menghapus perubahan yang tidak dipentaskan dan Anda di sini Terima kasih.Tapi saya pikir mereka seharusnya memiliki
git checkout
tanpa opsi, menghapus semua perubahan yang tidak dipentaskan dan tidak menyentuh yang dipentaskan. Ini agak modular dan intuitif. Lebih seperti apagit reset
.git clean
juga harus melakukan hal yang sama.sumber
Cara terbaik adalah memeriksa perubahannya.
Mengubah file pom.xml dalam sebuah proyek bernama nama-proyek Anda dapat melakukannya:
sumber
Untuk membuang semua yang saya suka simpanan dan jatuhkan simpanan itu, ini adalah cara tercepat untuk membuang semua, terutama jika Anda bekerja di antara beberapa repo.
Ini akan menyimpan semua perubahan pada
{0}
kunci dan langsung membatalkannya{0}
git stash && git stash drop
sumber
Pertama-tama, periksa apakah perubahan penting Anda berhasil atau tidak dengan:
daripada mencoba
tetapi jika Anda hanya perlu membatalkan:
Baca lebih lanjut >> https://git-scm.com/docs/git-reset
sumber