Thay đổi dấu thời gian trong khi khôi phục nhánh git


97

Tôi đã sắp xếp lại các cam kết trong một chi nhánh trước khi nó được công bố rộng rãi khiến dấu thời gian của các cam kết theo một thứ tự hỗn hợp. Tôi thà có tất cả chúng như ngày hôm nay chỉ với vài giây ở giữa.

Rõ ràng là những dấu thời gian này cũng sẽ không chính xác, nhưng vì đây là thời điểm mà mọi thứ được công khai, tôi thích nó hơn một lịch sử hỗn hợp, khôn ngoan về thời gian.

Vậy làm cách nào để yêu cầu git tạo dấu thời gian mới trong khi khôi phục?

Câu trả lời:


134
git rebase --ignore-date

2
Tôi đã thử nó trước khi đăng .. Ngoại trừ việc tôi chưa thực hiện tương tác, có lẽ đó là thủ thuật? Ngoài ra, bạn đã thử bí danh --committer-date-is-author-date chưa? Có thể --ignore-date đã được giới thiệu trong phiên bản sau, tôi không biết.
Michael Krelin - hacker

2
Có, nếu được thực hiện không tương tác, nó hoạt động. Nhưng sau đó - như mọi khi với rebase - cam kết đầu tiên không bị ảnh hưởng.
tarsius

2
@ MichaelKrelin-hacker: theo tài liệu, --ignore-date Các cờ này được chuyển tới git am để dễ dàng thay đổi ngày của các cam kết được phục hồi (xem git-am [1]). Không tương thích với tùy chọn - tương tác.
Tim

4
@Tim Cam kết gốc không có cha mẹ và khi tôi hỏi câu hỏi này, tôi cũng muốn thay đổi ngày của cam kết đó. Bây giờ chúng tôi có --root, điều này làm cho điều này có thể.
tarsius

3
Incompatible with the --interactive option. Xem tài liệu
Vlastimil Ovčáčík

28

Trong trường hợp của tôi, việc phục hồi đã thay đổi dấu thời gian thành giá trị Ngày cam kết, do đó, trong gitweb, một loạt các cam kết hàng tháng được hiển thị dưới 4 ngày tuổi. Tôi đã tìm thấy cam kết cuối cùng với ngày chính xác và đã thực hiện:

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

39
Không, không phải. Thực tế thì hoàn toàn ngược lại. Từ tài liệu của git rebase: " Những lá cờ này được chuyển đến git amđể dễ dàng thay đổi ngày của các cam kết được phục hồi ". Trong git amđó có ghi: --committer-date-is-author-date" [...] cho phép người dùng nói dối về ngày của người xác nhận bằng cách sử dụng cùng giá trị với ngày của tác giả " trong khi --ignore-date" [...] cho phép người dùng nói dối về ngày của tác giả bằng cách sử dụng cùng một giá trị là ngày của người cam kết ".
Enrico Campidoglio

9

Có những cách sau

  1. Rebase bình thường

    git rebase --ignore-date
    
  2. Cơ sở lại tương tác

    git rebase -i master
    git commit --amend --date=now
    git push origin <branch> -f
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.