Saya ingin mengembalikan ke komit sebelumnya, dan kemudian menerbitkan kode itu, lalu kembali ke komit terbaru.
yaitu jadi master saya menunjuk ke versi komit yang lebih lama supaya saya bisa menghapus versi itu, lalu saya ingin kembali ke komit terbaru. Awalnya saya adalah salah satunya.
Bagaimana saya bisa melakukan ini?
Pertanyaan Anda tidak jelas. Saya pikir yang Anda minta adalah ini:
Apa yang akan dilakukannya? Ini akan mendorong
$old_commit_id
berkomitmen untukorigin
sebagai kepala baruorigin
'smaster
cabang.Jika itu yang Anda inginkan, Anda tidak perlu menyentuh
master
cabang lokal Anda sama sekali.sumber
master (non-fast-forward)
kegagalan bagi saya. Solusi @jtdubs berhasil.-f
untuk memaksanya - meskipun repo jarak jauh dapat dikonfigurasi untuk melarang itu. Saya telah memperbarui jawabannya.menggunakan
git reset --hard <old commit number>
itu akan mengatur ulang HEAD ke komit lama ini.
Selain itu, Anda perlu menggunakan
git push -f origin
untuk mengubah repo jarak jauh juga.sumber
Jika Anda ingin menghindari dorongan paksa, berikut ini cara mengembalikan repo Anda ke komit yang lebih lama dan mempertahankan semua pekerjaan intervensi:
git checkout 307a5cd # check out the commit that you want to reset to git checkout -b fixy # create a branch named fixy to do the work git merge -s ours master # merge master's history without changing any files git checkout master # switch back to master git merge fixy # and merge in the fixed branch git push # done, no need to force push!
Selesai! Ganti 307a5cd dengan komit apa pun yang Anda inginkan di repo Anda.
(Saya tahu dua baris pertama dapat digabungkan, tetapi saya pikir itu membuatnya kurang jelas apa yang terjadi)
Ini dia secara grafis:
Anda secara efektif menghapus c3 dan c4 dan mengatur proyek Anda kembali ke c2. Namun, c3 dan c4 masih tersedia di riwayat proyek Anda jika Anda ingin melihatnya lagi.
sumber
Dengan asumsi grafik komit seperti ini:
Anda ingin melakukan pembayaran pertama
master
dan membuat cabang yang mengarah ke tempatmaster
saat ini:Akan terlihat seperti ini sekarang:
Sekarang Anda sudah berada di
master
, kami akan memberi tahumaster
cabang untuk mundur satu komit:Sekarang,
master
harus dipindahkan kembali satu spasi, tetapipointer
cabang masih pada komit terbaru:Pada titik ini, Anda dapat mendorong
master
ke remote, atau di mana pun, lalu maju cepat menggabungkannya kembali kepointer
cabang. Anda dapat membunuhpointer
cabang pada saat itu:Final:
sumber
git push origin master
akan gagal dengan ujung cabang Anda saat ini berada di belakang mitra jarak jauhnya . Anda juga harus memberikan flag -f.Anda bisa saja
git checkout <commit-id>
, melakukan apa pun yang perlu Anda lakukan, lalugit checkout master
kembali ke kode baru.Jika Anda benar-benar perlu mengubah kode lama untuk merilisnya, Anda mungkin harus:
Juga, saya tidak bisa merekomendasikan aliran git cukup. Itu membuat semua ini cukup mudah.
sumber
Untuk pindah ke versi sebelumnya:
git checkout <version hash>
lakukan pekerjaan Anda di sini dan lakukan dengan
git commit --amend
Untuk kembali ke master :
git checkout master
sumber
git reset --hard
mengarahkan cabang masternya kembali ke komit lama, jadigit checkout master
tidak akan melakukan apa-apa.commit --amend
langkah ini cukup berguna--amend
?