2013-06-28 45 views
10

Tôi mới dùng git và tôi đang sử dụng phần mở rộng git cho Visual Studio. Khi các thành viên nhóm khác cam kết thay đổi đôi khi khi tôi cố gắng đồng bộ hóa dự án, tôi có thể thấy các cam kết đến nhưng dự án không được đồng bộ hóa và lỗi bên dưới được nâng lên.Git Extension cho Visual Studio

Lỗi do libgit2 đưa ra. Danh mục = 21 (MergeConflict). 2 các thay đổi không được cam kết sẽ bị ghi đè bằng cách hợp nhất

vấn đề là làm cách nào để hợp nhất các xung đột? Không có cửa sổ để hợp nhất xung đột sau khi lỗi này được nâng lên và tôi cũng đã cam kết tất cả các thay đổi của mình.

Trả lời

6

Thông báo là về các thay đổi không được cam kết, chứ không phải xung đột hợp nhất thực. Tìm hiểu để KHÔNG hợp nhất hoặc làm bất kỳ công cụ git ưa thích nào với những thay đổi không được cam kết. Trước khi một hoạt động cam kết thay đổi của bạn hoặc stash chúng. Ngay cả khi xung đột như vậy không được gắn cờ, nó có thể không phải là những gì bạn thực sự muốn làm.

Trong GE có tùy chọn hiển thị các thay đổi của worktree (bỏ qua cảnh báo "chậm" trừ khi bạn làm việc trên repo khổng lồ và thường xuyên có hàng trăm tệp đã thay đổi) và quen với việc xem nó trong trình duyệt. Ngoài ra, nút "Cam kết" hiển thị số lượng, sẽ là 0 khi bạn kích hoạt hợp nhất.

Nếu ở giữa công việc bạn muốn đồng bộ (và suy nghĩ lại và có lý do thực sự tốt, trung thực), hãy sử dụng stash, sau đó kéo (hoặc rebase) và sau khi hoàn tất, hãy ngừng công việc của bạn.

Xung đột hợp nhất thực được xử lý tốt nhất bằng cách sử dụng các công cụ hợp nhất hình ảnh, bạn có thể thử tortoisemerge hoặc sự ưa thích của nguồn gốc yêu thích của tôi. Kdiff3 được vận chuyển với GE là tốt để nhìn xung quanh nhưng không quá tốt ở giải quyết chính nó, trừ khi tất cả bạn cần là chọn ứng viên theo nghĩa đen. GE giúp bạn giải quyết xung đột một cách tự động.

+1

Chọn thực hành quy trình làm việc tốt để tránh sự cố này. tch đến nhánh chính để đồng bộ hóa khi bạn đã sẵn sàng hợp nhất, sau đó khi tổng thể đã được cập nhật, hãy hợp nhất chi nhánh đối tượng địa lý của bạn. Hoặc bạn có thể rebase chi nhánh tính năng của bạn chống lại chủ và sau đó hợp nhất nếu bạn thích dòng công việc phong cách nhanh về phía trước. Nhưng về cơ bản - như đã nêu trong câu trả lời này. – patthoyts

3

Câu trả lời trước đó không phải lúc nào cũng đúng. Bạn có thể nhận được thông báo này ngay cả khi bạn không có bất kỳ thay đổi nào không được cam kết. Đồng nghiệp của tôi & Tôi vừa sửa lỗi vừa cam kết với repos địa phương của chúng tôi và tôi thích tốt hơn. Tôi chưa bao giờ kiểm tra sự thay đổi của mình, nhưng đã bỏ qua nó & đã kéo thay đổi của mình.

Trong khi đó, anh ấy đã "hoàn nguyên" thay đổi của mình (không nói chuyện với tôi) và sau đó yêu cầu tôi đẩy sự thay đổi của tôi lên. Tôi đã nói với anh ta tôi đã ném thay đổi của tôi, vì vậy anh ta đã hoàn nguyên sự trở lại của mình (kết thúc bằng hai lần commit).

Khi tôi chuyển sang một thay đổi khác (cam kết với repo địa phương của tôi mà không có thay đổi không được cam kết), ông đã đẩy cả sự đảo ngược thay đổi của mình và sự đảo ngược, và tôi nhận được thông báo ở trên.

Giải pháp khá đơn giản, tôi đã sử dụng trình đơn Tác vụ để mở lời nhắc lệnh và cấp git pull tại đó. Điều đó làm việc một cách chính xác và tạo ra một cam kết hợp nhất cho tôi với sự đảo ngược của mình và tái đảo ngược.

Có, anh ấy có thể có (insert incomprehensible git-gibberish here) thay vào đó, nhưng anh ấy không làm vậy, vì vậy hãy hút nó nerds. Nó hoạt động, chúng tôi đang di chuyển trên.

Dưới đây là một mục phản hồi VS về vấn đề này: http://connect.microsoft.com/VisualStudio/feedbackdetail/view/955248/git-merge-fails-claiming-uncommited-change-would-be-overwritten-by-merge-ssh-mergeconflict

+0

git reset --hard, đã làm việc cho tôi (vấn đề tôi có thể đã gây ra bởi những thay đổi không được cam kết đối với cùng một chi nhánh do tôi thực hiện trên máy khác, VM). – learnerplates

1

Đôi khi, git pull là không đủ ... (nếu bạn nhận được "Đã cập nhật.")

Nó có thể là cần thiết để làm việc hợp nhất từ ​​dòng lệnh:

Trong Visual Studio (2015, Update 3 cho tôi) trong Team Explorer, Branches, Actions, Open In Command Prompt, sau đó:

git merge NameOfBranchBeingMergedFrom 

Sau đó đóng cửa sổ đó và thực hiện phần còn lại (Kết hợp xung đột, v.v.) từ VS

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