Benzer bir sorunla karşılaştım ve çalışmamı hedef dosya organizasyonuyla eşleşecek şekilde yeniden sıralayarak çözdüm.
Diyelim ki original.txtşubenizde ( localdalda) değişiklik yaptınız , ancak ana dalda original.txtbaşka bir şubeye kopyalandı diyelim copy.txt. Bu kopya, commit adını verdiğimiz bir işlemde yapılmıştır CP.
Üzerinde yapılan tüm yerel değişikliklerinizi, taahhütlerinizi Ave Başağıda yaptığınız değişiklikleri original.txtyeni dosyaya uygulamak istiyorsunuz copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
İle movedeğişikliklerinizin başlangıç noktasında tek kullanımlık bir dal oluşturun git branch move X. Yani, birleştirmek istediğiniz taahhütlerden önceki moveşubeyi commit'ye koyun X; büyük olasılıkla, bu, değişikliklerinizi uygulamak için ayrıldığınız taahhüttür. Kullanıcının @digory doo'nun aşağıda yazdığı gibi, git merge-base master localbulmak için yapabilirsiniz X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
Bu dalda aşağıdaki yeniden adlandırma komutunu verin:
git mv original.txt copy.txt
Bu, dosyayı yeniden adlandırır. Not copy.txthenüz bu noktada ağacında mevcut değildi.
Değişikliğinizi taahhüt edin (bu işleme adını veriyoruz MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Artık çalışmalarınızı şunların üstüne yeniden borçlandırabilirsiniz move:
git rebase move local
Bu sorunsuz çalışmalıdır ve değişiklikleriniz copy.txtyerel şubenizde uygulanır .
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Şimdi, MVana şubenizin geçmişinde mutlaka commit istemezsiniz veya buna ihtiyaç duymazsınız , çünkü taşıma işlemi CPana daldaki commit'deki kopyalama işlemiyle çatışmaya yol açabilir .
Aşağıdaki gibi, taşıma işlemini iptal ederek yalnızca çalışmanızı yeniden kredilendirmeniz gerekir:
git rebase move local --onto CP
... diğer dalda tanıtıldığı kayıt CPnerede copy.txt. Bu copy.txt, CPtaahhüt üzerine tüm değişiklikleri yeniden oluşturur . Şimdi, localşubeniz tıpkı her zaman değiştirmişsiniz gibi copy.txtdeğil original.txt, başkalarıyla birleşmeye devam edebilirsiniz.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
Değişikliklerin uygulanması CPveya başka şekilde copy.txtmevcut olmaması ve değişikliklerin tekrar uygulanması önemlidir original.txt.
Umarım bu açıktır. Bu cevap geç gelir, ancak bu başka biri için faydalı olabilir.