Farklı dosyalar için birkaç taahhütte bulundum, ancak şimdiye kadar uzak depoma yalnızca belirli bir taahhüdü zorlamak istiyorum.
Mümkün mü?
Farklı dosyalar için birkaç taahhütte bulundum, ancak şimdiye kadar uzak depoma yalnızca belirli bir taahhüdü zorlamak istiyorum.
Mümkün mü?
Yanıtlar:
İtmek için içinden yukarı belirli bir taahhüt yazabilirsiniz:
git push <remotename> <commit SHA>:<remotebranchname>
sağlanan <remotebranchname>
uzaktan kumandada zaten var. ( git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
Başlamazsa , otomatik oluşturmak için kullanabilirsiniz .)
Önceki taahhütleri zorlamadan bir taahhüdü zorlamak istiyorsanız, önce taahhütleri git rebase -i
yeniden sipariş etmek için kullanmalısınız .
git push <remotename> <commit SHA>:<remotebranchname>
İşler. hile, git rebase -i
ilk taahhüt olarak istediğiniz taahhüdü taşımak için birleştirmek ve taahhüt-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Bundan sonra, cevabın açıkladığı gibi itin.
git push origin HEAD~1:master
.
-f
Bayrağı kullanın .
Diğer cevaplar yeniden sıralama açıklamalarında eksik.
git push <remotename> <commit SHA>:<remotebranchname>
tek bir taahhüdü zorlayacak, ancak bu taahhüt, bence belirsiz açıklamalar olan üst, ilk veya ipucu taahhüdüyle karıştırılmaması gereken yerel, bastırılmamış, taahhütlerinizin EN YAŞLI olması gerekir. Taahhüt, taahhütlerinizin en eskisine, yani en son taahhüdünüzden en uzağa ihtiyaç duyar. En eski taahhüt değilse, en eski, yerel, itilmemiş SHA'nızdan belirtilen SHA'ya yapılan tüm taahhütler itilecektir. Taahhütleri yeniden sıralamak için şunu kullanın:
git rebase -i HEAD~xxx
Taahhüdü yeniden sıraladıktan sonra güvenli bir şekilde uzak depoya itebilirsiniz.
Özetlemek gerekirse,
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
Uzak ana şubeme tek bir taahhütte bulunmak.
Referanslar:
Ayrıca bakınız:
Ben kullanmanızı öneririm git rebase -i
; itmek istediğiniz taahhüdü yaptığınız taahhütlerin üstüne taşıyın. Ardından git log
, yeniden temel alınan taahhüdün SHA'sını almak için kullanın , kontrol edin ve itin. Rebase, diğer tüm taahhütlerinizin artık ittiğiniz kişinin çocukları olmasını sağlayacaktır, bu nedenle gelecekteki itmeler de iyi çalışacaktır.
git log
adımı?
Kiraz toplama, belirli bir taahhüdü zorlarken diğer tüm yöntemlerle karşılaştırıldığında en iyi şekilde çalışır.
Bunu yapmanın yolu:
Yeni bir şube oluştur -
git branch <new-branch>
Yeni şubenizi başlangıç şubenizle güncelleyin -
git fetch
git rebase
Bu eylemler, kaynağınızla tamamen aynı şeylere sahip olduğunuzdan emin olmanızı sağlayacaktır.
Kiraz- sha id
itmek istediğiniz şeyi seçin -
git cherry-pick <sha id of the commit>
Sen sha id
çalıştırarak alabilirsiniz
git log
Menşeinize itin -
git push
gitk
Her şeyin istediğiniz gibi göründüğünü görmek için koşun .
git rebase -i
Yukarıdaki çözümlerde önerildiği gibi kullanmak ideal bir çözüm olacaktır. Kiraz toplama sadece taahhüdü çoğaltmak istediğinizde kullanılmalıdır.
Sanırım bu işleme geri dönmeniz ve sonra da itmeniz gerekecek. Ya da cherry-pick
yeni bir şubeye girişebilir ve bunu uzak depodaki şubeye gönderebilirsiniz. Gibi bir şey:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
zaman istediğin işi yapabilirsin .
Ayrıca başka bir dizinde şunları da yapabilirsiniz: