SORU
20 ŞUBAT 2010, CUMARTESİ


Süsleme Git/Ezmek Gıt Geçmişi Kaydeder

Git bir şube her birkaç dakikada bir, ve yorumlar sonunda içine benim kod "Her şey yeniden başlıyor kırık" ve diğer saçmalıklar. gibi şeyler olmak kontrol ediyorum

O zaman her birkaç dakika/saat yaptığım gün ciddi/, "#hata 22.55, 3 kez Tamir edildi." gibi bir yorum yapıyorNasıl bu iki kavram ayrı alabilir miyim?Sık sık işleyen tüm kaldırmak ve sadece ciddi olanlar terk edebilmek istiyorum.

CEVAP
20 ŞUBAT 2010, CUMARTESİ


Cevap düzenlenmişşimdi bu girişin ikinci yarısında) yeni Git1.7 düzelti! eylem ve hızlı --autosquash seçenek sıralama ve mesaj düzenleme işlemek.


İlk olarak, Git1 önce yapıldığı gibi klasik ezme işlemi.7.
(Git1.7 aynı süreç, sadece daha hızlı daha temiz ezici mesajlar tarafından el ile yeniden aksine, yeniden düzenleme ve otomatik tamamlama olasılığı tarafından yapılan) vardır

Sık sık checkins tüm kaldırmak ve sadece ciddi olanlar terk edebilmek istiyorum.

Bu denirezici tamamlar.
"Comit" Git ready bu makale: . temizlik iyi bir örnek var ^br> (Not: rebase interaktif özelliği 42* *ve ezmek ya da bölme ya da çıkarma veya yeniden tamamlar sağlar: de GitPro page)

Dikkatli bir kelimeSadece harici bir depo itti henüz taahhüt eder bunu. Eğer başkalarının kapalı silmek için gidiyoruz taahhüt iş temelli, karışıklıklar ortaya çıkabilir. Eğer başkaları ile paylaşılan eğer geçmişi yeniden yazma.

alt text

Son 4 birlikte sarılmış olsaydı çok daha mutlu olacağını taahhüt eder

$ git rebase -i HEAD~4

pick 01d1124 Adding license
pick 6340aaa Moving license into its own file
pick ebfd367 Jekyll has become self-aware.
pick 30e0ccb Changed the tagline in the binary, too.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

rebase son dört kullanarak HEAD HEAD~4 ile yerden tamamlar.
Sadece bir taahhüt içine her şeyi ezmek için gidiyoruz.
Yani, bu dosyanın ilk dört satır değiştirme hile yapacak:

pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.

Temelde bu Git ilk listede taahhüt içine dört tamamlar birleştirmek için söyler. Bu tamamlanıp kaydedildikten sonra, başka bir editör şu ile açılır:

# This is a combination of 4 commits.
# The first commit's message is:
Adding license

# This is the 2nd commit message:

Moving license into its own file

# This is the 3rd commit message:

Jekyll has become self-aware.

# This is the 4th commit message:

Changed the tagline in the binary, too.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   LICENSE
#   modified:   README.textile
#   modified:   Rakefile
#   modified:   bin/jekyll
#

O kadar çok işliyor birleştirsek beri, Git seni geri kalanına göre tamamlama Yeni Mesaj tamamlar yer değiştirme işlemi sağlar. Size uygun bakın, kaydedin ve çıkın mesajı olarak düzenleme.
Bu işlem tamamlandıktan sonra, başarıyla sıkıştırılmış tamamlar!

Created commit 0fc4eea: Creating license file, and making jekyll self-aware.
 4 files changed, 27 insertions( ), 30 deletions(-)
  create mode 100644 LICENSE
    Successfully rebased and updated refs/heads/master.

Ve eğer tarih tekrar bakarsak...

alt text


Not: "" amaçlar, Git1.7 (Şubat 2010) 2 yeni unsurlar tanıttı yorum Dustin tarafından belirtildiği gibi): . ezmek işlemek için

  • "git rebase -i" yeni eylem "fixup" değişim eziyor ama varolan günlük mesaj etkilemez öğrendim.
  • "git rebase -i" aynı zamanda kullanışlı yeni "" eylem. düzeltme ile birlikte 22* *seçeneği öğrendim

Thechnosorcery Networks blog entry bu gösterilmiştir. Bu özellikleri last June 2009 beri yemek ve 49 ** daha fazla tartışma konusu olmuştur.

fixup eylem veya bir yönerge için ezici bir tamamlama olurdu el ile yeniden içinde taahhüt düzenleme listesi rebase --interactive süre görmezden ikinci gönderim iletisi, yapacağınız mesaj edition adım daha hızlı (sen kendine Sakla: ezilmiş taahhüt edecektirilkmesaj sadece commit)
Ortaya çıkan mesaj sadece ilk bir taahhüt olacak işlemek.

  # s, squash = use commit, but meld into previous commit
  # f, fixup = like "squash", but discard this commit's log message

--autosquash seçeneği sipariş işlem otomatik tamamlama yapma konusunda

Eğer biliyorsanız size bir mesaj ile işleyebilirsin bir şey ezmek istediğini işlemek “squash! $other_commit_subject”. Sonra @git rebase --interactive --autosquash commitish@, çalıştırırsanız hattı squash otomatik olarak ayarlanacak ve $other_commit_subject konu ile taahhüt altına yerleştirilir.

(Aslında squash! tek kullanabilirsinizbaşlangıçbir mesaj kaydetme)

$ vim Foo.txt
$ git commit -am "Change all the 'Bar's to 'Foo's"
[topic 8374d8e] Change all the 'Bar's to 'Foo's
 1 files changed, 2 insertions( ), 2 deletions(-)
$ vim Bar.txt
$ git commit -am "Change all the 'Foo's to 'Bar's"
[topic 2d12ce8] Change all the 'Foo's to 'Bar's
 1 files changed, 1 insertions( ), 1 deletions(-)

$ vim Foo.txt
$ git commit -am "squash! Change all the 'Bar's"
[topic 259a7e6] squash! Change all the 'Bar's
 1 files changed, 2 insertions( ), 1 deletions(-)

Gördün mü? Buradaüçüncütaahhüt tek başına kullanırilkmesaj kaydetme.
rebase --interactive --autosquash ezilmiş ilgili bir taahhüt altına taşır:

pick 8374d8e Change all the 'Bar's to 'Foo's
squash 259a7e6 squash! Change all the 'Bar's
pick 2d12ce8 Change all the 'Foo's to 'Bar's

Mesaj edition olacaktır:

# This is a combination of 2 commits.
# The first commit's message is:

Change all the 'Bar's to 'Foo's

# This is the 2nd commit message:

squash! Change all the 'Bar's

Varsayılan olarak ezme işlemi kaydedilen tutacağına anlamı mesaj kaydetme.
Ama hata düzeltmeyle! Yönerge, elinden tutmak ezmek "görünmez" commit mesajı ise hala sahip otomatik tamamlama yeniden düzenleme ile --autosquash seçeneği (ve aslında bu ikinci gönderim iletisi dayalı ilk işlemek istiyorum olamaz.

pick 8374d8e Change all the 'Bar's to 'Foo's
fixup cfc6e54 fixup! Change all the 'Bar's
pick 2d12ce8 Change all the 'Foo's to 'Bar's

Varsayılan olarak mesajım olacak:

# This is a combination of 2 commits.
# The first commit's message is:

Change all the 'Bar's to 'Foo's

# The 2nd commit message will be skipped:

#    fixup! Change all the 'Bar's

fixup! commit mesajı zaten diye dikkat edin.
Sadece mesaj olarak-kaydetmek ve orijinal mesajı tutulacak taahhüt.
Daha önce tamamlama bir parçası eklemeyi unuttuğunu fark ettiğinde değişiklikleri de dahil olmak üzere çok kullanışlı.

Şimdi Eğer düzeltme veya ezmeye dayalı istiyorsunönceki commitbunu nasıl yaptınJacob Helwig(Technosorcery Ağlar blog giriş yazar) aşağıdaki diğer adları önerir:

[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -

Ve her zaman tamamlar ezilmiş olması gerekiyordu otomatik olarak yeniden yararlanacak olan: bir rebase yapmak için etkileşimli

[alias]
    ri = rebase --interactive --autosquash

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008