2009-02-25 27 views

Trả lời

11

Bạn có thể làm điều đó một cách dễ dàng với MQ (Mercurial Queues):

Thiết lập một ngày repo xấu

+ hg init 
+ echo line 
+ hg commit -A -d 12/1 -m first 
adding file 
+ echo line 
+ hg commit -A -d 12/2 -m second 
+ echo line 
+ hg commit -A -d 12/3 -m third 
+ hg log 
changeset: 2:81c88de729a8 
tag:   tip 
user:  Ry4an Brase <[email protected]> 
date:  Thu Dec 03 00:00:00 2009 -0600 
summary:  third 

changeset: 1:c1fe70008824 
user:  Ry4an Brase <[email protected]> 
date:  Wed Dec 02 00:00:00 2009 -0600 
summary:  second 

changeset: 0:abb97adaa541 
user:  Ry4an Brase <[email protected]> 
date:  Tue Dec 01 00:00:00 2009 -0600 
summary:  first 

Xoay changesets vào các bản vá lỗi trong hàng đợi

+ hg qimport -r 2 
+ hg qimport -r 1 
+ hg qimport -r 0 

Hãy mỗi vá qtip lần lượt và sửa ngày

+ hg qrefresh -D 
+ hg qpop 
Now at: 1.diff 
+ hg qrefresh -D 
+ hg qpop 
Now at: 0.diff 
+ hg qrefresh -D 

Áp dụng lại các bản vá lỗi

+ hg qpush 
applying 1.diff 
Now at: 1.diff 
+ hg qpush 
applying 2.diff 
Now at: 2.diff 

Bật mỗi vá lại vào changesets thực

+ hg qdel -r 0 
+ hg qdel -r 1 
+ hg qdel -r 2 

Tất cả tốt hơn:

+ hg log 
changeset: 2:6b51e14aadfc 
tag:   tip 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:01 2009 -0600 
summary:  third 

changeset: 1:5cbb9fc51bcc 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:02 2009 -0600 
summary:  second 

changeset: 0:ec58d1f24278 
user:  Ry4an Brase <[email protected]> 
date:  Wed Feb 25 22:29:02 2009 -0600 
summary:  first 
+1

Một cách bản địa tốt (mặc dù đòi hỏi sự hiểu biết về MQ). Cảm ơn! –

+0

Điều này đảo ngược cset thứ tự thời gian 2 dường như đã được cam kết trước khi cset 1. Tôi đề nghị các thủ tục sau đây: nhập khẩu; pop tất cả; đẩy, làm mới, đẩy, làm mới, đẩy, làm mới, xóa tất cả. Điều đó dường như làm các trick trong khi giữ lại dấu thời gian tiến bộ. –

+0

Bạn có thể đặt ngày trên mỗi cái bạn muốn với qrefresh, vì vậy thực sự cả hai phương pháp đều hoạt động giống nhau. –

10

--date gắn cờ cho hg commit, đây là cách bạn ghi đè thời gian cam kết. Câu hỏi đặt ra là làm thế nào để đề xuất những thay đổi trước đó mà không cần nhiều công cụ đau đớn.

Giả sử bạn nhận được lịch sử sau đây của địa phương cam kết:

dir1> hg commit # r100, OK 
dir1> hg commit # r101, need to fix time 
dir1> hg commit # r102, need to fix time 

Đây là giải pháp của tôi:

hg diff -r100:101 > 101.diff 
hg diff -r101:102 > 102.diff 
cd .. 
hg clone -r100 dir1 dir2 # create a copy just before changesets than needs to be fixed 
cd dir2 
patch -i ../dir1/101.diff 
hg commit -m "Same commit message" --date="required date" 
patch -i ../dir1/102.diff 
hg commit -m "Same commit message" --date="required date" 
cd .. 
rm -rf dir1 && mv dir2 dir1 # replace working copy 

Bạn có thể tự động áp dụng các bản vá lỗi với hg patch mà tôi đã không sử dụng trong thực tế của tôi chưa .

+0

Cách đơn giản và rõ ràng. Cảm ơn! –

+3

Bạn chỉ có thể sử dụng "dải hg" để xóa (các) sửa đổi vi phạm thay vì sao chép. – skypher

8

Nếu nó chỉ là một cam kết duy nhất, và điều đó cam kết là gần đây nhất một (trên bất kỳ nhánh nào bạn đang sử dụng), một lớp lót nhanh để thực hiện việc này là:

hg commit --amend -d now 
Các vấn đề liên quan