2016-08-30 9 views
13

कई स्थानीय शाखाओं के साथ एक परियोजना को देखते हुए, प्रत्येक रिमोट शाखा को ट्रैक करते हुए, क्या कोई ऐसी आदेश है जो सभी शाखाओं को सूचीबद्ध नहीं करती है? (यानी, अगर उन शाखाओं में से कोई भी चेक आउट नहीं किया गया है।)गिट में, अनपढ़ किए गए कामों के साथ शाखाओं के नामों की सूची

मैं खुद को काम नहीं देखना चाहता, न ही मैं उन शाखाओं को देखना चाहता हूं जो अद्यतित हैं, मैं बस देखना चाहता हूं कौन सी शाखाएं उनके रिमोट से आगे हैं।

मैंने git log --branches --not --remotes --simplify-by-decoration --decorate --oneline की कोशिश की है, लेकिन ऐसा लगता है कि मुझे क्या चाहिए। मेरे वर्तमान रेपो पर यह चल रहा है कोई उत्पादन देता है, लेकिन मेरे वर्तमान शाखा पर git status चल Your branch is ahead of 'origin/branchname' by 2 commits.

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads और git branch -v दोनों शो शाखाओं कि तारीख तक जो कि आगे बढ़ाने की जरूरत है और साथ ही कर रहे हैं पता चलता है। हालांकि, वे दोनों मेरी वर्तमान शाखा को [ahead 2] के रूप में दिखाते हैं।

अन्य आदेश जिन्हें मैंने पाया है उदाहरण के लिए। git log @{u}.., git cherry -v शाखाएं नहीं, खुद को काम करती है।

साइड प्रश्न: क्यों git log --branches --not --remotes --simplify-by-decoration --decorate --oneline से उत्पादन शाखाओं कि git branch -v के रूप में आगे से पता चलता शामिल नहीं होगा? पूर्व कमांड नहीं है सिर्फ refs/heads एक ज्ञात रिमोट के अनुरूप नहीं है; तो [ahead 2] के रूप में सूचीबद्ध एक शाखा इस मानदंड को पूरा नहीं करेगा?

+1

संभावित डुप्लिकेट [रिमोट समेत सभी शाखाओं के लिए आगे और पीछे की जानकारी दिखाएं] (http://stackoverflow.com/questions/7773939/show-git-ahead-and-behind-info-for-all-branches- सहित-रिमोट्स) –

+0

@TimBiegeleisen दिलचस्प है, लेकिन स्वीकार्य उत्तर एक बैश स्क्रिप्ट है (मैं लिनक्स/ओएसएक्स/विंडोज का उपयोग करता हूं), और दूसरा जवाब लगभग खाली आउटपुट देता है। – detly

+1

@TimBiegeleisen ठीक है, मैंने समस्या की पहचान की है और यह वास्तव में एक डुप्लिकेट है। – detly

उत्तर

3

log को --no-walk विकल्प के लिए एक बेहतर करने के लिए लगता है । मैं क्या --simplify-by-decoration से जरूरत का काम मेरा पूरा आदेश है:

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

... जो मैं unpushed लिए उपनामित गए

+0

दिलचस्प उपनाम। मेरे जवाब के लिए अच्छा विकल्प। +1 – VonC

+0

@ वोनसी के उत्तर के आधार पर यह शाखाओं को संबंधित रिमोट के साथ दिखाता है, इसलिए आपके वर्कफ़्लो के आधार पर वाईएमएमवी। मेरे लिए, यह बेहतर है:: '' – detly

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

कि सबसे सटीक जवाब है कि आप आसानी से पार्स कर सकते हैं रहने/ग्रेप

आप एक bash लिपि में ऐसा कर सकते हैं (अप-टू-डेट शाखाओं को हटाने की तरह) वांछित आउटपुट प्राप्त करने के लिए है कि आप करेंगे git-xxx (कोई एक्सटेंशन नहीं), कहीं अपने $PATH या %PATH% पर कॉल करें।
उस स्क्रिप्ट को git xxx के साथ बुलाया जा सकता है, और गिट बैश का उपयोग करेगा।
कि पोर्टेबल है और प्लेटफार्मों (यहां तक ​​कि विंडोज, जहां <Git For Windows>/usr/bin 200 linux आदेश (grep, sed, awk, xargs, ...) भी शामिल है पर अर्थ भर में काम करेंगे

+0

ध्यान दें कि यह ऐसी शाखाओं को हाइलाइट नहीं करता है जो रिमोट को ट्रैक नहीं कर रहे हैं (और इसलिए सभी अप्रकाशित काम करते हैं)। – Tamlyn

+0

@Tamlyn मैं सहमत हूं। हालांकि इस सवाल के संदर्भ में, मैंने केवल स्थानीय शाखाओं पर ध्यान केंद्रित किया जिसने रिमोट ट्रैकिंग शाखा निर्धारित की है। – VonC

संबंधित मुद्दे