Yanıtlar:
--preserve-merges
Seçeneği (veya eşanlamlısını -p
) git rebase -i
komuta eklerseniz git, geçmişi yeniden doğrusallaştırmak yerine yeniden basarken birleştirmeleri korumaya çalışır ve birleştirme işlemlerini de değiştirebilmeniz gerekir:
git rebase -i -p HEAD~5
HEAD~5
Değiştirmek istediğiniz taahhüdün üst öğesi nerede (genellikle sha1 ^).
--preserve-merges
şimdi--rebase-merges
, Unutmayın git1.7.9.6 başlayan , (ve git1.7.10 +) git merge
kendisi hep editörü tetikleyecek bir birleştirme ayrıntılı bilgi eklemek için.
git merge $tag
Açıklamalı bir etiketi birleştirmek için " ", etkileşimli bir düzenleme oturumu sırasında düzenleyiciyi her zaman açar. v1.7.10 serisi, eski komut dosyalarının bu davranışı azaltmasına yardımcı olmak için GIT_MERGE_AUTOEDIT ortam değişkenini tanıttı, ancak bakım yolu da bunu desteklemelidir.
Ayrıca, GIT_MERGE_AUTOEDIT
eski komut dosyalarının bu davranışı reddetmesine yardımcı olacak bir ortam değişkeni de sunar .
Bkz. " Git 1.7.10'u Beklemek ":
Son zamanlarda Git posta listesindeki bir tartışmada Linus, bunun Git tarihinde erken yaptığımız tasarım hatalarından biri olduğunu kabul etti (ve ben de kabul ettim).
Ve 1.7.10 ve sonrasında, etkileşimli bir oturumda çalıştırılan git birleştirme komutu (yani hem standart girdisi hem de bir terminale bağlı standart çıkışı) birleştirme sonucunu kaydetme taahhüdü oluşturmadan önce bir düzenleyici açacaktır. kullanıcı, birleştirme işlemini açıklamak için bir şans, tıpkı çakışan bir birleştirmeyi zaten çözdükten sonra çalışan git command komutu gibi.
Linus şunları söyledi:
Ama aslında nasıl çalıştığını gerçekten umursamıyorum - asıl sorun git birleştirme mesajlarının alınmasını çok kolaylaştırıyor.
Ben bunun bir parçası daha basit bir aptallık olduğunu düşünüyorum: "git birleştirme" için varsayılan olarak editörü aslagit commit
ateşlemiyoruz , ama " " için yapıyoruz . Bu bir tasarım hatasıydı ve bir birleştirmeye gerçekten bir not eklemek istiyorsanız, ekstra iş yapmanız gerektiği anlamına gelir. Yani insanlar bilmiyorlar .
Git 2.17'den (2. Çeyrek 2018) önce, " git rebase -p
" birleştirme taahhüdünün şu anda düzeltilmiş olan günlük mesajlarını karıştırdığını unutmayın.
Bkz ed5144d taahhüt tarafından (08 Şubat 2018) Gregory Herrero ( ``) . Öneren
: Vegard Nossum ( vegard
) ve Quentin Casasnovas ( casasnovas
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 8b49408 tamamlama 2018, 27 Şubat)
rebase -p
: arama yaparken yanlış gönderme mesajını düzeltingit merge
.Yana dd6fb00 taahhüt ( "
rebase -p
: çağrılırken düzeltme alıntıgit merge
", Ocak 2018, Git 2.16.0-rc2), bir altkabuk yürütme 'kullanarak birleştirme komutu geçirilir rebased commit birleştirme mesajı işlemekgit rev-parse --sq-quote
'.
git merge
Komut için yeni satırların tutulması için bu alt kabuğun etrafında çift tırnak işareti gerekir .Bu düzeltme ekinden önce, aşağıdaki birleştirme iletisini izleyin:
"Merge mybranch into mynewbranch Awesome commit."
dönüşür:
"Merge mybranch into mynewbranch Awesome commit."
sonra a
rebase -p
.
Git 2.23 (Q2 2019) ile, " merge -c
" sırasındaki bir " " talimatı git rebase --rebase-merges
, aksi takdirde yeni bir birleştirme oluşturmaya ve var olanı değiştirmeye gerek kalmasa bile (örneğin hızlı ileri sarma) kullanıcıya günlük mesajını düzenleme şansı vermelidir. ), ama yapmadı.
Hangi düzeltildi.
Bakınız Phillip Wood ( ) tarafından 6df8df0 (02 Mayıs 2019) taahhüdü . (Göre Birleştirilmiş Junio Cı Hamano - - içinde işlemek c510261 , 13 Haziran 2019)phillipwood
gitster
Sadece ilkel komutları kullanan başka bir güzel cevap - yazan knittl https://stackoverflow.com/a/7599522/94687 :
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
veya daha iyi (daha doğru) bir son rebase komutu:
git rebase <sha of merge> previous_branch --onto HEAD
BTW, ilkel komutları kullanmak, çok fazla CPU tüketmemek ve Git'in durumda yeniden temel alınması gereken taahhütlerin listesini düşünmeyi bitirene kadar bilinmeyen bir süre beklemenizi sağlayan güzel bir "özelliğe" sahip olabilir git rebase -p -i HEAD^^^^
. benim durumumda sonuncusu birleştirme ile sadece 4 son taahhütlerin listesi benim durumda yaklaşık 50 saniye sürdü!).
git merge --edit
Etkileşimli olmayan birleştirme durumunda bile yorum yapmanıza olanak tanır.
git merge --edit --no-ff
geliştirme akışını yeniden temel alarak ve hızlı ilerlemeden birleştirerek git akışını izlerseniz yararlı olabilir.
Mevcut Git sürümleri için (Mai 2020):
git rebase -i -r <parent>
,
daha sonra düzenleyicisinde yerine merge -C ...
ile merge -c ...
.
Bu işlem, yeniden ayarlama sırasında değiştirebileceğiniz komut mesajını düzenleyicide açar.
git rebase -i HEAD~5
Komut editörü açılır. Belirtilen taahhütleri listeler (bu durumda beş tanesi). İlk sütun pick
her taahhüt için içerir . Sadece bu düzenleyicide pick
ile değiştirin ve reword
düzenleyiciyi kaydedin + kapatın. Sonra git her taahhüt için değiştin nerede editörü açılır pick
etmek reword
ve iletiyi işlemek düzenlemenize olanak sağlar.
-p
etmek git rebase
komutu.
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to