Ini sering terjadi pada saya: Saya menulis beberapa kode, pergi untuk memeriksa perubahan saya, dan kemudian menyadari bahwa saya tidak berada di cabang yang tepat untuk memeriksa perubahan itu. Namun saya tidak dapat beralih ke cabang lain tanpa perubahan saya kembali. Apakah ada cara untuk memindahkan perubahan ke cabang lain untuk diperiksa di sana?
422
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
Jika Anda belum melakukan perubahan , cukup gunakan
git checkout
untuk pindah ke cabang baru dan kemudian lakukan secara normal - perubahan pada file tidak terikat ke cabang tertentu sampai Anda melakukan itu.Jika Anda telah sudah berkomitmen perubahan Anda:
git log
dan ingat SHA dari komit yang ingin Anda pindahkan.git cherry-pick SHA
mengganti SHA dari atas.git reset HEAD~1
untuk mengatur ulang kembali sebelum komit salah cabang Anda.cherry-pick
mengambil komit yang diberikan dan menerapkannya ke kepala yang saat ini sedang diperiksa, sehingga memungkinkan Anda untuk menyalin komit ke cabang baru.sumber
git reset HEAD~N --soft
dan kemudiangit checkout -b
untuk memindahkan semua kode yang sekarang tidak berkomitmen ke cabang baru.Sayangnya ini terjadi pada saya secara teratur juga dan saya menggunakan
git stash
jika saya menyadari kesalahan saya sebelumnyagit commit
dan menggunakangit cherry-pick
sebaliknya, kedua perintah dijelaskan dengan cukup baik di jawaban lainSaya ingin menambahkan klarifikasi untuk
git checkout targetBranch
: perintah ini hanya akan mempertahankan direktori kerja Anda dan melakukan snapshot jika targetBranch memiliki sejarah yang sama dengan cabang Anda saat iniPernyataan Amber tidak salah, ketika Anda pindah ke newBranch ,,
git checkout -b newBranch
pointer baru dibuat dan menunjuk ke komit yang sama persis dengan cabang Anda saat ini.Bahkan, jika Anda memiliki cabang lain yang membagikan sejarah dengan cabang Anda saat ini (keduanya sama-sama komit), Anda dapat "memindahkan perubahan Anda" dengan
git checkout targetBranch
Namun, biasanya cabang yang berbeda berarti sejarah yang berbeda, dan Git tidak akan memungkinkan Anda untuk beralih di antara cabang-cabang ini dengan direktori kerja yang kotor atau area pementasan. dalam hal ini Anda dapat melakukan
git checkout -f targetBranch
(membersihkan dan membuang perubahan) ataugit stage
+git checkout targetBranch
(membersihkan dan menyimpan perubahan), hanya menjalankangit checkout targetBranch
akan memberikan kesalahan:sumber
Sebuah git soft reset akan menempatkan perubahan berkomitmen kembali ke dalam indeks Anda. Selanjutnya, checkout cabang yang ingin Anda komit. Kemudian git melakukan dengan pesan komit baru.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
Dari git docs :
sumber