मास्टर और शाखा के बीच जानकारी के आगे / पीछे git?


201

मैंने अपने स्थानीय रेपो ( test-branch) में परीक्षण के लिए एक शाखा बनाई है जिसे मैंने धक्का दिया Github

यदि मैं अपने Githubखाते में जाता हूं और test-branchयह चयन करता हूं तो यह जानकारी दिखाता है:

This branch is 1 commit ahead and 2 commits behind master

मेरे प्रश्न हैं:

  1. मैं इस जानकारी को स्थानीय रूप से कैसे प्रदर्शित कर सकता हूं (अर्थात: एक कमांड जो Githubइसे देखने के लिए खोलने के बजाय टर्मिनल पर दिखाता है)?
  2. मुझे पता है कि मैं उपयोग करने वाली शाखाओं के बीच अंतर देख सकता हूं:

    git diff master..test-branch
    

    या Meld(जो मुझे पसंद है) का उपयोग कर :

    git difftool master..test-branch
    

    लेकिन मैं सोच रहा था कि आगे और पीछे अलग-अलग देखने का कोई तरीका है । IE: यह दिखाने का एक तरीका है कि 1 अपने आप आगे बढ़े और फिर वे 2 अपने आप से पीछे हो जाएं?



1
Git 2.5+ (Q2 2015) पेश करेगा git for-each-ref --format="%(push:track)" refs/heads। देखें नीचे मेरा उत्तर
VonC

1
क्योंकि मैं यह प्रश्न नहीं लिख सका कि मैं जिन कीवर्ड्स के बारे में लिखने जा रहा हूं, मैं केवल यह ध्यान रखना चाहता हूं कि उन परिशिष्टों (या "सेट अंतर") को लेने के लिए यह मात्रा कमिट के सेट के बीच है जो उन शाखाओं को बनाते हैं (और तो तत्वों की गिनती)। उम्मीद है कि यह खोज इंजन सूचकांक में बनाता है।
दोपहर

जवाबों:


309

यहाँ एक चाल है जो मैंने दो शाखाओं की तुलना करने के लिए पाया है और दिखाती है कि प्रत्येक शाखा कितनी कमिट करती है, वह दूसरे से आगे है (आपकी वेबसाइट 1 पर अधिक सामान्य उत्तर):

के लिए स्थानीय शाखाओं: git rev-list --left-right --count master...test-branch

के लिए दूरदराज के शाखाओं: git rev-list --left-right --count origin/master...origin/test-branch

यह निम्न की तरह आउटपुट देता है:

1 7

इस आउटपुट का अर्थ है: "की तुलना में master, test-branch7 कमिट्स आगे और 1 कमिट है।"

आप स्थानीय शाखाओं की तुलना दूरस्थ शाखाओं से भी कर सकते हैं, जैसे origin/master...masterकि यह पता लगाने के लिए कि स्थानीय masterशाखा अपने दूरस्थ समकक्ष के आगे / पीछे कितनी कमिट करती है।


1
मेरे लिए यह पता लगाने के लिए यह एक महान समाधान है कि क्या मैं एक शाखा को हटा सकता हूं या यदि यह अभी भी विकास से आगे है।
Maverick1st

1
@ Maverick1st, हाँ, यह कमांड विशेष रूप से उपयोगी है जब आप gitflow वर्कफ़्लो (जो मैं हूँ) का अनुसरण कर रहे हैं
user1834095

2
यह खोजने के लिए मेरे उपयोग के मामले के लिए सबसे अच्छा है कि क्या आपकी वर्तमान सुविधा शाखा दूरस्थ मास्टर ( git rev-list --left-right --count origin/master...@) के पीछे है - बशर्ते उपयोगकर्ता git fetchपहले करता हो; पुरानी शाखाओं से पुल अनुरोधों को रोकने के लिए उपयोगी।
याकूब। 19

9
यह जाँचने के लिए कि वर्तमान शाखा कितनी पीछे है:git rev-list --left-right --count origin/master...@ | cut -f1
jakub.g

8
@ jakub.g आप अगर आप का उपयोग कटौती की जरूरत नहीं है --left-onlyया--right-only
jasonkarns

39

सबसे पहले यह देखने के लिए कि आप स्थानीय रूप से कितने संशोधन कर रहे हैं, आपको git fetchअपने रिमोट से नवीनतम जानकारी सुनिश्चित करने के लिए एक करना चाहिए ।

डिफ़ॉल्ट आउटपुट git statusआपको बताता है कि आप आगे या पीछे कितने संशोधन कर रहे हैं, लेकिन आमतौर पर मुझे यह बहुत अधिक लगता है:

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

मैं पसंद करता हूँ git status -sb:

$ git status -sb
## master...origin/master [ahead 2, behind 1]

वास्तव में मैं इसे बस के लिए उपनाम देता हूं git s, और यह मुख्य कमांड है जो मैं स्थिति की जांच के लिए उपयोग करता हूं।

"आगे के संशोधन" में अंतर देखने के लिए master, मैं "संशोधनों के पीछे" को बाहर कर सकता हूं origin/master:

git diff master..origin/master^

"संशोधन के पीछे" में अंतर देखने के लिए origin/master, मैं "आगे के संशोधन" को बाहर कर सकता हूं master:

git diff origin/master..master^^

यदि आगे या पीछे 5 संशोधन हो तो इस तरह लिखना आसान हो सकता है:

git diff master..origin/master~5
git diff origin/master..master~5

अपडेट करें

संशोधनों को आगे / पीछे देखने के लिए, शाखा को किसी अन्य शाखा को ट्रैक करने के लिए कॉन्फ़िगर किया जाना चाहिए। मेरे लिए यह डिफ़ॉल्ट व्यवहार है जब मैं एक दूरस्थ रिपॉजिटरी को क्लोन करता हूं, और उसके बाद मैं एक शाखा को धक्का देता हूं git push -u remotename branchname। मेरा संस्करण 1.8.4.3 है, लेकिन जब तक मुझे याद है यह इस तरह काम कर रहा है।

संस्करण 1.8 के अनुसार, आप ट्रैकिंग शाखा को इस तरह सेट कर सकते हैं:

git branch --track test-branch

संस्करण 1.7 के अनुसार, वाक्यविन्यास अलग था:

git branch --set-upstream test-branch

आप किस संस्करण का gitउपयोग कर रहे हैं? मैं उस चीज़ को पुन: पेश नहीं कर सकता, जो आपको या तो मिलती है git statusऔर न ही git status -sb। अगर मैं या तो कमांड करने की कोशिश करता हूं (करने के बाद git fetch) मुझे आगे / पीछे किसी भी तरह की जानकारी नहीं मिलती है।
गैब्रिएल

8
प्रतिबद्ध आगे और पीछे देखने के लिए अपने तरीके से करने के लिए लागू किया जाता है masterऔर origin/masterऔर मैं के लिए उन डिफ देखना चाहते हैं masterऔर एक अन्य शाखा test-branch। क्या आप इस मुद्दे पर अपने जवाब को सुधार सकते हैं?
गेब्रियल

"पीछे" और "आगे" संशोधन में अंतर केवल मेरे लिए काम करता है अगर मैं शाखा नामों (2 नहीं) के बीच 3 डॉट्स का उपयोग करता हूं। और ^ और ^ ^ को यहां कोई बात नहीं लगती थी जैसे: git diff master ... मूल / मास्टर git अलग मूल / मास्टर ... मास्टर Anyways, "git स्टेटस -sb" बहुत मददगार था।
विट्टुएल

10

Git 2.5+ के साथ, अब आपके पास सभी शाखाओं के आगे / पीछे देखने के लिए एक और विकल्प है जिसे एक शाखा में धकेलने के लिए कॉन्फ़िगर किया गया है।

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

"पर अधिक देखें देखने Unpushed Git करता है "


क्या आप इसे केवल वर्तमान शाखा और इसकी दूरस्थ ट्रैकिंग शाखा के लिए कर सकते हैं?
spax

@spex हाँ: refs/headsवर्तमान शाखा के नाम के साथ पूरा ( stackoverflow.com/a/12142066/6309 ):refs/heads/$(git rev-parse --abbrev-ref HEAD)
VONC

3

आप awkइसे थोड़ा छोटा बनाने के लिए भी उपयोग कर सकते हैं :

git rev-list --left-right --count  origin/develop...feature-branch | awk '{print "Behind "$1" - Ahead "$2""}'

आप एक उपनाम भी बना सकते हैं जो हमेशा पहले मूल रूप से प्राप्त करता है और फिर शाखाओं की तुलना करता है

commit-diff = !"git fetch &> /dev/null && git rev-list --left-right --count"

1

गिट लाने के बाद, आप यह दिखाने के लिए गिट स्थिति चला सकते हैं कि शाखा के दूरस्थ संस्करण के आगे या पीछे स्थानीय शाखा कितनी है।

यह आपको यह नहीं दिखाएगा कि यह एक अलग शाखा के आगे या पीछे कितने हैं। आपके विकल्प पूर्ण भिन्न हैं, github को देख रहे हैं, या ऊपर दिए गए विम्हसा जैसे समाधान का उपयोग कर रहे हैं: रेपो के ऊपर स्थिति

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.