2009-05-12 19 views
31
git log origin/master 
git log origin/master.. 

उपरोक्त के साथ सटीक अंतर क्या है? मैं समझने की कोशिश कर रहा हूं कि वास्तव में .. नोटेशन क्या करता है। मैंने सोचा कि यह एक सीमा थी, लेकिन इस मामले में यह कुछ अलग करता है।'गिट लॉग मूल/मास्टर' बनाम 'गिट लॉग मूल/मास्टर' के बीच अंतर ..

उत्तर

4

मैं इसे एक सीमा है लगता है। ".." आदेश इस मूल/मास्टर के बीच करता दिखाएगा पिछले प्रतिबद्ध और जो कुछ भी है पिछले शाखा आप पर काम कर रहे पर करते हैं।

तुम भी शाखा आप .. के बाद इसके सामने की तुलना करना चाहते निर्दिष्ट कर सकते हैं, तो यह हो जाएगा

git log origin/master..<branch_name> 

तुम भी उत्पादन फिल्टर करने के लिए, उदाहरण के लिए प्रतिबद्ध पहचानकर्ता का उपयोग कर सकते हैं:

git log 663f4c..fec6b 

प्रयास करें git help log अन्य विकल्प देखने के लिए :-)

46

git log (और अन्य सभी Git आदेशों कि एक समान तर्क सेट लेने के लिए) के साथ, यह संशोधनों की एक श्रृंखला को कैसे ढूंढें, इसका एक विनिर्देश है। याद रखें Git के सामान्य दुनिया में, इसका मतलब है कि संशोधन ग्राफ में से कुछ subgraph --- ज्यादातर लोगों के लिए, यह आम तौर पर एक सूची में संशोधन का सिर्फ एक सीमा का मतलब है। (और अगर आप कोई शाखा नहीं करते हैं तो यह बहुत कुछ नहीं करता है, यह गिट में भी इसे सरल बनाता है)।

संशोधन विनिर्देश में सकारात्मक संदर्भ (प्रारंभ बिंदु) और नकारात्मक संदर्भ (रोक बिंदु) और अतिरिक्त फ़िल्टर (संशोधन की सीमा संख्या, grep प्रतिबद्ध पाठ इत्यादि) का एक सेट शामिल है। गिट सकारात्मक संदर्भों से शुरू होता है और संशोधन इतिहास के माध्यम से वापस जाता है, जब इसे नकारात्मक संदर्भों से पहुंचने वाले संशोधनों का सामना करना पड़ता है (जरूरी नहीं कि जब यह नकारात्मक संदर्भों में से एक तक पहुंच जाए)।

शायद यह भ्रमित है कि कई शॉर्टंड नोटेशन विकसित हुए हैं, जिसका उद्देश्य यह सब आसान बनाना है और फिर भी किसी भी तरह से भ्रमित करने का प्रबंधन करना- मुझे बस कुछ समय व्यतीत करना पड़ा कि "मास्टर .. रखरखाव "," रखरखाव..मास्टर ", आदि का मतलब था और किस का उपयोग करना है।

जब आप सिर्फ कहते हैं कि "मूल/मास्टर", तो इसका मतलब है कि "मूल/मास्टर" एक सकारात्मक संदर्भ है और कोई नकारात्मक संदर्भ हैं। तो Git मूल/मास्टर पर शुरू होता है और के माध्यम से वापस चलता है सभी संशोधन available-- आप मूल/मास्टर का पूरा इतिहास मिलता है।

"मूल/मास्टर .." "मूल/master..HEAD" जो एक तरह से इसका मतलब है की तरह "सिर अप करने के लिए मूल/गुरु से" लग रहा है के लिए आशुलिपि है। यह प्रभावी ढंग से कौन सा करता है। इसे "हेड^मूल/मास्टर" या "हेड - नॉट मूल/मास्टर" के रूप में पुनः लिखा जा सकता है। इस मामले में, HEAD एक सकारात्मक संदर्भ है और "मूल/मास्टर" एक नकारात्मक संदर्भ है। तो गिट हेड पर शुरू होता है और ग्राफ के माध्यम से वापस चला जाता है जब तक कि यह एक संशोधन का सामना न करे जो मूल/मास्टर से पहुंच योग्य हो। यह संभावना है कि वास्तव में यह मूल/मास्टर का सामना करेगा। ध्यान दें कि सभी संदर्भ समावेशी हैं - सकारात्मक संदर्भ स्वयं आउटपुट हैं और नकारात्मक संदर्भ नहीं हैं (जब तक आप - बाउंडरी नहीं देते हैं, और फिर उन्हें फ़्लैग किया जाता है)। इसका मतलब है कि "मूल/मास्टर..हेड" कुछ भी आउटपुट नहीं करता है अगर हेड और मूल/मास्टर एक ही संशोधन हैं।

तो अगर आप नदी के ऊपर संस्करण आप इस स्थिति इस तरह की है की चोटी पर स्थानीय प्रतिबद्ध के एक जोड़े बना दिया है:

[email protected]:~/src/git <master>$ git log --pretty=oneline --abbrev-commit --decorate -n 4 
ea3107d (refs/heads/master) Add another dummy comment 
869c260 Add dummy comment 
6345d7a (refs/remotes/origin/master, refs/remotes/origin/HEAD) Merge branch 'maint' 
be427d7 allow -t abbreviation for --track in git branch 

और अब "Git लॉग मूल/मास्टर .." का अर्थ है Git पर शुरू कर देंगे HEAD (ea3107d), जो मूल/मास्टर से पहुंच योग्य नहीं है, इसलिए यह प्रिंट करता है।फिर यह हेड के माता-पिता (869 सी 260) पर वापस चला जाता है, जो अभी भी नहीं है, इसलिए प्रिंट करता है। फिर अगला माता-पिता 6345d7a है, जो मूल/मास्टर है, इसलिए यह बंद हो जाता है।

ध्यान दें कि "गिट लॉग ..origin/master" विपरीत है - मूल/मास्टर से HEAD तक वापस जाने का प्रयास करता है। इस मामले में, यह कुछ भी प्रिंट नहीं करेगा। लेकिन अगर मैंने "उत्पत्ति/रखरखाव" की जांच की है, तो यह मूल/मास्टर पर संशोधनों को मुद्रित करेगा जो मूल/रखरखाव पर नहीं थे: इसलिए सामान्य रूप से, "ए..बी" के बारे में सोचने की कोशिश करें "बी में संशोधन जो नहीं हैं ए में ", और याद रखें कि ए या बी को छोड़कर" हेड "का अर्थ है।

बस अतिरिक्त सुपर डुप्कर भ्रम के लिए, एक टिप्पणी "ए ... बी" भी है। तो डॉट्स की संख्या गिनना याद रखें! ए और बी के संशोधन के मामले में होने के मामले में, कोई वास्तविक अंतर नहीं है। लेकिन "ए ... बी" का मतलब ए या बी में संशोधन है जो ए और बी के किसी भी विलय अड्डों में नहीं हैं, इसलिए यदि ए और बी अलग-अलग शाखाओं पर हैं, तो यह सभी कामों को दिखाता है क्योंकि वे अलग हो गए।

एक संशोधन सीमा ("बी - नॉट ए") के लिए "लंबा फॉर्म" आपको "स्थानीय शाखाओं पर सभी संशोधन जो किसी भी दूरस्थ ट्रैकिंग शाखा पर नहीं हैं" ("--ब्रैंच - -नोट --remotes ")। इस तर्क सूची को गिट सहित कई गिट कमांड ("गिट रेव-लिस्ट" कोर एक) द्वारा पार्स किया गया है। तो आप अपने स्थानीय परिवर्तनों को ग्राफिकल रूप से देखने के लिए "gitk --branches --not --remotes" कर सकते हैं।

और आखिरकार मेगा-बोनस भ्रम के लिए, "गिट डिफ" जैसे आदेश शॉर्टैंड सिंटैक्स के समान प्रकार को स्वीकार करते हैं, लेकिन इसका मतलब यह नहीं है (काफी) एक ही चीज़ है। git diff वास्तव में दो संशोधन लेता है और उनकी तुलना करता है, जो एक सीमा के समान नहीं है - याद रखें कि गिट में एक संशोधन सीमा एक उप-अनुच्छेद है, केवल एक सूची नहीं। "गिट diff ए..बी" "गिट diff ए बी" के बराबर है। "गिट diff ए ... बी" का मतलब है "बी से परिवर्तन दिखाएं क्योंकि यह ए से अलग हो गया है"। भ्रामक? बस थोड़ा सा: उदाहरण के लिए, "गिट लॉग ए ... बी" और "गिट लॉग बी ... ए" का मतलब एक ही बात है, लेकिन "गिट diff ए ... बी" और "गिट diff बी ... ए "मत करो।

+1

गिट-रेव-लिस्ट (1) मैनपेज देखें जो बताता है .. सिंटैक्स –

20
git log origin/master 

(नकली आदेश) की तरह होगा:

git log INITIAL..origin/master 

जबकि:

git log origin/master.. 

है:

git log origin/master..HEAD 
+0

यदि आप त्वरित उत्तर की तलाश में हैं तो यह अच्छा, छोटा और प्यारा जवाब है, हालांकि स्पष्ट रूप से अराक्निड का जवाब कहीं अधिक मजबूत और स्पष्टीकरणपूर्ण है! – patrickvacek

+0

मुझे नहीं पता कि अराकनिड का क्या जवाब प्रदान करता है। मेरा सवाल पूछा गया सवाल। – FelipeC

+0

आपका उत्तर प्रश्न का उत्तर देता है, इसलिए मैंने इसे ऊपर उठाया। मैंने अराक्निड के जवाब को भी उखाड़ फेंक दिया, क्योंकि यह सवाल का जवाब भी देता है, लेकिन एक और पूर्ण फैशन में। मैं आपके उत्तर की सादगी की सराहना करता हूं, लेकिन दूसरा आदेशों को अधिक विस्तार से बताता है, जो भी अच्छा है। – patrickvacek

1

मेरा अपना स्मरक अर्थ विज्ञान याद करने के लिए जिस तरह से ..

मैं तिथि सीमा के संदर्भ में 'Git लॉग start..end' के बारे में सोच जहां शुरूइतिहास के पुराने हिस्सा है, और अधिक हाल के इतिहास के लिए अंत प्रतिनिधित्व करता है। हालांकि, तिथि सीमा के विपरीत, प्रतिबद्ध रेंज एक रेखीय walkback नहीं है और वास्तविक समय से कोई संबंध नहीं है, बल्कि एक सेट घटाव, अर्थात्:

(commits reachable from "end") - (commits reachable from "start") 

याद रखें कि शुरू (बाहर रखा जाना) में एक प्रतिबद्ध रेंज एक या अधिक प्रतिबद्धताओं के सेट का प्रतिनिधित्व करती है, न कि एक एकल प्रतिबद्धता।

प्रभावी रूप से, यह 'स्टार्ट' (अनन्य) और 'अंत' (समावेशी) के बीच बनाए गए सभी कामों को संदर्भित करता है।

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