Değişiklik yaparken git kesin yazar tarihini güncelleme


305

Kendimi taahhütlerimi sık sık değiştirirken buldum. Bilmiyorum stashben öyle yaptım unutmak eğiliminde çünkü ben ayrılmak ya da hafta sonu öncesinde önce bir "taslak" do yüzden, ne yaptım kaydetmek istediğiniz, özellikle çok taahhüt. Tek şey, taahhüdü değiştirdiğimde, hala orijinal yazar tarihine ayarlanmış. Düzeltirken güncellemenin (basit) bir yolu var mı?


5
Bu özellikle etkileşimli rebase gerçekleştirdiğinizde ve GitHub'ın taahhütleri tarih sırası yerine ağaç sırasına göre görüntülemesini beklediğinizde yararlıdır.
Sukima

Yanıtlar:


368

Yazar tarihini --dateparametresiyle değiştirebilirsiniz git commit. Dolayısıyla, son taahhüdü değiştirmek ve yazar tarihini geçerli tarih ve saate güncellemek istiyorsanız, şunları yapabilirsiniz:

git commit --amend --date="$(date -R)"

( Tarihin RFC 2822 biçiminde -Rçıkmasını datesöyleyen parametre . Bu, anlaşıldığı tarih biçimlerindengit commit biridir .)


27
FTR, OS X'e benziyor, datebilmiyor -R. date
Seçeneksiz

7
Takma ad olarak bu isterseniz o sen gerekmez Note eklemek !ve tırnak işareti, örneğin kaçışcan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg

9
date -ROSX üzerinde çalışmaz, date +%sbunun yerine kullanın
stash

4
FreeBSD için Idem:git commit --amend --date="$(date +%s)"
Dereckson

120
git commit --amend --date=nowçalışır. Date (1) komutuyla alt kabuk çağırmaya gerek yoktur . Bunu tarihte git (1) kaynak kodunda görebilirsiniz . C 'now', date_now () işlevi kullanılarak dönüştürülen özel bir değerdir. 'Öğlen', 'dün', 'gece yarısı', 'çay' ve özel [] yapı dizisinde listelenen diğerleri için aynıdır.
sbz

267

Bunu yapmanın başka bir yolu da

git commit --amend --reset-author

Bu, taahhüt yazarını ve tarihi değiştirir - ancak başlangıçta unpushed taahhüdünüz olsaydı, bu bir op-op değildir.

--no-editTarihi birden fazla işlemde güncellemek istiyorsanız, ancak taahhüt mesajlarının dokunulmadan kalmasını istiyorsanız da ekleyebilirsiniz . Bu şekilde, her taahhüt için mesajı düzenlemeniz istenmez.


4
Bu davranışın neden varsayılan olmadığını ve açıkça belirtilmesi gerektiğini merak ediyorum. Çok şaşırtıcı ve potansiyel olarak kötü sonuçlara yol açıyor. Benim anlayışımda git commit --amend değişiklikler sadece tweaks ya da bunun gibi bir şey değil, yani herhangi bir sürüm kontrol sisteminin çok katı olduğu farklı depo içeriği değişiklikleri geçmişiyle sonuçlanır. Ve sezgisel olarak hem yazarın hem de tarihin gerçek taahhüt verileriyle eşleşmesini bekliyorum. Özellikle yazarlık önemlidir, hatta tarih bile değil. Böyle bir temerrütten sorumlu git geliştiricilerini yenmek istiyorsanız bu yoruma oy verin. :)
Artem Pisarenko

258

Git v2.1.4 itibariyle (Debian 8 (Jessie) üzerinde test edilmiştir)

git commit --amend --date=now

8
Ve tamamlama mesajını tekrar görmek istemiyorsanız, ekleyin --no-edit.
Henrik N

12

Mark'ın cevabını beğendim ve birkaç kez kendim kullandım, ancak şimdi OS X'deyim ve date -Rdesteklenmiyor. Ama her şey orijinal cevabımızın düşündürdüğünden çok daha kolay, sadece boş dize kullanın !

git commit --date= --amend

6
Bu işe yaramıyor. Git hatayla iptal edildifatal: invalid date format:
Nikos C.

Benim için çalıştı (Windows'ta, Git 1.9.4)
Csq

1
--date="$(date)"OS X'te kullanmak -Rdaha iyidir. Seçenek GNUism'dir.
Rudá Moura

0

Birisi hala birden fazla işlemin tarihlerini değiştirmek için basit bir yol arıyorsanız bu npm paketini oluşturdum.

https://github.com/bitriddler/git-change-date

Kullanımı:

npm install -g git-change-date
cd [your-directory]
git-change-date

17
Gerçekten başka bir npmpakete ihtiyaç var mı ? Hayır, gitkomutu olduğu gibi kullanmayı öğrenin .
Urda
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.