อัปเดตคอมไพล์ยอมรับวันที่ของผู้เขียนเมื่อแก้ไข


305

ฉันพบว่าตัวเองแก้ไขความมุ่งมั่นของฉันค่อนข้างบ่อย ฉันไม่ได้stashมากนักเพราะฉันมักจะลืมว่าฉันทำเช่นนั้นโดยเฉพาะอย่างยิ่งเมื่อฉันต้องการบันทึกสิ่งที่ฉันทำก่อนออกเดินทางหรือก่อนวันหยุดสุดสัปดาห์ สิ่งเดียวคือเมื่อฉันแก้ไขการกระทำมันก็ยังคงเป็นวันที่ผู้เขียนต้นฉบับ มีวิธี (ง่าย) ในการอัปเดตเมื่อแก้ไขหรือไม่?


5
สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณทำการ rebase เชิงโต้ตอบและคาดว่า GitHub จะแสดงการกระทำในคำขอดึงในลำดับทรีแทนลำดับวันที่
Sukima

คำตอบ:


368

คุณสามารถเปลี่ยนวันผู้เขียนที่มีพารามิเตอร์--date git commitดังนั้นหากคุณต้องการแก้ไขการคอมมิทล่าสุดและอัปเดตวันที่ของผู้เขียนเป็นวันที่และเวลาปัจจุบันคุณสามารถทำได้:

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

( -Rพารามิเตอร์ที่จะdateบอกให้ส่งออกวันที่ในรูปแบบ RFC 2822 นี่เป็นหนึ่งในรูปแบบวันที่ที่เข้าใจgit commit )


27
FTR ดูเหมือนว่าใน OS X, ไม่ทราบdate -Rการใช้dateโดยไม่มีตัวเลือกไม่ทำงานอยู่ดี
ksol

7
โปรดทราบว่าหากคุณต้องการให้สิ่งนี้เป็นนามแฝงคุณต้องเพิ่ม!และหลีกเลี่ยงเครื่องหมายคำพูดเช่นcan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg

9
date -Rไม่ทำงานบน OSX ใช้date +%sแทน
สะสม

4
Idem สำหรับ FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson

120
git commit --amend --date=nowยังใช้งานได้ ไม่จำเป็นต้องเรียกใช้ subshell ด้วยคำสั่งdate (1) คุณสามารถดูได้ในซอร์สโค้ดของgit (1)ในdate.c 'now' เป็นค่าพิเศษซึ่งถูกแปลงโดยใช้ฟังก์ชัน date_now () เหมือนกันสำหรับ 'เที่ยง', 'เมื่อวาน', 'เที่ยงคืน', 'ชา' และรายการอื่น ๆ ที่อยู่ในอาร์เรย์โครงสร้างพิเศษ []
sbz

267

อีกวิธีในการทำเช่นนี้ก็คือ

git commit --amend --reset-author

สิ่งนี้จะเปลี่ยนผู้เขียนส่งมอบและวันที่ - แต่ถ้าเดิมทีคุณไม่ได้ทำสัญญาส่งมอบของคุณ

นอกจากนี้คุณยังสามารถเพิ่มได้--no-editหากคุณต้องการอัปเดตวันที่หลายรายการ แต่คุณต้องการให้ข้อความยืนยันไม่ถูกแตะต้อง วิธีนี้คุณจะไม่ได้รับแจ้งให้แก้ไขข้อความสำหรับการส่งแต่ละครั้ง


4
ฉันสงสัยว่าทำไมพฤติกรรมนี้ไม่ได้เป็นค่าเริ่มต้นและควรระบุอย่างชัดเจน มันน่าประหลาดใจมากและนำไปสู่ผลลัพธ์ที่ไม่ดี ในการทำความเข้าใจgit commit --amend การเปลี่ยนแปลงของฉันกระทำมากกว่าแค่ปรับแต่งหรืออะไรทำนองนั้นมันส่งผลให้เกิดประวัติศาสตร์ของการเปลี่ยนแปลงเนื้อหาในที่เก็บซึ่งระบบควบคุมเวอร์ชันต่าง ๆ นั้นเข้มงวดมาก และเช่นนี้ฉันคาดหวังอย่างสังหรณ์ใจว่าทั้งผู้แต่งและวันที่จะจับคู่ข้อมูลการส่งจริง โดยเฉพาะอย่างยิ่งการประพันธ์เป็นสิ่งสำคัญไม่ได้ออกเดท โหวตความคิดเห็นนี้ถ้าคุณต้องการเอาชนะผู้พัฒนาคอมไพล์ที่รับผิดชอบค่าเริ่มต้น :)
Artem Pisarenko

258

จาก Git v2.1.4 (ทดสอบกับ Debian 8 (Jessie))

git commit --amend --date=now

8
--no-editและถ้าคุณไม่ต้องการที่จะเห็นการกระทำข้อความอีกครั้งเพิ่ม
Henrik N

12

ฉันชอบคำตอบของ Mark และใช้มันเองหลายครั้ง แต่ตอนนี้ฉันใช้ OS X และdate -Rไม่รองรับ แต่ทุกอย่างง่ายกว่าคำตอบเดิมที่ทำให้เราคิดว่าใช้สตริงเปล่า !

git commit --date= --amend

6
ไม่ได้ผล Git ยกเลิกข้อผิดพลาดfatal: invalid date format:
Nikos C.

ทำงานให้ฉัน (บน Windows, Git 1.9.4)
Csq

1
ดีกว่าที่จะใช้--date="$(date)"ใน OS X ตัวเลือก-Rคือ GNUism
Rudá Moura

0

ฉันสร้างแพ็กเกจ npm นี้หากใครบางคนยังคงมองหาวิธีง่ายๆในการเปลี่ยนวันที่หลายคอมมิชชัน

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

การใช้งาน:

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

17
ต้องการnpmแพ็กเกจอื่นหรือไม่? ไม่เรียนรู้วิธีใช้gitคำสั่งตามที่เป็นอยู่
Urda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.