2012-05-22 36 views
8

git branch -a --contains <hash> cung cấp cho tôi tất cả các chi nhánh có chứa hash. những gì tôi muốn là git branch -a --no-contains <hash>. Thật không may, có vẻ như không phải là một lệnh để thực hiện điều này, vì vậy tôi nghĩ giải pháp là một cái gì đó như:Hiển thị các chi nhánh không chứa cam kết

git branch -a | grep -v output of(git branch -a --contains) nhưng bash của tôi không phải là nhiệm vụ.

Show all branches that commit A is on and commit B is not on? dường như áp dụng, nhưng cách tiếp cận có vẻ phức tạp hơn mức cần thiết.

Cách tiếp cận tốt nhất/đơn giản nhất để thực hiện điều này ở trên là gì?

+0

Để hiển thị: ** Cờ '--no-contains' được thêm vào [Git 2.13] (https://github.com/git/git/blob/v2.13.0/Documentation/RelNotes/2.13.0 .txt) ** .. Như đã nêu trong [câu trả lời của tôi] (https://stackoverflow.com/a/44687845/1667513). – nonsensickle

Trả lời

11

grep có tùy chọn -F khớp với các chuỗi cố định. Sẽ hữu ích cho những gì bạn đang làm.

git branch -a | grep -vF "$(git branch -a --contains <hash>)" 

Thật không may, -F sẽ lọc ra các tên nhánh có khớp một phần. Theo đề xuất của antak, chúng tôi có thể sử dụng comm để thay thế cho một khác biệt đáng tin cậy hơn.

git branch -a | sort | comm -3 - <(git branch -a --contains <hash> | sort) 
+1

+1 Điều này thực hiện thủ thuật. Ngắn gọn và đúng trọng tâm. – ralphtheninja

+0

vâng, chắc chắn. cảm ơn! – kayaker243

+0

Lưu ý rằng điều này sẽ ẩn các chi nhánh không khớp một phần với tên của các nhánh có chứa cam kết đã nói. ví dụ. 'echo -e" aaa \ nbbb "| grep -vF "$ (echo aa)" ' – antak

2

Vì câu trả lời được chấp nhận sẽ chạy nhanh nếu tên chi nhánh khớp một phần, đây là cách xử lý sự định vị này.

git branch -a | comm -3 - <(git branch -a --contains <hash>) 

| sort có thể được thêm vào cuối cả hai lệnh nếu cảnh báo comm: file 1 is not in sorted order làm phiền bạn. Tuy nhiên, điều này là không cần thiết để có được kết quả chính xác khi thứ tự của hai đầu vào tương đương nhau.

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