Karena beberapa buruk cherry-picking, saya lokal repositori Git saat ini lima berkomitmen depan asal, dan tidak dalam keadaan baik. Saya ingin menyingkirkan semua ini melakukan dan memulai dari awal lagi.
Jelas, menghapus direktori kerja dan re-kloning akan melakukannya, tetapi men-download segala sesuatu dari GitHub lagi tampak seperti berlebihan, dan tidak menggunakan waktu saya.
Mungkin git kembali
adalah apa yang saya butuhkan, tapi aku don't ingin berakhir 10 melakukan menjelang asal (atau bahkan enam), bahkan jika itu tidak mendapatkan kode itu sendiri kembali ke keadaan yang tepat. Aku hanya ingin berpura-pura setengah jam terakhir tidak pernah terjadi.
Apakah ada perintah sederhana yang akan melakukan hal ini? Sepertinya yang jelas kasus penggunaan, tapi aku'm tidak menemukan contoh-contoh dari itu.
Perhatikan bahwa pertanyaan ini adalah khusus tentang melakukan, tidak tentang:
Jika anda kelebihan melakukan yang terlihat hanya untuk anda, anda hanya dapat melakukan
git reset --hard asal/<branch_name>
untuk pindah kembali ke tempat asal. Ini akan me-reset negara repositori untuk commit sebelumnya, dan itu akan membuang semua perubahan lokal.
Melakukan git kembali
membuat baru berkomitmen untuk menghapus tua melakukan dalam suatu cara yang membuat semua orang's sejarah waras.
Coba:
git reset --hard <the sha1 hash>
untuk me-reset kepala anda ke mana pun anda inginkan untuk menjadi. Gunakan gitk untuk melihat yang melakukan yang anda inginkan untuk menjadi. Anda dapat melakukan reset dalam gitk juga.
git reset --hard @{u}
* menghapus semua perubahan lokal pada saat ini cabang, termasuk melakukan. I'm terkejut tidak ada yang telah diposting ini, namun mengingat anda tidak't harus mencari apa yang berkomitmen untuk kembali ke atau bermain dengan cabang-cabang.
* Artinya, reset untuk saat ini cabang di @{hulu}
—biasa asal/<branchname>
, tetapi tidak selalu
Untuk melihat/mendapatkan SHA-1 id commit anda ingin datang kembali juga
gitk --all
Untuk memutar kembali untuk yang melakukan
git reset --hard sha1_id
!Catatan. Semua komitmen yang dibuat setelah itu berkomitmen akan dihapus (dan semua anda modifikasi untuk proyek). Jadi lebih baik clone proyek ke cabang lain atau copy ke direktori lain.
Saya punya situasi di mana saya ingin menghapus melakukan itu't mendorong, tapi melakukan itu sebelum satu sama lain. Untuk melakukannya, saya've digunakan perintah berikut
git rebase -aku KEPALA~2
-> ini akan rebase dua terakhir melakukan
Dan saya digunakan 'drop' untuk melakukan tanda tangan yang ingin saya hapus.
Bagi mereka yang tertarik dalam solusi Visual Studio, berikut ini adalah bor:
Cabang
, klik kanan-atas cabang bunga dan pilih View history
. Sejarah
jendela dan pilih Reset -> Hapus perubahan (--keras)
.Itu akan membuang lokal anda dan melakukan reset keadaan repo yang dipilih komit. I. e. Perubahan anda setelah anda menarik repo akan hilang.
Sebelum menjawab let's menambahkan beberapa latar belakang, menjelaskan apa ini KEPALA
. sejak beberapa pilihan di bawah ini akan mengakibatkan kepala terpisah
Pertama-tama apa yang adalah KEPALA?
KEPALA
ini hanya sebuah referensi untuk saat ini melakukan (terbaru) pada saat ini cabang.
Hanya ada satu KEPALA
pada waktu tertentu. (tidak termasuk git worktree
)
Isi dari KEPALA
disimpan di dalam .git/KEPALA
dan berisi 40 byte SHA-1 saat melakukan.
terpisah KEPALA
Jika anda tidak berada di terbaru komit - yang berarti KEPALA
menunjuk ke sebelum melakukan dalam sejarah yang disebut terpisah KEPALA
.
Pada baris perintah, maka akan terlihat seperti ini - SHA-1 bukan nama cabang sejak KEPALA
tidak menunjuk ke ujung cabang saat ini
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Ini akan checkout cabang baru menunjuk ke bagian yang diinginkan komit. Perintah ini akan checkout untuk melakukan. Pada titik ini, anda dapat membuat cabang dan mulai bekerja dari titik ini.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
Anda dapat selalu menggunakan reflog
juga.
git reflog
akan menampilkan setiap perubahan yang diperbarui KEPALA
dan memeriksa diinginkan reflog masuk akan mengatur KEPALA
kembali untuk melakukan ini.
Setiap kali KEPALA dimodifikasi akan ada entri baru di reflog
git reflog
git checkout HEAD@{...}
Ini akan membuat anda kembali untuk melakukan yang anda inginkan
git reset --hard <commit_id>
"Pindah" KEPALA anda kembali untuk melakukan yang diinginkan.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
git kembali <sha-1>
"Undo" yang diberikan berbuat atau melakukan berbagai. Perintah reset akan "undo" setiap perubahan yang dibuat dalam melakukan. Baru komit dengan undo patch akan dilakukan sambil asli komit akan tetap dalam sejarah juga.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Skema ini menggambarkan perintah yang melakukan apa.
Seperti anda dapat melihat ada reset && checkout
memodifikasi KEPALA
.
Jika anda mendapatkan repo lokal ke dalam kekacauan lengkap, maka cara yang dapat diandalkan untuk membuang lokal melakukan Git adalah untuk...
Dalam pengalaman saya Eclipse menangani mengubah dunia di sekitar cukup baik. Namun, anda mungkin perlu untuk memilih yang terkena dampak proyek-proyek di Eclipse dan membersihkan mereka untuk memaksa Eclipse untuk membangun kembali mereka. Saya kira lain IDEs mungkin perlu dipaksa membangun kembali juga.
Manfaat samping dari prosedur di atas adalah bahwa anda akan mengetahui jika proyek anda bergantung pada file lokal yang tidak dimasukkan ke git. Jika anda menemukan anda kehilangan file maka anda dapat menyalin mereka dari "my_broken_local_repo" dan menambahkannya ke git. Setelah anda memiliki keyakinan bahwa anda baru repo lokal memiliki semua yang anda butuhkan maka anda dapat menghapus "my_broken_local_repo".
git reset --hard <SHA-Code>
Ini akan datang dalam berguna jika anda telah membuat beberapa kesalahan di salinan lokal anda bahwa anda ingin memastikan doesn't mendapatkan didorong ke remote branch oleh kesalahan.
SHA-Kode dapat diperoleh dengan melihat webVersion anda git dashboard untuk komit terakhir pada cabang.
Dengan cara ini anda bisa mendapatkan disinkronkan dengan komit terakhir pada cabang.
Anda dapat melakukan git pull
setelah anda telah berhasil menyelesaikan proses hard reset untuk mengkonfirmasi tidak ada yang baru untuk syn yaitu anda bisa melihat pesan tersebut.
Cabang anda up-to-date dengan Asal/<Nama Cabang>