2012-09-26 24 views
7

Vì vậy, tôi đã nhảy qua rất nhiều lần để làm cho luồng công việc git/rebase/pull-request trở nên dễ chịu đối với các nhà phát triển trong nhóm của tôi, những người sợ kiểm soát phiên bản và dòng lệnh.Buộc git thực hiện cam kết no-op trong khi rebase

Khi thêm bài viết rebase vào wiki phát triển của chúng tôi, tôi chỉ đến điểm tôi nói "Do git rebase. Nếu có bất kỳ xung đột hợp nhất nào, hãy khắc phục chúng. Sau đó, thực hiện git add. Sau đó, git rebase --continue."

Nhưng khi làm việc thông qua ví dụ và chụp ảnh màn hình, tôi được nhắc rằng nếu có xung đột hợp nhất và tôi giải quyết nó theo hướng ngược dòng, thực hiện git rebase --continue thực tế từ chối tiếp tục và đưa ra lỗi:

No changes - did you forget to use 'git add'? 
If there is nothing left to stage, chances are that something else 
already introduced the same changes; you might want to skip this patch. 

có một cuộc thảo luận xuất sắc của các chi tiết kỹ thuật ở đây: Git rebase: conflicts keep blocking progress

Nhưng những gì tôi muốn là làm cho hành vi này dừng. Tôi cho rằng có một lý do thiết kế tốt lý do tại sao điều này xảy ra (có thể liên quan đến rebase chỉ bằng cách sử dụng máy móc cam kết bình thường, nơi hành vi này có thể có ý nghĩa) nhưng trong tình huống này nó khó hiểu và không trực quan và làm cho logic xung đột: xung đột. Nếu sửa chữa của bạn trông giống hệt như nhánh thượng nguồn, hãy làm git rebase --skip. Trong tất cả các trường hợp khác, hãy thực hiện git rebase --continue. "

Có cách nào để đẩy lùi hành vi này, với cờ để rebase hoặc trong tệp cấu hình được kiểm soát phiên bản (vì vậy tôi không phải thiết lập trên máy tính của từng dev hoặc cung cấp hướng dẫn để làm như vậy)?

+2

Tôi không tin rằng đây là bản sao của câu hỏi đó. OP trên đó là hỏi về cách bỏ qua việc rebasing của các commit trống, trong khi OP ở đây hỏi về cách cho phép 'git rebase' tạo ra các commit trống. –

+0

Nhưng tại sao bạn muốn có một cam kết trống? Một cam kết trống có nghĩa rằng tất cả các công việc được thực hiện trong nó đã được giới thiệu trong một cam kết từ chi nhánh đã được rebased lên. Trong trường hợp đó, toàn bộ cam kết cần phải được loại bỏ. Điều đó có thể được thực hiện sau khi thực tế (chẳng hạn như bằng cách sử dụng một rebase tương tác và bỏ qua các cam kết không mong muốn) hoặc bằng các phương pháp khác, nhưng nó chắc chắn "sai" để có một cam kết rỗng. – ErikE

Trả lời

2

hiện nay documentation of git-rebase đề cập đến một tùy chọn --keep-empty:

--keep-empty
     Keep the commits that do not change anything from its parents in the result.

Thật không may, không có thiết lập cho điều này để đưa vào một tập tin cấu hình.

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