2016-09-21 17 views
6

Sau khi cập nhật SourceTree lên phiên bản mới nhất của nó, tôi đang tranh đấu với vấn đề này. Giả sử sau kịch bản:Git: không thể thực hiện cam kết một phần trong khi hợp nhất (SourceTree)

Có tập tin Một, BC dưới sự kiểm soát phiên bản và chỉ có một chi nhánh. Trong bản sao làm việc của tôi, tôi thực hiện một số thay đổi đối với tập tin Một để nó biến thành một A ' cũng như các tập tin B để B'. Người khác trong bản sao làm việc của anh ấy thực hiện thay đổi đối với tệp C ->C '.

Giai đoạn I và cam kết các thay đổi của tôi đối với tệp B chỉ. Vì vậy, tôi có một phiên bản mới: Một, B ', C và làm việc sao chép A', B', C.

Một trong những khác cam kết thay đổi của mình, vì vậy ông làm cho một phiên bản Một, B, C' và đẩy nó về nguồn gốc.

Và ở đây nó đến. Khi tôi thực hiện thao tác kéo, tôi nhận được một số thay đổi hợp nhất (C '). Và tôi muốn cam kết sửa đổi bao gồm A, B ', C'. Tôi không muốn làm bất cứ điều gì với tập tin đã sửa đổi A. . Tuy nhiên, GIT, SourceTree resp, không thành công với:

gây tử vong: không thể làm một phần cam kết trong một hợp nhất.

cho đến khi tôi đặt hoặc hủy thay đổi đối với tệp A.

Tôi khá chắc chắn rằng một số phiên bản trước của SourceTree đã không hiển thị hành vi này.

Cập nhật 2017/05

Nó xuất hiện trong các phiên bản gần đây nhất SourceTree 2.0.20.1 vấn đề này đã được giải quyết. Tuy nhiên, hãy chắc chắn bạn muốn cập nhật lên phiên bản này, vì nó chứa rất nhiều "lỗi" (các tính năng mới) mà tôi thực sự không thích.

Trả lời

0

gây tử vong: không thể thực hiện cam kết một phần trong quá trình hợp nhất.

Điều này cho biết rằng quá trình hợp nhất của bạn vẫn đang diễn ra, có thể có một số xung đột mà bạn vẫn cần giải quyết.

Vui lòng chọn Xung đột từ hộp thả xuống dưới dạng ảnh chụp màn hình và bạn sẽ có thể thấy danh sách các tệp bị xung đột với biểu tượng hình tam giác. Giải quyết những điều này và sau đó thực hiện một cam kết sẽ khắc phục vấn đề của bạn.

enter image description here

bài này nên đưa ra một ý tưởng ngắn gọn về cách cấu hình và sử dụng một công cụ bên ngoài để giải quyết xung đột nhập - How to interactively (visually) resolve conflicts in SourceTree/git

Nếu bạn vẫn không thể bù đắp, bạn có thể giấu những thay đổi của bạn. Kéo từ nguồn gốc và áp dụng stash để sửa chữa giống nhau.

Chỉnh sửa

Bạn cũng có thể tự động hóa tất cả các hoạt động đó bằng cách sử dụng "hành động tùy chỉnh". Một kịch bản mẫu để thực hiện một stash >> pull >> áp dụng stash được sao chép bên dưới

git -c diff.mnemonicprefix=false -c core.quotepath=false stash save temp 
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin 
git -c diff.mnemonicprefix=false -c core.quotepath=false pull origin <<local path goes here>> 
git -c diff.mnemonicprefix=false -c core.quotepath=false submodule update --init --recursive 
git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply [email protected]{0} 
+1

Cảm ơn bạn đã phản hồi. Trong trường hợp trong câu hỏi ban đầu không có xung đột vì tệp A không được thay đổi và cam kết. Tôi biết tôi có thể làm cho một stash, nhưng tôi không muốn làm điều đó mọi lúc tôi đang thực hiện một hợp nhất. Đặc biệt là khi điều này làm việc tốt trong các phiên bản trước. –

+0

Bạn cũng có thể tự động hóa tất cả các hoạt động như vậy bằng cách sử dụng "hành động tùy chỉnh", vui lòng tham khảo các chỉnh sửa – Arvin

0

Câu trả lời sau đây cho question này đã làm việc cho tôi.

"Bạn có thể tự xóa .git/MERGE_HEAD và Git sẽ không thể nói với rằng bạn chỉ cần thực hiện một hợp nhất. Nó sẽ cho phép bạn sửa đổi trước cam kết với những thay đổi trong chỉ số của bạn giống như bình thường. "

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