2015-12-14 14 views
8

Làm cách nào để biết chi nhánh (hoặc cam kết) được hợp nhất trong SourceTree?Sourcetree: Tìm hiểu xem chi nhánh có được hợp nhất hay không

Khi sử dụng gitk --all, nó sẽ hiển thị cho một cam kết (hoặc chi nhánh) foo tất cả các chi nhánh khác, nơi foo đã được sáp nhập vào.

Để làm rõ ý tôi là ảnh chụp màn hình: Khu vực được bao quanh (màu đỏ) hiển thị tất cả các nhánh mà cam kết hiện tại là một phần của. Điều này có thể được hiển thị trong SourceTree không?

Screenshot of gitk

+0

Vì vậy, bạn biết cách tìm kiếm dòng lệnh, nhưng muốn tìm cách thực hiện nó trong Sourcetree cụ thể? Tôi không nghĩ rằng nó có tính năng đó. – tom

+0

Có! (Vâng, gitk thực sự là git gui được xây dựng trong, nhưng nó có vẻ kém hơn so với sourcetree ngoại trừ trong khía cạnh này ...) –

Trả lời

7

But maybe it is easier after all to not use SourceTree for that feature

Bạn có thể sử dụng một hành động tùy chỉnh quy định tại SourceTree và liệt kê các chi nhánh sáp nhập.
Điều đó không được tích hợp như gitk, nhưng ít nhất, bạn không phải chuyển công cụ.

Đầu tiên xác định một custom action, using $SHA for getting the selected commit:

Custom action

Nó nên gọi một kịch bản trong bạn %PATH% gọi git-bm (xem this answer as an example)

#!/bin/sh 
for branch in $(git for-each-ref --format="%(refname:short)" refs/heads/); do 
    if [ "${branch}" != "$1" ]; then 
    t=$(git for-each-ref --format="%(refname:short)" --merged "${branch}" refs/heads/|grep -v "${branch}"|grep "$1") 
    if [ "${t}" != "" ]; then 
     echo "${branch}" 
    else 
     t=$(git branch --contains "$1" | grep "${branch}") 
     if [ "${t}" != "" ]; then 
     echo "${branch}"  
     fi 
    fi 
    fi 
done 

Điều đó sẽ liệt kê tất cả các chi nhánh từ đó bạn có thể truy cập SHA1 hiện tại (có nghĩa là "tất cả các chi nhánh mà chi nhánh hiện tại đã được hợp nhất")

(Lưu ý: cú pháp git for-each-ref --merged đã được giới thiệu chỉ trong git 2.7.0 - ngày 4 tháng 1 năm 2016.Xem ví dụ "Is it possible to filter out merged branches in git for-each-ref?")

Sau đó gọi nó trên phạm bạn muốn:

invoke custom action

Và sẽ giúp bạn có được danh sách các chi nhánh nó đã được sáp nhập vào:

list

Nó là một cách giải quyết, nhưng ít nhất bạn không rời SourceTree.

+0

Thật không may, tôi phát hiện ra rằng điều này không làm việc sau khi tất cả. Tôi muốn hiển thị tất cả các chi nhánh nhánh này được sáp nhập vào, không phải là cách khác xung quanh. (Ví dụ, nếu tôi hợp nhất nhánh hiện tại thành master, với giải pháp của bạn nó sẽ không hiển thị "master" trong danh sách). Gitk làm điều này một cách chính xác ... –

+0

@ JanRüegg vì vậy một cái gì đó như (pseudo-syntax): 'cho mỗi ngành: (git branch --merged abranch | grep currentBranch)' – VonC

+0

@ JanRüegg Tôi đã chỉnh sửa câu trả lời bằng một kịch bản cần liệt kê "tất cả các chi nhánh nhánh này được hợp nhất thành". Bạn có thể kiểm tra nó? Nó hoạt động bên cạnh tôi. – VonC

7

Tương đương chạy gitk --all trong SourceTree sẽ được chọn Tất cả các chi nhánh từ danh sách thả xuống ở góc trên bên trái:

View All Branches in SourceTree

Các chương trình đồ thị mà chi nhánh đã được sáp nhập ở đâu, giống như gitk.

Tuy nhiên, tìm hiểu chính xác mà chi nhánh đã được sáp nhập trong hiện tại một - đó là chi nhánh có lời khuyên là thể truy cập từ HEAD - được dễ dàng hơn thực hiện từ dòng lệnh, như bạn chỉ có thể nói:

git branch --merged 

Nếu bạn muốn, bạn cũng có thể bao gồm chi nhánh từ xa trong danh sách bằng cách thêm --all tùy chọn:

git branch --all --merged 

Tìm hiểu các chi nhánh có không được sáp nhập trong hiện tại chỉ là dễ dàng:

git branch --no-merged 
+0

Cảm ơn sự giúp đỡ của bạn! Tôi làm rõ câu hỏi với một ảnh chụp màn hình, để hiển thị phần nào của gitk tôi muốn "tìm" trong SourceTree. Nhưng có lẽ nó dễ dàng hơn sau khi tất cả không sử dụng sourcetree cho tính năng đó, như bạn đã mô tả ... –

+0

Như đã đề cập trong phần bình luận cho câu trả lời khác, điều này cũng không hiệu quả! Tôi muốn biết chi nhánh nào hiện tại đã được sáp nhập vào, không phải là cách khác! –

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