2010-08-12 42 views
5

Vì vậy, hôm qua tôi đã đăng một số question về một số xung đột lạ khi tôi cố gắng rebase nhánh ngược dòng vào nhánh chủ đề địa phương của mình.Xung đột với `git rebase`

Cuối cùng, tôi đã sử dụng git rebase --merge upstream và giải quyết được nhiều xung đột trong các tệp mà tôi chưa chạm từ lần xuất phát trước đó.

Sự hiểu biết của tôi về việc rebase trong trường hợp này là nó xóa bỏ các cam kết của tôi khỏi nhánh chủ đề đó, áp dụng các cam kết từ nhánh ngược dòng và sau đó áp dụng (như các bản vá). Vì vậy, nó kết thúc là một hoạt động nhanh về phía trước. Những gì tôi không hiểu là ... tại sao tôi sẽ hợp nhất những xung đột với những cam kết đến từ thượng nguồn. Là những người được áp dụng như là bản vá lỗi là tốt? Tôi nghĩ là ... hành động "hàn" một số cam kết trên đầu trang của cam kết trước đó đến từ cùng một chi nhánh?

Tôi yêu cầu điều này bởi vì tôi có rất nhiều xung đột trong các tệp tôi chưa chạm vào. Oh, và tôi làm việc hàng ngày với nhánh thượng lưu này.

CẬP NHẬT

Tôi vừa mới nhận thấy rằng một trong những cam kết đưa từ thượng nguồn đến chi nhánh chủ đề của tôi có SHA-1 id của họ thay đổi. Có ai biết điều gì có thể khiến Git làm điều này không? Nó có thể là chuyển đổi --merge?

Phiên bản git của tôi là 1.5.6.5

+0

Bạn có một số loại chuyển đổi tự động như trong http://stackoverflow.com/questions/1042207/git-svn-rebase-fails không? – VonC

+0

@VonC 'core.autocrlf' trống, mà tôi giả định có giá trị mặc định là" đầu vào ". Có thể vì điều này? Tôi không chắc chắn làm thế nào tôi có thể tái sản xuất vấn đề bây giờ, để xem nếu thiết lập nó để sai làm cho bất kỳ sự khác biệt. –

+0

ț: đảm bảo đặt thành sai, chỉ để chắc chắn. – VonC

Trả lời

2

Rebase ghi lại lịch sử. Nếu bạn rebase cam kết đã được đẩy đến một điều khiển từ xa, bạn đang bước vào một thế giới bị tổn thương. Thậm chí tệ hơn nếu bạn tiếp tục rebase như thế này. Rebase có số lần mở rộng là tại các thời điểm, nhưng nó là công cụ đặc biệt IMO, không phải là công cụ thông thường, chẳng hạn như hợp nhất.

và sau đó áp dụng (dưới dạng bản vá) cam kết của tôi trên đầu trang.

Vâng, như mới cam kết

Vì vậy, nó kết thúc lên trở thành một hoạt động nhanh về phía trước

số Một nhanh về phía trước chỉ đơn giản là di chuyển con trỏ HEAD đó chi nhánh. Bạn đang giới thiệu các đối tượng mới từ xa và sau đó áp dụng các bản vá lỗi trên đó.

Nếu bạn địa phương và từ xa là cuối cùng trong đồng bộ tại A1, và nói rằng bạn bổ sung (địa phương) A2A3 cam kết, và thấy rằng điều khiển từ xa đã thêm B1B2, rebasing sẽ stash A2A3, kéo xuống B1B2 (nên chuyển tiếp nhanh vì chúng có chung một hậu duệ A1) và sau đó áp dụng các bản vá cho A2A3làm cam kết mới (do đó SHA-1) A2'A3'.

Vì vậy, bây giờ lịch sử địa phương của bạn là: A1 - B1 - B2 - A2' - A3' không phải là tua đi nhanh.

+1

Tôi biết những nguy hiểm của rebase, và tôi không sử dụng rebase như thế. Tuy nhiên, vì một số lý do, khi tôi đăng câu hỏi này, tôi đã có những xung đột kỳ lạ trên các tệp mà tôi chưa từng chạm vào. Rebase được biết là tạo ra ít xung đột hơn so với hợp nhất, nhưng nó đã không thực hiện như vậy đối với tôi trở lại sau đó. Do đó câu hỏi của tôi. Tôi đã không tìm ra nguyên nhân, không tái tạo nó. –

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