2012-06-06 31 views
7

Đối với mỗi lỗi trong mã, tôi tạo một nhánh riêng biệt. Khi lỗi được cố định I sáp nhập chi nhánh này trong tổng thể, vì vậy tôi có lịch sử như minh họa dưới đây (chúng ta thấy hai chi nhánh với các bản sửa lỗi):Nhận git diff cho bất kỳ chi nhánh nào được hợp nhất

  defect1 fix   defect2 fix 
     a---b---c---d   e---f 
     /   \  / \ 
---o---1---x---y---z---2---o---3---w---4---o--- 

Câu hỏi đặt ra là làm thế nào để có được diff cho fix1 (giữa đầu chi nhánh (1) và nhánh nhánh (2)) hoặc fix2 (khác nhau giữa (3) và (4)) tại bất kỳ thời điểm nào (ví dụ đối với bất kỳ khiếm khuyết đã đóng nào trong quá khứ).

Cập nhật: Câu hỏi thực tế là làm thế nào để tìm ra SHA summs của ad hoặc ef để thực hiện tiếp theo lệnh diff rõ ràng diff <commit> <commit>

+0

Giống như nhận xét. SCM nhựa (www, plasticcm.com) phù hợp hoàn hảo với nhánh trên mỗi mẫu nhiệm vụ/lỗi.Sử dụng nhựa, bạn có thể nhấp chuột phải vào một chi nhánh và nhấn chi nhánh khác. Sử dụng dòng lệnh, bạn có thể thực hiện 'cm diff ' –

Trả lời

6

Câu trả lời rất đơn giản:

git diff 1..d 

Điều này cho thấy sự khác biệt giữa điểm phân nhánh của chi nhánh defect1 fix (ví dụ: 1) và kết thúc của nó (ví dụ: d).

Để tìm sự bắt đầu của chi nhánh defect1 fix, sử dụng

git merge-base master defect1-fix-branch 

như được chỉ ra trong câu trả lời này: https://stackoverflow.com/a/2458173/520162.
Điều này cung cấp cho bạn 1 theo tài liệu của git merge-base.

Kết thúc chi nhánh defect1 fix chỉ được xác định bằng tên của nó. Vì vậy, việc tìm kiếm tất cả những khác biệt giới thiệu trong defect1 fix, bạn cần làm

git diff 1..defect1-fix-branch 
+0

Phải, tôi muốn thay đổi giữa ' .. ' và câu hỏi là cách tìm ra 'SHAs' của' a' và 'd' nếu chúng không được gắn thẻ. –

+0

@AlexanderNikolayev: xem câu trả lời cập nhật. – eckes

+1

Không phải là 'git diff .. '? Bởi vì bạn sẽ muốn bao gồm diff của '1' và' a' cũng (đó là một phần của sự phát triển của chi nhánh). – Shahbaz

1

gì về:

git diff <commit> <commit> 

Trong trường hợp các thông số cam kết là checksums SHA của các cam kết thực tế.

+1

Có, nhưng làm thế nào để tìm ra tổng kiểm tra SHA của các cam kết này? –

+0

Bạn có thể kiểm tra nó từ 'git log' –

0

Nếu bạn muốn xem những gì thay đổi một chi nhánh tính năng được giới thiệu, sau khi nó đã được sáp nhập, bạn chỉ cần chạy:

git diff HEAD^..HEAD 

Trên nhánh master. Điều đó cho thấy sự khác biệt giữa phụ huynh đầu tiên (cam kết hợp nhất) đầu tiên và HEAD, hiển thị hiệu quả sự khác biệt toàn bộ nhánh tổng hợp tính năng được đưa vào nhánh chính.

Không cần phải làm cho mọi việc phức tạp :)

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