Hiçbir değişiklik ve yeni mesaj nasıl taahhüt edilir?


137

commitDosyalarda hiçbir değişiklik yapılmazsa nasıl yeni bir mesaj oluşturabilir ve yeni bir mesaj oluşturabilirim?

Kaydetme kodu (SHA?) Aynı olacağından bu mümkün değil mi?

Yanıtlar:


169

Bunu yapmak için nadiren iyi bir neden vardır, ancak parametre boş commit mesajlarının --allow-emptyaksine boş kayıtlar içindir (hiçbir dosya değişmez) --allow-empty-message. Çevrimiçi belgeleri yazarak git help commitveya ziyaret ederek de daha fazlasını okuyabilirsiniz .

Ağaç nesnesi (kendi hashine sahip olan) aynı olsa da, commit aslında farklı bir hash'e sahip olacaktır, çünkü muhtemelen farklı bir zaman damgası ve mesaja sahip olacak ve kesinlikle farklı bir ebeveyn commit'i olacaktır. Bu faktörlerin üçü de gitnesnenin karma algoritmasına entegre edilmiştir .


Orada olan bir (bazı yorumlar birleşmeyle) işlemek boş isteyebilirsiniz birkaç nedeni:

  • "Bildirime dayalı bir taahhüt" olarak, testler veya tüy bırakmayla ( Robert Balicki aracılığıyla ) geçme hakkında gerçeklerden sonraki veriler dahil olmak üzere ( DavidNeiss aracılığıyla ) anlatım veya belge eklemek .
  • gitRasgele değişiklikler oluşturmadan komutları test etmek için ( Vaelus aracılığıyla ).
  • gitolite( Tatsh aracılığıyla ) kullanarak silinmiş bir çıplak depoyu yeniden oluşturmak için .
  • Oluşturma araçlarını yeniden tetiklemek ( mattLummus aracılığıyla ) veya kişisel günlük kaydı veya ölçümler ( DynamiteReed aracılığıyla ) uğruna rastgele yeni bir işlem oluşturmak için . Bununla birlikte, iki kez düşünün: Dal / birleştirme yapınıza bağlı olarak, taahhütler çok uzun süre yaşayabilir, bu nedenle "hiçbir şeyi taahhüt etme" stratejisi yanlışlıkla ekibinizin havuzunu geçici iş akışı eserleriyle kirletebilir ve kod revizyonlarını onlardan ayırmayı zorlaştırabilir. geçici hezimet.

Kaydetme ağacına meta veri eklemeye yönelik diğer stratejiler şunları içerir:

  • Her zaman belirli bir duruma ait bir işleme işaret eden ayrı dallar veya hafif etiketler (ör. "Son kabul edilen işleme" veya "mevcut aşamalı kaydetme").
  • Zaman damgası, kaydedici ve mesaj kaydetmenin bir yolu için Ek Açıklamalı Etiketler , kaydetme ağacının kendisine bir giriş eklemeden var olan bir işleme işaret eder.
  • git notes Değişken bir notu mevcut bir değişmez kaydetme üzerine ilişkilendirmek için.

2
Git akış şube modelini takip etmeye başladım . Bir yaptığınızda devdal formu masterbir sonra ve featşube hemen gelen dev, featşube görünüyor gelmesi masterhiçbir ayırt edici üzerindeki taahhüt olmadığı için şube devşube featşube geliyor. devŞubeyi ilk oluşturduğunuzda boş bir kaydetme, devşubeyi bağımsız olarak sonsuza kadar devam eden şubesi olarak kurmaya yardımcı olur master. Genellikle dalları katman olarak kullandığınızda ve tek bir işlemden iki katman oluşturduğunuzda yararlıdır
Novice C

2
Başka bir neden: Zorlamadan önce commit mesajınızdan önemli bir şeyi commit --amendçıkarırsanız, uzaktan kumanda zorlamaya izin vermiyorsa yapamazsınız. Bu şekilde, geliştiricilerin önceki işlemle uyumlu önemli bir mesajı görmelerine izin verebilirsiniz.
Andy J

1
Bunu yapmak istiyorum çünkü bir commit zorladım, ancak commit mesajında ​​bir şeyden bahsetmeyi unuttum. Taahhüt mesajlarımız, sorun izleme ve sürekli entegrasyon yazılımı ile entegre edilmiştir ve taahhüt mesajının içeriği bu uygulamaları etkiler. Daha iyi bir yol var mı? Bu benim durumum için en iyi çözüm gibi görünüyor. Hayal edebileceğim tek şey, bir şekilde önceki taahhüdü geri alabilmek olurdu.
sytech

1
Bunu, veritabanını komut dosyası haline getiren ön işleme kancamızı tetiklemek için kullandım. Yani değişiklikler vardı, sadece git komut dosyası çalıştırılıncaya kadar onları göremedi. Elbette manuel olarak çalıştırabilirdi, ancak bu durumda komut dosyası iki kez çalıştırılır.
yoyodyn

1
Github ve gogs olarak git sunucularında yerleşik sorun izleme ile etkileşim kurarken çok kullanışlıdır.
SimonF

37

Sizi doğru anladıysam, boş bir taahhütte bulunmak istersiniz. Bu durumda ihtiyacınız olan:

git commit --allow-empty

35

Mesajla boş tamamlama

git commit --allow-empty -m "Empty test commit"

Boş mesajla boş kaydetme

git commit --allow-empty --allow-empty-message

3

Gitversion gibi bir sistem kullanıyorsanız Bu tür bir commit yapmak çok mantıklı. Bir + semver: majör yorum kullanarak özellikle ana sürümü çarpmak için olan bir işleminiz olabilir.


3

Belki daha mantıklı bir alternatif olarak, açıklamalı bir etiket (mesaj içeren adlandırılmış bir işlem) oluşturabilirsiniz. Seçeneğe bakın git tag -a.

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.