2012-08-16 37 views
5

Kho Git của tôi có hai tệp, alphabeta, với nội dung giống hệt nhau.Khôi phục Git sau khi hợp nhất nhầm lẫn với tệp đã xóa

Nếu tôi xóa alpha trong nhánh chính của mình và chỉnh sửa nó trong nhánh tính năng của mình, khi tôi hợp nhất chính thành đối tượng địa lý, tôi được cảnh báo về xung đột. Giả sử tôi giải quyết vấn đề này bằng cách xóa alpha.

Nếu tôi sau đó rebase chi nhánh tính năng của tôi vào chủ sử dụng git rebase master, alpha bị xóa, nhưng những thay đổi tôi thực hiện để alpha trên chi nhánh tính năng hiện đang áp dụng cho beta! Tôi nhận được cảnh báo xung đột nhưng nó được giải quyết một cách vui vẻ với tính năng tự động hợp nhất mà không có cam kết bị chặn để tôi xem xét.

Điều thú vị là nếu tôi thực hiện git rebase -i và chỉ chấp nhận mặc định, beta không được chỉnh sửa và tôi sẽ giải quyết cùng một xung đột mà tôi đã giải quyết tại thời điểm hợp nhất.

Ba câu hỏi có liên quan sau đó:

  1. Tại sao Git nghĩ sự thay đổi tôi áp dụng cho một tập tin nên được áp dụng khác, khi người kia đã không được chỉnh sửa bởi bất kỳ cam kết?
  2. Làm cách nào để tránh tình huống này?
  3. Tại sao hành vi khác nhau đối với một lần rebase tương tác, ngay cả khi tôi có các tùy chọn mặc định?

Tôi đang chạy Git 1.7.9 trên Cygwin trên Win7. Tôi đã đặt một số transcript on pastebin hiển thị số này bắt đầu bằng một số git init trong một thư mục trống, nếu có ai muốn xem chi tiết cho chính mình (tôi không đăng nó ở đây do chiều dài).

Trả lời

10

Từ documentation for git-rebase:

-m
--merge
Sử dụng sáp nhập các chiến lược để rebase. Khi chiến lược phối hợp đệ quy (mặc định) được sử dụng, điều này cho phép rebase nhận biết được các đổi tên ở phía thượng nguồn.

Khi một tệp bị xóa, Git xem xét một ứng cử viên để đổi tên và cố gắng áp dụng bản vá được khôi phục cho tệp được đổi tên tương ứng. Nghe có vẻ như nó có thể đã làm cho một người nghèo đoán trong trường hợp của bạn.

Bạn có thể sử dụng tùy chọn -m để chọn một chiến lược hợp nhất khác. Ví dụ: chiến lược hợp nhất resolve có thể tránh được sự cố này với các đổi tên tự động phát hiện (xem git-merge để biết chi tiết về các chiến lược hợp nhất).

+1

một giải pháp có thể khác là chơi với tùy chọn 'đổi tên ngưỡng' của chiến lược 'đệ quy'. Đặt nó thành 'M100%', nên giải quyết vấn đề với dự đoán xấu. –

+0

Cảm ơn @GabrielePetronella. Điều đó đã giải quyết nó cho tôi – thehouse

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