2010-12-28 28 views
6

Tôi có hai nhánh trong git với hình dạng này.Rebase tương tác phức tạp trong một bước?

* fffffff commit f 
* ddddddd commit d 
* bbbbbbb commit b 
| * eeeeeee commit e 
| * ccccccc commit c 
| * aaaaaaa commit a 
|/ 
* 2222222 base revision 2 
* 1111111 base revision 1 

Tôi muốn rebase và sắp xếp lại các cam kết như tôi muốn với rebase --interactive. Tuy nhiên tôi muốn xen kẽ một số các cam kết và gió lên với một hình dạng như thế này.

* ffffff2 commit f 
* eeeeee2 commit e 
* dddddd2 commit d 
* cccccc2 commit c 
* bbbbbb2 commit b 
* aaaaaaa commit a 
* 2222222 base revision 2 
* 1111111 base revision 1 

Có cách nào để thực hiện việc này trong một bước không? Tôi đã cố gắng làm điều đó trong hai bước bằng cách rebasing commit b trên đầu trang của commit và sau đó thực hiện rebase tương tác thứ hai để sắp xếp tất cả các commit. Vấn đề là tôi nhận được xung đột hợp nhất (giữa cam kết b và cam kết e ví dụ) mà tôi sẽ không thấy khác (bằng cách đặt cam kết b sau khi cam kết a) và nó không đáng giải quyết xung đột.

Trả lời

8

Bắt đầu với bất kỳ một chi nhánh (hoặc BranchWithF hoặc BranchWithE) và ban hành rebase tương tác, ví dụ

 
git checkout BranchWithF 
git rebase -i HEAD~3 

Khi trình biên tập và cam kết danh sách bật lên, thêm (đọc: gõ trên bàn phím của bạn ...) và xen kẽ

 
pick aaaaaaa 
pick ccccccc 
pick eeeeeee 

vào danh sách như bạn thấy phù hợp.

Sau đó, BranchWithF sẽ có tất cả 6 cam kết, và bạn có thể vứt bỏ BranchWithE (mà vẫn có 3 cam kết của nó).

+0

Thật tuyệt vời! Tôi không bao giờ biết bạn có thể thêm dòng trong một rebase tương tác. Tôi đã có một câu hỏi tương tự mà bạn sẽ nhận được tín dụng cho ở đây: http://stackoverflow.com/questions/3251011/can-i-rebase-and-squash-commits-at-the-same-time –

+0

Trả lời được đăng ở đó. – user502515

Các vấn đề liên quan