Git etkileşimli yeniden taban, seçilecek taahhüt yok


105

Ben ustayım ve yaptım rebase -i <my_branch>

Bunu anladım:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Bazıları hoş karşılanmadığı için bazı taahhütleri seçmek istiyorum. Ayrıca bazı dosyaları veya değişiklikleri her zaman bir şubede 'yerel' tutmak istediğinizde nasıl çalışıyorsunuz? Gibi bir yardımcı var mı .gitignore?

Yanıtlar:


85

Etkileşimli olmayan bir geri ödeme gibi, belirli bir taahhüdü yeniden temel almanız gerekir.

Etkileşimli olmayan bir yeniden temelde, mevcut kaydetmenin doğrudan bir atasını sağlarsanız, hiçbir şeyi değiştirmezsiniz; Etkileşimli bir yeniden temelleme ile, yürütme, geçerli kaydetmenizin doğrudan atası olsa bile, ancak daha sonra düzenlemek istediğiniz bu taahhüdü belirtmeniz gerekse bile, yeniden sıraladığınız işlemden sonra kaydetmeleri düzenleyebilirsiniz.

Durumunuzun ayrıntılarını bilmiyorum ama şöyle bir şey isteyebilirsiniz:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

veya

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

HEAD~*Sözdizimini kullanmak benim için çalıştı ama ilki işe yaramadı.
Dev Yego

25

rebase -ibir taahhüt aralığı olmadan herhangi bir kaydetme gösterilmez. Sonuncuyu yeniden başlatmak için, diyelim ki 7 taahhüt aşağıdakileri kullanın:

git rebase -i HEAD~7

dikkatli olun, bu tarihi yeniden yazacak. eğer taahhütler zaten itilmişse yapmayın


ikinci sorunuz için: değişikliklerinizi içeren bir şubeye sahip olun (temelde bir yapılandırma dalı) ve diğer dalları düzenli olarak bununla birleştirin . bu şekilde değişiklikler diğer dallara taşınmayacaktır


9

Kullanırken git rebase -i, genellikle yeniden temellemeyi hangi işlemeden itibaren gerçekleştirmek istediğinizi belirtmeniz gerekir. Dolayısıyla, örneğin, mevcut şubedeki son 10 işlemden bazılarını kaldırmak istiyorsanız, şunları yaparsınız:

git rebase -i HEAD~10

6

Başkalarının da bahsettiği gibi, bir taahhüt aralığı belirlemeniz gerekir.

git rebase -i <latest-commit-to-be-retained>

(Düzenlenecek kayıtla aynı dalda olduğunuzu varsayarak) -

İşlemleri belirtmek için HEAD ~ 5 kısayolunu kullanabilir veya sha sağlama toplamını kullanabilirsiniz (bunu elde edebilirsiniz git log)

Aslında herhangi bir commit, ağaçta silmek / düzenlemek / yeniden ifade etmek istediğiniz kayıtların öncüsü / atası ise işe yarar. Bu <latest-commit-to-be-retained>, editördeki (git config'inizde tanımlı) bu yana tüm işlemleri listeleyecektir . Listeden, bir kaydı silmek için, sadece o belirli satırı silin, dosya + düzenleyiciden kaydedin ve çıkın (vi alışkanlıklar :)) ve yapıngit rebase --continue

İkinci cevap için knittl'e katılıyorum

değişikliklerinizle birlikte bir şubeye sahip olun (temelde bir yapılandırma dalı) ve diğer dalları bunun içinde düzenli olarak birleştirin. bu şekilde değişiklikler diğer dallara taşınmayacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.