Karena beberapa pemetikan ceri yang buruk, repositori lokal Git saya saat ini lima komit di depan, dan tidak dalam keadaan baik. Saya ingin menyingkirkan semua komitmen ini dan memulai dari awal lagi.
Jelas, menghapus direktori kerja saya dan kloning ulang akan melakukannya, tetapi mengunduh semuanya dari GitHub lagi sepertinya berlebihan, dan tidak menggunakan waktu saya dengan baik.
Mungkin git revert
itulah yang saya butuhkan, tetapi saya tidak ingin mengakhiri 10 komitmen di atas asal (atau bahkan enam), bahkan jika itu mendapatkan kode itu sendiri kembali ke keadaan yang benar. Saya hanya ingin berpura-pura setengah jam terakhir tidak pernah terjadi.
Apakah ada perintah sederhana yang akan melakukan ini? Sepertinya kasus penggunaan yang jelas, tapi saya tidak menemukan contohnya.
Perhatikan bahwa pertanyaan ini khusus tentang komitmen , bukan tentang:
- file yang tidak dilacak
- perubahan tidak bertahap
- dipentaskan, tetapi perubahan tidak dikomit
Jawaban:
Jika kelebihan Anda hanya terlihat oleh Anda, Anda bisa melakukannya
git reset --hard origin/<branch_name>
untuk kembali ke tempat asalnya. Ini akan mengatur ulang keadaan repositori ke komit sebelumnya, dan itu akan membuang semua perubahan lokal.Melakukan
git revert
membuat baru berkomitmen untuk menghapus tua komit dengan cara yang membuat waras sejarah semua orang.sumber
git reset --hard <commit hash, branch, or tag>
jika Anda ingin pergi ke referensi spesifik selain cabang jarak jauh.master
tetapi pada cabang lain, Anda harus menjalankangit reset --hard origin/<your-branch-name>
git reset --hard origin/<branch_name>
Ini akan mengatur ulang konfigurasi proyek juga, jadi urus ini. Saya memiliki.cfg
file besar yang disetel ulang ke default. Saya harus menghabiskan berjam-jam untuk itu lagi.Cukup hapus cabang master lokal Anda dan buat kembali seperti ini:
sumber
git reset --hard origin/<branch_name>
Mencoba:
untuk mengatur ulang kepala Anda ke mana pun Anda inginkan. Gunakan gitk untuk melihat komit mana yang Anda inginkan. Anda dapat melakukan reset di dalam gitk juga.
sumber
Hapus komit terbaru:
git reset --hard HEAD~1
Hapus komit terbaru, tanpa merusak pekerjaan yang telah Anda lakukan:
git reset --soft HEAD~1
sumber
Jika Anda menggunakan aplikasi Atlassian SourceTree , Anda bisa menggunakan opsi reset di menu konteks.
sumber
Pada upaya cabang Anda:
Validasi pembalikan (ke negara, tanpa komitmen lokal), dengan menggunakan "
git log
" atau "git status
" karenanya.sumber
Just to be clear, if you're not working on master but on another branch, you should run git reset --hard origin/<your-branch-name>
git reset --hard @{u}
* menghapus semua perubahan lokal Anda di cabang saat ini, termasuk komit. Saya terkejut tidak ada yang memposting ini mengingat Anda tidak perlu mencari komitmen untuk kembali atau bermain dengan cabang.* Yaitu, reset ke cabang saat ini di —
@{upstream}
biasanyaorigin/<branchname>
, tetapi tidak selalusumber
Untuk melihat / mendapatkan id SHA-1 dari commit, Anda juga ingin kembali
Untuk memutar kembali ke komit itu
!Catatan. Semua komit yang dibuat setelah komit akan dihapus (dan semua modifikasi Anda untuk proyek). Jadi, pertama-tama, klon proyek ke cabang lain atau salin ke direktori lain.
sumber
Saya memiliki situasi di mana saya ingin menghapus komit yang tidak didorong, tetapi komit itu sebelum yang lain. Untuk melakukannya, saya telah menggunakan perintah berikut
git rebase -i HEAD~2
-> itu akan rebase dua komit terakhirDan saya menggunakan 'drop' untuk tanda tangan komit yang ingin saya hapus.
sumber
Hapus file yang tidak dilacak (perubahan lokal yang tidak dikomit)
Hapus semua komit lokal secara permanen dan dapatkan komit jarak jauh terbaru
sumber
Untuk komit lokal yang tidak didorong, Anda juga dapat menggunakan
git rebase -i
untuk menghapus atau menekan komit.sumber
git rebase -i
adalah cara yang lebih umum untuk menyelesaikan banyak masalah serupa dan dapat membantu dalam berbagai situasi.drop
kata kunci (alih-alih menghapus baris) saat menghapus semua komitmen untuk menghindari pembatalan rebase.Solusi sederhana adalah mencocokkan HEAD cabang master lokal dengan HEAD cabang asal / master
PS: origin / master - adalah remote pointer ke cabang master. Anda dapat mengganti master dengan nama cabang apa pun
sumber
Sebelum menjawab, mari tambahkan beberapa latar belakang, jelaskan apa ini
HEAD
. karena beberapa opsi di bawah ini akan menghasilkan kepala terpisahFirst of all what is HEAD?
HEAD
hanyalah referensi ke komit saat ini (terbaru) di cabang saat ini.Hanya ada satu
HEAD
pada waktu tertentu. (tidak termasukgit worktree
)Konten
HEAD
disimpan di dalam.git/HEAD
dan berisi 40 byte SHA-1 dari komit saat ini.detached HEAD
Jika Anda tidak menggunakan komit terbaru - artinya
HEAD
menunjuk komit sebelumnya dalam sejarah yang disebutdetached HEAD
.Pada baris perintah, ini akan terlihat seperti ini- SHA-1 bukan nama cabang karena
HEAD
tidak menunjuk ke ujung cabang saat iniBeberapa opsi tentang cara memulihkan dari HEAD yang terpisah:
git checkout
Ini akan mengecek cabang baru yang menunjuk ke komit yang diinginkan.
Perintah ini akan checkout ke komit yang diberikan.
Pada titik ini, Anda dapat membuat cabang dan mulai bekerja sejak saat ini.
git reflog
Anda selalu dapat menggunakan itu
reflog
juga.git reflog
akan menampilkan perubahan apa pun yang memperbaruiHEAD
dan memeriksa entri reflog yang diinginkan akan mengaturHEAD
kembali komitmen ini.Setiap kali KEPALA diubah akan ada entri baru di
reflog
Ini akan membuat Anda kembali ke komit yang Anda inginkan
git reset --hard <commit_id>
"Pindahkan" KEPALA Anda kembali ke komit yang diinginkan.
Anda juga bisa menggunakan itu
git rebase --no-autostash
.git revert <sha-1>
"Undo" rentang komit atau komit yang diberikan.
Perintah reset akan "membatalkan" setiap perubahan yang dilakukan dalam komit yang diberikan.
Komit baru dengan undo patch akan dilakukan sementara komit asli akan tetap ada dalam sejarah juga.
Skema ini menggambarkan perintah mana melakukan apa.
Seperti yang Anda lihat ada
reset && checkout
modifikasiHEAD
.sumber
Bagi mereka yang tertarik dengan solusi Visual Studio, berikut adalah latihannya:
Team Explorer
jendela, sambungkan ke repo target.Branches
, klik kanan cabang yang diinginkan dan pilihView history
.History
jendela dan pilihReset -> Delete changes (--hard)
.Itu akan membuang komit lokal Anda dan mengatur ulang status repo Anda ke komit yang dipilih. Yaitu perubahan Anda setelah Anda menarik repo akan hilang.
sumber
Jika cabang Anda di depan '
origin/XXX
' oleh 5 komit.Anda dapat menerbitkan:
Dan itu harus menghapus 5 komitmen terakhir.
sumber
Ini akan berguna jika Anda telah membuat beberapa kesalahan pada salinan lokal Anda yang ingin Anda pastikan tidak terdorong ke cabang jauh Anda karena kesalahan.
SHA-Code dapat diperoleh dengan melihat webVersion dari dashboard git Anda untuk komit terakhir di cabang.
Dengan cara ini Anda bisa disinkronkan dengan komit terakhir di cabang.
Anda dapat melakukan
git pull
setelah Anda berhasil menyelesaikan hard reset untuk mengkonfirmasi tidak ada yang baru untuk disinkronkan yaitu Anda bisa melihat pesan.Cabang Anda terkini
Origin/<Branch Name>
sumber
Jika Anda membuat repo lokal Anda berantakan, maka cara andal untuk membuang komit lokal di Git adalah dengan ...
Dalam pengalaman saya Eclipse menangani dunia yang berubah dengan cukup baik. Namun, Anda mungkin perlu memilih proyek yang terpengaruh di Eclipse dan membersihkannya untuk memaksa Eclipse membangunnya kembali. Saya kira IDE lain mungkin perlu dibangun kembali secara paksa juga.
Manfaat tambahan dari prosedur di atas adalah Anda akan mengetahui apakah proyek Anda bergantung pada file lokal yang tidak dimasukkan ke git. Jika Anda menemukan file yang hilang maka Anda dapat menyalinnya dari "my_broken_local_repo" dan menambahkannya ke git. Setelah Anda yakin bahwa repo lokal baru Anda memiliki semua yang Anda butuhkan, Anda dapat menghapus "my_broken_local_repo".
sumber
Jika Anda hanya ingin membuang komit lokal dan tetap melakukan modifikasi dalam file maka lakukan
git reset @ ~
Jawaban lain yang ditujukan pada hard reset
sumber