Perbarui git komit tanggal penulis saat mengubah

305

Saya mendapati diri saya mengubah komitmen saya cukup sering. Saya tidak stashbegitu banyak karena saya cenderung lupa saya melakukannya, terutama ketika saya ingin menyimpan apa yang saya lakukan sebelum saya pergi atau sebelum akhir pekan, jadi saya melakukan komitmen "draft". Satu-satunya hal adalah, ketika saya mengubah komit, itu masih diatur ke tanggal penulis asli. Apakah ada cara (sederhana) untuk memperbaruinya saat mengubah?

ksol
sumber
5
Ini sangat berguna ketika Anda melakukan rebase interaktif dan mengharapkan GitHub untuk menampilkan komit dalam Permintaan Tarik dalam urutan pohon alih-alih urutan tanggal.
Sukima

Jawaban:

368

Anda dapat mengubah tanggal penulis dengan --dateparameter menjadi git commit. Jadi, jika Anda ingin mengubah komit terakhir, dan memperbarui tanggal pembuatnya ke tanggal dan waktu saat ini, Anda dapat melakukan:

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

( -RParameter yang datememberitahukannya untuk menampilkan tanggal dalam format RFC 2822. Ini adalah salah satu format tanggal yang dipahami olehgit commit .)

Mark Longair
sumber
27
FTR, sepertinya pada OS X, datetidak tahu -R. Tetap menggunakan dateopsi tidak melakukan pekerjaan itu
ksol
7
Perhatikan bahwa jika Anda menginginkan ini sebagai alias, Anda harus menambahkan !dan keluar dari tanda kutip, misalnyacan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
9
date -Rtidak bekerja di OSX, gunakan date +%ssaja
simpanan
4
Idem untuk FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson
120
git commit --amend --date=nowbekerja juga. Tidak perlu memanggil subkulit dengan perintah tanggal (1) . Anda dapat melihatnya di kode sumber git (1) di date.c 'now' adalah nilai khusus yang dikonversi menggunakan fungsi date_now (). Sama untuk 'siang', 'kemarin', 'tengah malam', 'teh' dan lainnya yang tercantum dalam susunan susunan khusus [].
sbz
267

Cara lain untuk melakukan ini adalah

git commit --amend --reset-author

Ini memang mengubah pembuat komit dan juga tanggal - tetapi jika itu adalah komit yang belum dicopot maka itu adalah no-op.

Anda juga dapat menambahkan --no-editjika Anda ingin memperbarui tanggal pada beberapa komit tetapi Anda ingin pesan komit tetap tidak tersentuh. Dengan cara ini Anda tidak akan diminta untuk mengedit pesan untuk setiap komit.

Rup
sumber
4
Saya ingin tahu mengapa perilaku ini tidak default dan harus ditentukan secara eksplisit. Ini sangat mengejutkan dan mengarah pada konsekuensi yang berpotensi buruk. Dalam pemahaman saya, git commit --amend perubahan komit bukan hanya tweak atau sesuatu seperti itu, yaitu menghasilkan riwayat perubahan konten repositori yang berbeda di mana sistem kontrol versi mana pun sangat ketat. Dan dengan demikian saya secara intuitif berharap bahwa penulis dan tanggal dapat mencocokkan data komit aktual. Terutama kepengarangan itu penting, bahkan bukan kencan. Pilih komentar ini jika Anda ingin mengalahkan pengembang git yang bertanggung jawab atas default tersebut. :)
Artem Pisarenko
258

Pada Git v2.1.4 (diuji pada Debian 8 (Jessie))

git commit --amend --date=now
Kamal
sumber
8
Dan jika Anda tidak ingin melihat pesan komit lagi, tambahkan --no-edit.
Henrik N
12

Saya suka jawaban Mark dan menggunakannya sendiri beberapa kali, tetapi sekarang saya menggunakan OS X dan date -Rtidak didukung. Tapi semuanya jauh lebih mudah daripada jawaban asli yang membuat kami berpikir, cukup gunakan string kosong !

git commit --date= --amend
JLarky
sumber
6
Itu tidak berhasil. Git batal dengan kesalahanfatal: invalid date format:
Nikos C.
Bekerja untuk saya (pada Windows, Git 1.9.4)
Csq
1
Lebih baik digunakan --date="$(date)"di OS X. -ROpsinya adalah GNUism.
Rudá Moura
0

Saya membuat paket npm ini jika seseorang masih mencari cara sederhana untuk mengubah tanggal dari beberapa komit.

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

Pemakaian:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
sumber
17
Apakah seseorang benar-benar membutuhkan npmpaket lain ? Tidak, pelajari cara menggunakan gitperintah apa adanya.
Urda