मैं एकाधिक ट्रैकिंग शाखाओं पर एक गिट भंडार में काम कर रहा हूं, और दिन के अंत तक मुझे नहीं पता कि मैंने अपने सभी काम सभी शाखाओं में धक्का दिया है या नहीं।

क्या कोई गिट कमांड दिखा रहा है कि कौन सी शाखाएं धक्का नहीं दी गई हैं, इसलिए मैं चेकआउट कर सकता हूं और पुल बना सकता हूं, यदि आवश्यक हो तो विलय कर सकता हूं और फिर धक्का दे सकता हूं?

0
Phate01 17 जिंदा 2020, 20:32

1 उत्तर

सबसे बढ़िया उत्तर

धारणा (या परिभाषा): ट्रैकिंग शाखा से आपका मतलब उस शाखा से है जिसमें अपस्ट्रीम सेट है, और जो अपस्ट्रीम रिमोट-ट्रैकिंग नाम को संदर्भित करता है। उदाहरण के लिए, यदि शाखा develop की अपस्ट्रीम origin/develop है, तो वह मायने रखता है; लेकिन अगर शाखा test में develop को अपस्ट्रीम के रूप में सेट किया गया है, तो उसकी गिनती नहीं होती है।

इस मामले में उपयोग करने के लिए एक संभावित कमांड अनुक्रम है:

git fetch

के बाद:

git branch -vv | grep origin/

आउटपुट इस जैसा होगा:

* master          083378cc35 [origin/master] commit subject line
  xyz             8dbdf339cd [origin/xyz: ahead 1, behind 13] another subject line

जो हमें बताता है कि master अप टू डेट है लेकिन xyz अपने रिमोट समकक्ष के साथ सिंक से बाहर है।

ध्यान दें कि यदि अपस्ट्रीम का नाम origin नहीं है, तो आपको तदनुसार grep कमांड को बदलना होगा। आपको एक से अधिक git fetch की भी आवश्यकता हो सकती है, या आप git fetch --all का उपयोग करना चाह सकते हैं। (आप git fetch --prune का उपयोग भी कर सकते हैं या fetch.prune को true पर सेट कर सकते हैं, लेकिन यह यहां बाकी सभी चीजों से स्वतंत्र है।)


ऐसी शानदार स्क्रिप्ट लिखना संभव है जो केवल नाम प्रिंट करती हो, सिंक की गई शाखाओं को छोड़ देती हो, इत्यादि। यदि आप ऐसा करना चाहते हैं, तो refs/heads/ नाम स्थान में संदर्भों की गणना करने के लिए git for-each-ref का उपयोग करें। ये आपकी शाखा के नाम हैं। प्रत्येक नाम के लिए, परीक्षण करें कि क्या इसकी अपस्ट्रीम सेटिंग है और यदि ऐसा है, तो इसके अपस्ट्रीम की हैश आईडी प्राप्त करें। इसकी तुलना शाखा की हैश आईडी से करें। साथ ही, जांचें कि क्या अपस्ट्रीम एक स्थानीय शाखा है (उपरोक्त test उदाहरण, जहां अपस्ट्रीम develop है) या रिमोट-ट्रैकिंग नाम है।

यदि अपस्ट्रीम है एक रिमोट-ट्रैकिंग नाम है और स्थानीय नाम और अपस्ट्रीम की हैश आईडी भिन्न हैं, तो शाखा अपने दूरस्थ समकक्ष के साथ सिंक से बाहर है। आगे और/या पीछे की गिनती पाने के लिए, उपयोग करें:

git rev-list --count --left-right local...upstream

आगे की गिनती पहली मुद्रित संख्या होगी और पीछे की गिनती दूसरी होगी।

3
torek 17 जिंदा 2020, 20:56