2016-08-30 17 views
13

Cho một dự án với một số nhánh địa phương, mỗi nhánh theo dõi một số nhánh từ xa, có lệnh liệt kê tất cả các nhánh có cam kết chưa được xóa không? (Đó là, ngay cả khi không có chi nhánh nào trong số đó được kiểm tra.)Trong Git, liệt kê tên của các nhánh với các cam kết chưa được rửa

Tôi không muốn tự mình thấy chính mình, cũng không muốn thấy các chi nhánh được cập nhật, tôi chỉ muốn xem mà các chi nhánh đang đi trước điều khiển từ xa của họ.

Tôi đã thử git log --branches --not --remotes --simplify-by-decoration --decorate --oneline, nhưng dường như không hiển thị những gì tôi cần. Chạy nó trên repo hiện tại của tôi đưa ra không có đầu ra, nhưng chạy git status trên chi nhánh hiện tại của tôi cho thấy Your branch is ahead of 'origin/branchname' by 2 commits.

git for-each-ref --format="%(refname:short) %(push:track)" refs/headsgit branch -v cả chương trình chi nhánh đó được cập nhật cũng như những người mà cần đẩy. Tuy nhiên, chúng do cả hai hiển thị chi nhánh hiện tại của tôi là [ahead 2].

Các lệnh khác mà tôi đã tìm thấy, ví dụ: git log @{u}.., git cherry -v liệt kê các cam kết, chứ không phải các chi nhánh.

Câu hỏi phụ: tại sao đầu ra từ git log --branches --not --remotes --simplify-by-decoration --decorate --oneline không bao gồm các chi nhánh git branch -v hiển thị như trước? Không phải là lệnh cũ chỉ nhìn vào đó refs/heads không tương ứng với một điều khiển từ xa đã biết; do đó, không phải chi nhánh nào được liệt kê là [ahead 2] đáp ứng tiêu chí này?

+1

Có thể trùng lặp của [Hiển thị git trước và sau thông tin cho tất cả các chi nhánh, bao gồm cả điều khiển từ xa] (http://stackoverflow.com/questions/7773939/show-git-ahead-and-behind-info-for-all-branches- bao gồm cả điều khiển từ xa) –

+0

@TimBiegeleisen Thú vị, nhưng câu trả lời được chấp nhận là tập lệnh Bash (tôi sử dụng Linux/OSX/Windows) và câu trả lời khác cho đầu ra gần như trống. – detly

+1

@TimBiegeleisen Được rồi, tôi đã xác định được sự cố và đây thực sự là một bản sao. – detly

Trả lời

3

Các --no-walk tùy chọn để log dường như để làm một tốt hơn . công việc của những gì tôi cần hơn --simplify-by-decoration lệnh đầy đủ của tôi là:

git log --branches --not --remotes --no-walk --decorate --oneline

... mà tôi đã lấy bí danh là unpushed

.
+0

Bí danh thú vị. Tốt thay thế cho câu trả lời của tôi. +1 – VonC

+0

Theo câu trả lời của @ VonC, điều này không hiển thị các nhánh không có điều khiển từ xa tương ứng, vì vậy YMMV tùy thuộc vào quy trình làm việc của bạn. Đối với tôi, điều này là thích hợp hơn ':)' – detly

7
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads 

Đó vẫn là câu trả lời chính xác nhất mà bạn có thể dễ dàng phân tích cú pháp/grep để có được những kết quả mong muốn (như loại bỏ up-to-date chi nhánh)

Bạn có thể làm như vậy trong một kịch bản bash rằng bạn sẽ hãy gọi git-xxx (không có tiện ích mở rộng), ở đâu đó trong số $PATH hoặc %PATH% của bạn.
Tập lệnh đó sau đó có thể được gọi với git xxx và sẽ sử dụng git bash.
Đó là xách tay và sẽ làm việc trên nhiều nền tảng (có nghĩa là ngay cả trên Windows, nơi <Git For Windows>/usr/bin bao gồm hơn 200 lệnh linux (grep, sed, awk, xargs ...)

+0

Lưu ý rằng điều này không làm nổi bật các nhánh không theo dõi điều khiển từ xa (và do đó có tất cả các cam kết chưa được xóa). – Tamlyn

+0

@Tamlyn Tôi đồng ý. Tuy nhiên, trong bối cảnh của câu hỏi này, tôi chỉ tập trung vào các chi nhánh địa phương đã thiết lập một nhánh theo dõi từ xa. – VonC

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