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) मैनपेज देखें जो बताता है .. सिंटैक्स –