Saya telah mengerjakan sesuatu, dan memutuskan itu benar-benar kacau ... setelah melakukan beberapa hal. Jadi saya mencoba urutan berikut:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
Pada titik mana saya menerima pesan itu
Your branch is ahead of 'origin/master' by 2 commits.
Saya ingin membuang komit lokal saya , tanpa harus menghapus direktori lokal saya dan mengunduh ulang semuanya. Bagaimana saya bisa mencapai itu?
git fetch
dangit pull
- tarik adalah kombinasi fetch dan merge.Jawaban:
akan menghapus semua komit yang tidak berada di
origin/master
tempatorigin
nama repo danmaster
merupakan nama cabang.sumber
origin/master
adalah cabang yang melacakmaster
cabangorigin
repo jarak jauh.origin/master
adalah referensi kemaster
cabang dari jarak jauh yang disebutorigin
.Selain itu, terlepas dari jawaban oleh mipadi (yang seharusnya bekerja dengan cara), Anda harus tahu bahwa melakukan:
juga melakukan apa yang Anda inginkan tanpa
having to redownload everything
(kutipan Anda diparafrasekan). Itu karena repo lokal Anda berisi salinan repo jarak jauh (dan salinan itu tidak sama dengan direktori lokal Anda, bahkan tidak sama dengan cabang yang Anda periksa).Memusnahkan cabang sangat aman dan merekonstruksi cabang itu sangat cepat dan tidak melibatkan lalu lintas jaringan. Ingat, git terutama repo lokal dengan desain. Bahkan cabang terpencil memiliki salinan di lokal. Hanya ada sedikit metadata yang memberitahu git bahwa salinan lokal spesifik sebenarnya adalah cabang jarak jauh. Di git, semua file ada di hard disk Anda sepanjang waktu.
Jika Anda tidak memiliki cabang selain master, Anda harus:
sumber
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
ada di komputer lokal Anda. Itu salinan lokal Anda (penuh) dari cabang jarak jauh. Cabang terpencil sebenarnya adalahorigin master
.git branch -D master
itu tidak perlu, karena seperti yang ditunjukkan itu menghasilkan kesalahan.Apa yang saya lakukan adalah saya mencoba mengatur ulang keras ke HEAD. Ini akan menghapus semua komitmen lokal:
sumber
^
mewakili komit induk, jadi mengatur ulang untukHEAD^
membuang perubahan yang tidak dikomit dan memindahkan cabang ke komit sebelumnya, secara efektif "menghapus" komit terbaru (meskipun komit masih ada, cabang tidak menunjuk ke sana). Jawabannya hanya memiliki satu komit lokal dan sisanya adalah perubahan yang tidak dikomit. @karim @giangAnda harus berlari
Untuk mendapatkan semua perubahan dan kemudian Anda tidak akan menerima pesan dengan "cabang Anda ada di depan".
sumber
Saya telah melihat contoh di mana remote menjadi tidak sinkron dan perlu diperbarui. Jika a
reset --hard
ataubranch -D
gagal berfungsi, cobalahsumber
reset --hard
berhasil dalam situasi inireset --hard
seharusnya bekerja di sini. Namun, saya hanya menunjukkan bahwa kadang-kadang gagal untuk mereset cabang dengan benar dangit pull origin
akan menyinkronkan ulang remote dan memungkinkanreset --hard
berfungsi dengan baik.Saya harus melakukan:
seperti yang dikatakan git bahwa itu tidak ada, karena sudah dihapus dengan
sumber