2013-03-14 35 views
7

bởi bây giờ, tôi biết rằng có một cách tốt đẹp như thế nào để kết hợp các cam kết và thay đổi thông điệp cam kết bằng cách sử dụng 'git rebase --interactive'Git rebase: Kết hợp cam kết không tiếp theo

Có tình huống sau đây:

$ git rebase --interactive HEAD^^^^ 
pick 5b7c140 commitA 
pick 40ffd7c commitB 
pick 5e7647d commitC 
pick 78bea2d commitD 

Rebase [...] 

có cũng là một khả năng để xử lý các yêu cầu sau:

Kết hợp commitA và commitC và commitB và commitD tới mới cam kết CAC và CBD?

Trả lời

12

Có thể - bạn cũng có thể sắp xếp lại thứ tự của các cam kết với rebase tương tác:

pick 5b7c140 commitA 
squash 5e7647d commitC 
pick 40ffd7c commitB 
squash 78bea2d commitD 

hoặc

pick 5b7c140 commitA 
fixup 5e7647d commitC 
pick 40ffd7c commitB 
fixup 78bea2d commitD 

Sự khác biệt giữa hai là squash cho phép bạn chỉnh sửa các cam kết thông báo cho các cam kết mới, trong khi fixup chỉ cần ném đi thông điệp cam kết thứ hai để lại thông báo cam kết trước pick tại chỗ cho cam kết kết hợp. (Nếu trình soạn thảo của bạn khởi chạy đủ nhanh, thì thói quen chỉ chọn squash sẽ mang đến cho bạn cơ hội tốt để xem lại thông báo cam kết ngay cả khi bạn cho rằng có thể bạn không cần sử dụng các phần của thông báo cam kết fixup.)

Có khả năng xảy ra xung đột rebase, nếu commitBcommitC thay đổi cùng một phần của tệp. Thường thì chúng có thể dễ dàng được sắp xếp.

+1

Trong trường hợp của tôi: Không có tệp xung đột nào liên quan đến các cam kết này. Git thật tuyệt, tôi nghĩ tôi phải giữ lệnh cam kết. Cảm ơn rất nhiều! :) –

+1

@John - 'git rebase -i' là công cụ rất mạnh mẽ !!! – FooF

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