Saya memiliki masalah serupa, dan saya mengatasinya dengan menghentikan pekerjaan saya agar sesuai dengan organisasi file target.
Katakanlah Anda memodifikasi original.txtpada cabang Anda ( localcabang), tetapi pada cabang master, original.txttelah disalin ke yang lain, katakanlah copy.txt. Salinan ini telah dilakukan dalam komit yang kami beri nama komit CP.
Anda ingin menerapkan semua perubahan lokal Anda, melakukan Adan di Bbawah, yang dilakukan pada original.txt, ke file baru copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
Buat cabang sekali pakai movepada titik awal perubahan Anda dengan git branch move X. Artinya, letakkan movecabang di komit X, yang di depan komit yang ingin Anda gabungkan; kemungkinan besar, ini adalah komitmen tempat Anda bercabang untuk mengimplementasikan perubahan Anda. Seperti yang dilakukan oleh pengguna @digory doo di bawah ini, Anda dapat melakukannya git merge-base master localuntuk menemukannya X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
Di cabang ini, buat perintah penggantian nama berikut:
git mv original.txt copy.txt
Ini mengganti nama file. Perhatikan bahwa copy.txtbelum ada di pohon Anda pada saat ini.
Komit perubahan Anda (kami beri nama komit ini MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Anda sekarang dapat menyusun ulang pekerjaan Anda di atas move:
git rebase move local
Ini seharusnya bekerja tanpa masalah, dan perubahan Anda diterapkan copy.txtdi cabang lokal Anda.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Sekarang, Anda tidak perlu ingin atau perlu memiliki komit MVdalam sejarah cabang utama Anda, karena operasi pemindahan dapat menyebabkan konflik dengan operasi penyalinan saat komit CPdi cabang utama.
Anda hanya perlu mengubah kembali pekerjaan Anda, membuang operasi pemindahan, sebagai berikut:
git rebase move local --onto CP
... di mana CPkomit di mana copy.txtdiperkenalkan di cabang lain. Ini mengubah semua perubahan copy.txtdi atas CPkomit. Sekarang, localcabang Anda persis seperti Anda selalu dimodifikasi copy.txtdan tidak original.txt, dan Anda dapat terus bergabung dengan yang lain.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
Penting bahwa perubahan diterapkan CPatau tidak copy.txtakan ada dan perubahan akan diterapkan kembali original.txt.
Semoga ini jelas. Jawaban ini datang terlambat, tetapi ini mungkin berguna bagi orang lain.