Menggunakan git saya membuat sesuatu seperti ini
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Karena dikatakan kepada saya bahwa saya masih bisa melakukan ketika dalam keadaan kepala yang terpisah, saya melakukannya. Tapi sekarang saya ingin menggabungkan cabang kepala saya yang terpisah dan cabang master lokal saya, dan kemudian mendorong banyak perubahan ke asal / master.
Jadi pertanyaan saya adalah bagaimana saya bisa menggabungkan cabang master dengan kondisi saya yang sebenarnya (kepala terpisah)
git
git-checkout
benzen
sumber
sumber
Jawaban:
Buat cabang di mana Anda berada, lalu beralih ke master dan menggabungkannya:
sumber
Anda bisa melakukan sesuatu seperti ini.
Bahkan lebih sederhana lagi
tetapi ini memiliki sedikit bahaya bahwa jika Anda melakukan kesalahan, akan sedikit lebih sulit untuk memulihkan komitmen yang dilakukan pada kepala yang terpisah.
sumber
git merge HEAD@{1}
Anda mungkin harus memastikan itu adalah yang ingin Anda gunakan dengan menggunakangit reflog
Inilah yang saya lakukan:
Pada dasarnya, anggap
detached HEAD
sebagai cabang baru, tanpa nama. Anda dapat berkomitmen ke cabang ini sama seperti cabang lainnya. Setelah Anda selesai melakukan, Anda ingin mendorongnya ke remote.Jadi hal pertama yang perlu Anda lakukan adalah memberi
detached HEAD
nama ini. Anda dapat melakukannya dengan mudah, sambil berada di inidetached HEAD
:Sekarang Anda dapat mendorongnya ke jarak jauh seperti cabang lainnya.
Dalam kasus saya, saya juga ingin memajukan cabang ini untuk dikuasai bersama dengan komit yang saya buat di
detached HEAD
(sekarangsome-new-branch
). Yang saya lakukan adalahgit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Tentu saja, saya menggabungkannya nanti
master
.Itu saja.
sumber
git checkout -b new-branch
bekerja untukku. Saran lain diperlukangit branch new-branch
, tetapi itu membuat saya masih bingung dan cabang baru tidak menerima perubahan saya.Anda bisa melakukan
git merge <commit-number>
ataugit cherry-pick <commit> <commit> ...
Seperti yang disarankan oleh Ryan Stewart Anda juga dapat membuat cabang dari KEPALA saat ini:
Atau hanya sebuah tag:
sumber
git rev-parse HEAD
Jika HEAD terlepas, komit berfungsi seperti biasa, kecuali tidak ada cabang bernama yang diperbarui. Untuk mendapatkan cabang master diperbarui dengan perubahan yang dilakukan, buat cabang sementara di tempat Anda berada (dengan cara ini cabang sementara akan memiliki semua perubahan yang dilakukan pada HEAD yang dilepaskan), kemudian beralih ke cabang master dan gabungkan cabang sementara dengan tuan.
sumber
Memperbaiki mudah adalah dengan hanya membuat cabang baru untuk itu berkomitmen dan checkout untuk itu:
git checkout -b <branch-name> <commit-hash>
.Dengan cara ini, semua perubahan yang Anda buat akan disimpan di cabang itu. Jika Anda perlu membersihkan cabang master Anda dari sisa komit, pastikan untuk menjalankannya
git reset --hard master
.Dengan ini, Anda akan menulis ulang cabang Anda jadi pastikan untuk tidak mengganggu siapa pun dengan perubahan ini. Pastikan untuk melihat artikel ini untuk ilustrasi yang lebih baik dari kondisi KEPALA terpisah .
sumber
Mungkin bukan solusi terbaik, (akan menulis ulang sejarah) tetapi Anda juga bisa melakukannya
git reset --hard <hash of detached head commit>
.sumber