Bagaimana cara beralih ke komit Git tertentu tanpa kehilangan semua komitmen yang dibuat setelah itu ?
Saya ingin bahwa file lokal akan diubah, tetapi database komit akan tetap utuh, hanya pointer posisi saat ini diatur ke komit yang dipilih saat ini.
Saya ingin mengubah status file ke komit tertentu, menjalankan proyek dan, setelah selesai, kembalikan file kembali ke komit terakhir.
Bagaimana melakukan ini tanpa zip folder seluruh proyek?
Jawaban:
Jika Anda berada di cabang tertentu
mybranch
, silakan saja dangit checkout commit_hash
. Kemudian Anda dapat kembali ke cabang Anda dengangit checkout mybranch
. Saya memiliki permainan yang sama membagi dua bug hari ini :) Juga, Anda harus tahu tentang git bisect .sumber
git checkout commit_hash
jika Anda berada di repositori bersih dan tidak perlu melakukan percabangan. Mungkin lebih mudah untuk beberapa kasus penggunaan (seperti milik saya).git bisect
referensi; alat yang sangat berguna!Pertama, gunakan
git log
untuk melihat log, pilih komit yang Anda inginkan, catat hash sha1 yang digunakan untuk mengidentifikasi komit. Selanjutnya, jalankangit checkout hash
. Setelah selesaigit checkout original_branch
,. Ini memiliki keuntungan karena tidak memindahkan HEAD, itu hanya memindahkan copy pekerjaan ke komit tertentu.sumber
git checkout <original_branch>
.git checkout HEAD
secara efektif adalah NOOPgit reset --hard <hash>
mengubah KEPALA cabang saat ini, sementara dengangit checkout <hash>
Anda mendapatkan checkout terpisah yang tidak mengubah cabang apa pun, dan Anda dapat dengan mudah kembali tanpa mengetahui ID hash asli dari cabang Anda seperti yang ditunjukkan dalam jawaban ini.Selain jawaban lain di sini yang menunjukkan kepada Anda bagaimana
git checkout <the-hash-you-want>
layak Anda tahu Anda dapat kembali ke tempat Anda menggunakan:Ini seringkali lebih nyaman daripada:
Seperti yang mungkin Anda antisipasi,
git checkout @{-2}
akan membawa Anda kembali ke cabang Anda di duagit checkout
s lalu, dan sama untuk nomor lainnya. Jika Anda dapat mengingat di mana Anda berada untuk jumlah yang lebih besar, Anda harus mendapatkan semacam medali untuk itu.Sedih untuk produktivitas,
git checkout @{1}
tidak membawa Anda ke cabang di mana Anda akan berada di masa depan, yang memalukan.sumber
git checkout -
adalah singkatan alias untukgit checkout @{-1}
@{n}
sintaks umum , karena ini bekerja dengan banyak perintah git. Saya merasa sulit untuk menambahkan tulisan cepat tanpa membuat jawaban yang agak membingungkan. Alih-alih, saya memilih komentar Anda - Saya harap orang-orang akan melihatnya. Terima kasih lagi.git merge -
untuk menggabungkan cabang yang terakhir Anda periksa ke cabang yang saat ini diperiksa. Seperticd -
di bash.