Vì vậy, tôi có một trường hợp sử dụng rất đơn giản; Tôi muốn đè bẹp tất cả các cam kết cần phải trở lại làm chủ từ nhánh 'làm việc' của tôi.Làm thế nào để tôi cam kết bí mật trong git với ngày cam kết không có trong quá khứ?
Cho đến bây giờ tôi đã sử dụng git rebase -i
cho việc này, nhưng nó không hoạt động hoàn toàn đúng; dấu thời gian trên cam kết cuối cùng không đúng.
Dưới đây là một ví dụ để làm điều này:
[work1] git checkout master
Switched to branch 'master'
[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.
[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug Wed Nov 7 10:12:42 2012 +0800 Updated TODO again
abb891c Doug Wed Nov 7 10:12:24 2012 +0800 Added more work
c5fd35c Doug Wed Nov 7 10:11:50 2012 +0800 Added more work
a98facd Doug Wed Nov 7 10:11:22 2012 +0800 Add work
b4465be Doug Tue Nov 6 21:38:53 2012 -0800 Updated TODO
403cea9 Doug Fri Jan 2 21:38:53 2009 -0800 Added todo
Đúng vậy, bây giờ tôi muốn dẹp bốn cam kết cuối cùng vào một cam kết.
[work2] date
Wed 7 Nov 2012 10:39:39 WST
[work2] git rebase -i b4465be
pick a98facd Add work
squash c5fd35c Added more work
squash abb891c Added more work
squash 5ad95ff Updated TODO to reflect todays work
Và kết quả:
[work2] git log
commit 3f7f1d2eb4ef23c73dce95f718152c7d5683a926
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
Add work
Added more work
Added more work
Updated TODO to reflect todays work
commit b4465bee5b278214704edcfef3f6e222b5b52964
Author: Doug <[email protected]>
Date: Tue Nov 6 21:38:53 2012 -0800
Updated TODO
Chết tiệt không! Đó là không phải những gì tôi muốn. Dấu thời gian của cam kết kết quả là dấu thời gian của cam kết mà chúng tôi đã nhập vào; những gì tôi muốn là ngày cam kết mới là thời điểm hiện tại.
Chỉ cần để hiển thị chính xác những gì tôi đang nói về:
[work2] date
Wed 7 Nov 2012 10:39:39 WST
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
Tôi muốn kết quả cam kết được cập nhật bằng cách lần hợp nhất, tức là. bây giờ, không phải thời gian của cam kết.
Theo như tôi biết bạn chỉ có thể đè bẹp thành một cam kết trước đó, không trở thành một cam kết mới, nhưng có cách nào để thực hiện việc này không?
Giải pháp đúng có vẻ là 1) tạo một cam kết mới với thông báo hợp nhất và thời gian ngày cam kết chính xác, 2) ??? < --- bằng cách nào đó squash trước đó cam kết vào này.
Tôi làm như thế nào?
Đây là một trong nhiều lý do khiến tôi không phải là người hâm mộ. a –
Ngoài ra. Có sự khác biệt giữa ngày bắt đầu và ngày tác giả. Phụ thuộc vào những gì bạn đang làm. –
Có thể trùng lặp [git squash và giữ dấu thời gian của cam kết cuối cùng] (https://stackoverflow.com/questions/10020641/git-squash-and-preserve-last-commits-timestamp) –