Zaktualizuj datę autora git commit podczas zmiany

305

Dość często poprawiałem swoje zobowiązania. Nie stashbardzo, bo często zapominam, że to zrobiłem, zwłaszcza gdy chcę zapisać to, co zrobiłem przed wyjazdem lub przed weekendem, więc robię zatwierdzenie „szkicowe”. Jedyną rzeczą jest to, że kiedy zmieniam zatwierdzenie, wciąż jest ustawiony na pierwotną datę autora. Czy istnieje (prosty) sposób na zaktualizowanie go podczas zmiany?

ksol
źródło
5
Jest to szczególnie przydatne, gdy wykonujesz interaktywny rebase i oczekujesz, że GitHub wyświetli commity w żądaniu ściągania w kolejności drzewa zamiast kolejności dat.
Sukima,

Odpowiedzi:

368

Możesz zmienić datę autora za pomocą --dateparametru na git commit. Jeśli więc chcesz zmienić ostatnie zatwierdzenie i zaktualizować datę jego autora do bieżącej daty i godziny, możesz:

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

( -RParametr datemówiący, aby wyświetlał datę w formacie RFC 2822. Jest to jeden z formatów daty rozumianych przezgit commit .)

Mark Longair
źródło
27
FTR, wygląda jak na OS X, datenie wie -R. Używanie datebez opcji i tak
wykonało
7
Zauważ, że jeśli chcesz, aby to był alias, musisz dodać a !i uniknąć znaków cudzysłowu, np.can = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
9
date -Rnie działa na OSX, użyj date +%szamiast tego
ukryj
4
Idem dla FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson
120
git commit --amend --date=nowdziała również. Nie trzeba wywoływać podpowłoki za pomocą polecenia date (1) . Możesz to zobaczyć w kodzie źródłowym git (1) w date.c „teraz” jest specjalną wartością, która jest konwertowana za pomocą funkcji date_now (). To samo dotyczy „południa”, „wczoraj”, „północy”, „herbaty” i innych wymienionych w specjalnej tablicy struktur [].
sbz
267

Innym sposobem na to jest

git commit --amend --reset-author

To zmienia autora zatwierdzenia, a także datę - ale jeśli pierwotnie był to twój niedomówiony zatwierdzenie, to nie ma możliwości.

Możesz także dodać, --no-editjeśli chcesz zaktualizować datę wielu zatwierdzeń, ale chcesz, aby komunikaty zatwierdzeń pozostały nietknięte. W ten sposób nie będziesz monitowany o edycję wiadomości dla każdego zatwierdzenia.

Rup
źródło
4
Zastanawiam się, dlaczego to zachowanie nie jest domyślne i powinno być wyraźnie określone. Jest to bardzo zaskakujące i prowadzi do potencjalnie złych konsekwencji. W moim rozumieniu git commit --amend zmiany dokonują raczej zmian niż tylko poprawek lub czegoś podobnego, tzn. Skutkują odmienną historią zmian zawartości repozytorium, w których jakikolwiek system kontroli wersji jest bardzo ścisły. I jako taki intuicyjnie oczekuję, że zarówno autor, jak i data będą pasować do rzeczywistych danych zatwierdzenia. Szczególnie ważne jest autorstwo, nawet data. Głosuj ten komentarz, jeśli chcesz pokonać programistów git odpowiedzialnych za takie domyślne. :)
Artem Pisarenko
258

Począwszy od Git v2.1.4 (testowane na Debian 8 (Jessie))

git commit --amend --date=now
Kamal
źródło
8
A jeśli nie chcesz ponownie widzieć komunikatu zatwierdzenia, dodaj --no-edit.
Henrik N
12

Podoba mi się odpowiedź Marka i korzystam z niej kilka razy, ale teraz jestem na OS X i date -Rnie jest obsługiwany. Ale wszystko jest o wiele łatwiejsze niż oryginalna odpowiedź skłoniła nas do myślenia, wystarczy użyć pustego łańcucha !

git commit --date= --amend
JLarky
źródło
6
To nie działa. Git przerywa z błędemfatal: invalid date format:
Nikos C.
Pracował dla mnie (w systemie Windows, Git 1.9.4)
Csq
1
Lepiej używać --date="$(date)"w OS X. -ROpcją jest GNUism.
Rudá Moura
0

Stworzyłem ten pakiet npm, jeśli ktoś nadal szuka prostego sposobu zmiany dat wielu zatwierdzeń.

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

Stosowanie:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
źródło
17
Czy ktoś naprawdę potrzebuje innej npmpaczki? Nie, dowiedz się, jak używać gitpolecenia w stanie, w jakim się znajduje.
Urda