Git dalını yeniden ayarlarken zaman damgalarını değiştirin


99

Bir şubedeki taahhütleri kamuya açıklanmadan önce yeniden düzenledim, bu da taahhütlerin zaman damgalarının karışık bir düzende olmasına neden oldu. Aralarında sadece birkaç saniye kala hepsinin bugün olmasını tercih ederim.

Açıkçası bu zaman damgaları da doğru olmayacak, ancak işlerin halka açık olduğu zaman bu olduğundan, bunu zaman açısından karışık bir geçmişe tercih ediyorum.

Öyleyse git'e yeniden oluştururken yeni zaman damgaları oluşturmasını nasıl söyleyebilirim?


Git 2.29 (Q4 2020) ile a git rebase --rootveya -i, ile --reset-author-dateçalışacaktır. Bkz aşağıda Cevabımı
VonC

Yanıtlar:


135
git rebase --ignore-date

2
Göndermeden önce denedim .. Etkileşimli olarak yapmadım dışında, belki de hile budur? Ayrıca, --committer-date-is-author-date diğer adını denediniz mi? Belki --ignore-date sonraki sürümde tanıtıldı, hiçbir fikrim yok.
Michael Krelin - hacker

2
Evet, etkileşimli olmayan bir şekilde yapılırsa işe yarar. Ama sonra - her zaman olduğu gibi - yeniden temelde - ilk taahhüt etkilenmez.
tarsius

2
@ MichaelKrelin-hacker: belgelere göre, --ignore-date Bu bayraklar, yeniden verilen taahhütlerin tarihlerini kolayca değiştirmek için git am'a aktarılır (bkz. Git-am [1]). --İnteractive seçeneğiyle uyumsuz.
Tim

4
@Tim Kök commit'in bir ebeveyni yok ve bu soruyu sorduğumda o commit tarihini de değiştirmek istedim. Şimdi var --root, bu da bunu mümkün kılıyor.
tarsius

3
Incompatible with the --interactive option. Belgelere bakın
Vlastimil Ovčáčík

28

Benim durumumda, yeniden yapılanma zaman damgalarını CommitDate değerine değiştirdi, bu nedenle gitweb'de birkaç aylık taahhütler 4 günlük olarak ortaya çıktı. Son kaydı doğru tarihle buldum ve yaptım:

$ git rebase --committer-date-is-author-date SHA

39
Hayır değil. Aslında tam tersi. Dokümanlardan git rebase: " Bu bayraklar, git amyeniden yapılan taahhütlerin tarihlerini kolayca değiştirmek için aktarılır ". Yazıda git am: --committer-date-is-author-date" [...] kullanıcının yazar tarihiyle aynı değeri kullanarak kaydedici tarih hakkında yalan söylemesine izin verirken --ignore-date" [...] kullanıcının aynı değeri kullanarak yazar tarihi hakkında yalan söylemesine izin verir işleyen tarih olarak ".
Enrico Campidoglio

13

Aşağıdaki yollar var

  1. Normal geri ödeme

    git rebase --ignore-date
    
  2. Etkileşimli yeniden taban

    git rebase -i master
    git commit --amend --date=now
    git push origin <branch> -f
    

1

Yorumlardan:

İle uyumsuz --interactive option

Aslında ... artık Git 2.29 (Q4 2020) ile uyumlu değil: " git rebase -i" ( adam ) biraz daha fazla seçenek öğreniyor .
Aşağıdakilerle uyumlu seçenekler:

  • --interactive/-i
  • --root!

Bkz. 6160b2e (26 Ağu 2020), Junio ​​C Hamano ( gitster) .
Bkz 2712669 taahhüt (17 Ağu 2020) ve ef484ad taahhüt tarafından (13 Temmuz 2020) Rohit Ashiwal ( r1walz) .
Bkz a3894aa işlemek , 7573cec işlemek , e8cbe21 taahhüt tarafından (17 Eki 2020) Phillip Wood ( phillipwood) .
(Tarafından Birleştirilmiş - Junio C Hamano gitster- içinde 9c31b19 taahhüt 2020 03 Eyl)

rebase -i: destek --ignore-date

Orijinal yama: Rohit Ashiwal
İmza: Phillip Wood

Rebase, her biri farklı bir seçenek kümesini destekleyen ' apply' ve ' merge' iki farklı arka uçla uygulanır .

Özellikle, uygulama arka ucu , birleştirme arka ucunda uygulanmayan ' ( adam ) ' tarafından uygulanan bir dizi seçeneği destekler . Bu, kafa karıştırıcı olan arka ucun kullanıldığına bağlı olarak mevcut seçeneklerin farklı olduğu anlamına gelir.git am

Bu yama --ignore-date, arka uç birleştirme seçeneği için destek ekler .

Bu seçenek, taahhütleri yeniden yazarken orijinal yazar tarihini yeniden kullanmak yerine yazar tarihi olarak geçerli saati kullanır.
Uygulama arka ucunun kombinasyonunu --ignore-dateve --committer-date-is-author-dateaynı şekilde işlemeye özen gösteriyoruz .

Ve:

rebase: Ekle --reset-author-date

Yardımcı : Junio ​​C Hamano
İmza: Rohit Ashiwal

Önceki commit, --ignore-dateişaretini tanıttı rebase -i, ancak yazar tarihinin veya kaydedici tarihinin göz ardı edilip edilmediğini söylemediği için isim oldukça belirsiz.
Kesin amacı iletmek için bir takma ad ekleyin.

--reset-author-date

Ayrıca:

rebase -i: support --committer-date-is-author-date

Orijinal yama: Rohit Ashiwal
İmza: Phillip Wood

Bu yama --committer-date-is-author-date, arka uç birleştirme seçeneği için destek ekler .
Bu seçenek, yeni kaydetme oluşturulduğunda kaydedici tarihi olarak yeniden yazılan kaydetme tarihini kullanır.

git rebaseartık man sayfasında şunları içeriyor :

--committer-date-is-author-date:

Kaydedici tarihi olarak geçerli saati kullanmak yerine, kaydedici tarihi olarak yeniden yayımlanan taahhüdün yazar tarihini kullanın.
Bu seçenek ima eder --force-rebase.

git rebaseayrıca man sayfasında şunları içerir :

--ignore-date:

Bu bayrak, yeniden yapılan her işlemin yazar tarihini değiştirmek için 'git am'e geçirilir (bkz. git am).


2.29'da (yukarıda), " --committer-date-is-author-date" seçeneğinin " rebase" ve " am" alt komutlarının yanlışlıkla e-posta adresini kaybettiğini unutmayın; bu, Git 2.29.1 (Q4 2020) ile düzeltilmiştir.

Bkz. Commit 5f35edd , commit 16b0bb9 , commit 56706db (23 Ekim 2020) by Jeff King ( peff) .
(Göre Birleştirilmiş Junio Cı Hamano - gitster- içinde işlemek f34687d , 26 Ekim 2020)

am: bozuk e-postayı düzelt --committer-date-is-author-date

İmza: Jeff King

Commit e8cbe2118a ( am: dışa GIT_COMMITTER_DATE,aktarmayı durdur 2020-08-17) fmt_ident(), bir ortam değişkeni ayarlamak ve commit_tree()onu işlemesine izin vermek yerine , kullanılacak kaydedici tarihini ayarlamak için kodu yeniden yazdı .
Ancak iki hatayı ortaya çıkardı:

  • kaydedici e-postası yerine yazar e-posta dizesini kullanıyoruz
  • Committer ident'ini ayrıştırırken, e-postanın uzunluğunu hesaplamak için yanlış değişkeni kullandık ve bunun her zaman sıfır uzunlukta bir dize olmasına neden oldu

Bu taahhüt, her ikisini de düzeltir, bu da bu seçeneği yeniden " apply" arka uç üzerinden testimizin başarılı olmasına neden olur.

Ve:

rebase: bozuk e-postayı --committer-date-is-author-date ile düzeltin

Bildiren: VenomVendor
İmza: Jeff King

Commit 7573cec52c ("rebase -i: support --committer-date-is-author-date", 2020-08-17, Git v2.29.0-rc0 - grup # 13'te listelenen birleştirme) , kaydedici kimlik ayrıştırma kodunu kopyaladı itibaren . Ve bunu yaparken, e-postayı her zaman boş bir dizeye ayarladığımız bir hatayı kopyaladı.builtin/am.c

Bir git-amönceki işlemedeki sürümü düzelttik ; bu commit kopyalanan kodu düzeltir.

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.