जवाबों:
HEAD
वर्तमान प्रतिबद्ध के लिए (प्रत्यक्ष या अप्रत्यक्ष, यानी प्रतीकात्मक) संदर्भ है। यह एक ऐसा कमिटमेंट है जिसे आपने वर्किंग डायरेक्टरी में चेक किया है (जब तक कि आपने कुछ बदलाव नहीं किए हैं, या इसके बराबर नहीं हैं), और यह एक ऐसा कमेंट है जिसके ऊपर "git कमिट" एक नया बना देगा। आमतौर पर HEAD
किसी अन्य नामित शाखा का प्रतीकात्मक संदर्भ होता है; इस शाखा की वर्तमान में शाखा, या वर्तमान शाखा है।HEAD
सीधे तौर पर एक कमिट की ओर भी इशारा कर सकता है; इस स्थिति को "अलग किया गया हेड" कहा जाता है, और इसे अनाम, अनाम शाखा के रूप में समझा जा सकता है।
और @
अकेले के लिए एक शॉर्टकट है HEAD
, Git 1.8.5 के बाद से
ORIG_HEAD
की पिछली स्थिति है HEAD
, जो संभवत: खतरनाक व्यवहार वाले आदेशों द्वारा निर्धारित की गई है, उन्हें वापस करना आसान है। यह अब कम उपयोगी नहीं है कि गिट ने रिफ्लॉग किया है: HEAD@{1}
लगभग बराबर है ORIG_HEAD
( HEAD@{1}
यह हमेशा के अंतिम मूल्य है HEAD
, खतरनाक ऑपरेशन ORIG_HEAD
से HEAD
पहले अंतिम मूल्य है )।
अधिक जानकारी के लिए git (1) manpage , Git User's Manual , Git Community Book और Git Glossary पढ़ें
HEAD
और ORIG_HEAD
)।
से Git रीसेट
"पुल" या "मर्ज" हमेशा वर्तमान शाखा के मूल टिप को अंदर छोड़ता है
ORIG_HEAD
।
git reset --hard ORIG_HEAD
इसे कड़ी मेहनत से रीसेट करने से आपकी अनुक्रमणिका फ़ाइल और काम करने वाला पेड़ वापस उसी अवस्था में आ जाता है, और शाखा की नोक को उस कमिट में रीसेट कर देता है।
git reset --merge ORIG_HEAD
मर्ज के परिणाम का निरीक्षण करने के बाद, आप पा सकते हैं कि दूसरी शाखा में परिवर्तन असंतोषजनक है। रनिंग "
git reset --hard ORIG_HEAD
" आपको वापस वहीं जाने देगा जहां आप थे, लेकिन यह आपके स्थानीय परिवर्तनों को छोड़ देगा, जो आप नहीं चाहते हैं। "git reset --merge
" आपके स्थानीय परिवर्तन रखता है।
किसी भी पैच को लागू करने से पहले, ORIG_HEAD को वर्तमान शाखा के सिरे पर सेट किया जाता है।
यदि आपgit am
गलत तरीके से शाखा पर ' ' चल रहे हैं या कमिट में कोई त्रुटि है जो मेलबॉक्स को परिवर्तित करके अधिक आसानी से तय की जाती है (जैसे "से:" पंक्तियों में)।इसके अलावा, मर्ज हमेशा
.git/ORIG_HEAD
HEAD की मूल स्थिति में ' ' सेट करता है इसलिए 'git reset ORIG_HEAD
' का उपयोग करके एक समस्याग्रस्त मर्ज को हटाया जा सकता है ।
नोट: यहाँ से
HEAD एक मूविंग पॉइंटर है। कभी-कभी इसका मतलब वर्तमान शाखा होता है, कभी-कभी यह नहीं होता है।
तो HEAD पहले से ही हर जगह "वर्तमान शाखा" का पर्याय नहीं है।
HEAD का अर्थ होता है " git " हर जगह git में, लेकिन इसका मतलब जरूरी नहीं है कि "current branch" (यानी अलग किया गया HEAD)।
लेकिन यह लगभग हमेशा "वर्तमान प्रतिबद्ध" का मतलब है।
यह "git commit
" के शीर्ष पर बनाता है, और "git diff --cached
" और "git status
" के खिलाफ तुलना करता है।
इसका अर्थ है कि वर्तमान शाखा का अर्थ केवल बहुत सीमित संदर्भों में है (ठीक उसी समय जब हम एक शाखा का नाम संचालित करना चाहते हैं --- कमिट / रिबेस / आदि के माध्यम से शाखा टिप को रीसेट करना और बढ़ाना।)।Reflog समय में वापस जाने के लिए एक वाहन है और समय मशीनों में "वर्तमान" की धारणा के साथ दिलचस्प बातचीत होती है।
HEAD@{5.minutes.ago}
इसका मतलब हो सकता है "घबराहट HEAD सहानुभूति यह जानने के लिए कि हम अभी किस शाखा में हैं, और फिर पता करें कि उस शाखा का सिरा 5 मिनट पहले कहां था"।
वैकल्पिक रूप से इसका मतलब यह हो सकता है "5 मिनट पहले के रूप में मुझे उल्लिखित किया गया प्रतिबद्ध क्या होता है, उदाहरण के लिए अगर मैंने" वापस "जीआईटी शो" किया था "।
git1.8.4 (जुलाई 2013) द्वारा प्रस्तुत एक नई अधिसूचना शुरू की !
(वास्तव में, यह 1.8.5 या 1.9, Q4 2013 के लिए होगा: प्रतिबद्ध 9ba89f4 के साथ पुन: प्रस्तुत किया गया )
चार बड़े अक्षरों "
HEAD
" को टाइप करने के बजाय , आप कह सकते हैं "@
" अब,
उदाहरण के लिए "git log @
"।
देखें प्रतिबद्ध cdfd948
टाइपिंग '
HEAD
' थकाऊ है, खासकर जब हम@
इसके बजाय ' ' का उपयोग कर सकते हैं ।'
@
' को चुनने का कारण यह है कि यहref@op
सिंटैक्स (जैसेHEAD@{u}
) से स्वाभाविक रूप से अनुसरण करता है , सिवाय इसके कि हमारे पास कोई रेफरी और कोई ऑपरेशन नहीं है, और जब हमारे पास नहीं है, तो यह 'HEAD
' मानने के लिए समझ में आता है ।तो अब हम '
git show @~1
' का उपयोग कर सकते हैं , और यह सब अच्छाई है।अब तक '
@
' एक मान्य नाम था, लेकिन यह इस विचार से टकराता है, तो चलिए इसे अमान्य बना देते हैं। शायद बहुत कम लोगों ने, यदि कोई हो, तो इस नाम का इस्तेमाल किया।
1.8.4-आरसी 3 अवधि (14, अगस्त 2013) के दौरान एक ब्लॉग पोस्ट ने घोषणा की कि यह सुविधा वापस ले ली गई और देरी हुई ( हेड-अप के लिए धन्यवाद कपकेक )।
दोबारा, इसे फिर से 9ba89f4 (सितंबर 2013) के साथ पेश किया गया है ।
देखें 2c2b664 प्रतिबद्ध :
@
शॉर्टकट जोड़ें HEAD
"यह श्रद्धा cdfd948 के लिए प्रतिबद्ध है , क्योंकि यह सिर्फ "
@
" पर लागू नहीं होता है (और@{u}
इसे लागू किए गए जैसे संशोधक के साथ रूपों ), लेकिन यह भी जैसे "refs/heads/@/foo
" को प्रभावित करता है , जो इसे नहीं करना चाहिए।शॉर्ट-हैंड देने का मूल विचार अच्छा हो सकता है, और इस विषय को बाद में वापस लिया जा सकता है, लेकिन आगामी रिलीज के लिए मौजूदा उपयोग के मामलों को प्रभावित करने से बचने के लिए इसे वापस कर देना चाहिए।
git reset
उत्पन्न करेगा ORIG_HEAD
। तो आपको rm
इसे मैन्युअल रूप से करने की आवश्यकता है । उदाहरण के लिए stackoverflow.com/a/12418078/6309 देखें ।
@
उपनाम (अस्थायी रूप से?) Git 1.8.4 रिलीज के लिए वापस कियाHEAD
जा रहा है ! आज ही घोषित किया गया था!
मेरी समझ यह है कि HEAD वर्तमान शाखा को इंगित करता है, जबकि ORIG_HEAD का उपयोग "खतरनाक" संचालन करने से पहले पिछले HEAD को संग्रहीत करने के लिए किया जाता है।
उदाहरण के लिए git-rebase और git-am किसी भी परिवर्तन को लागू करने से पहले शाखा की मूल टिप रिकॉर्ड करते हैं।
git branch foo -b
उस अनाथ के लिए एक शाखा "बनाने" के लिए करते हैं।
से man 7 gitrevisions
:
HEAD उस कमेटी का नाम देता है, जिसके आधार पर आपने वर्किंग ट्री में बदलाव किए हैं। FETCH_HEAD उस शाखा को रिकॉर्ड करता है जिसे आपने अपने अंतिम git लाने के लिए दूरस्थ रिपॉजिटरी से मंगवाया था। ORIG_HEAD उन कमांड द्वारा बनाया जाता है जो आपके HEAD को बड़े पैमाने पर स्थानांतरित करते हैं, उनके ऑपरेशन से पहले HEAD की स्थिति को रिकॉर्ड करने के लिए, ताकि आप शाखा के सिरे को आसानी से राज्य में वापस ला सकें, इससे पहले कि आप उन्हें चलाएं। MERGE_HEAD कमिट (s) रिकॉर्ड करता है जिसे आप अपनी शाखा में मर्ज कर रहे हैं जब आप git मर्ज चलाते हैं। CHERRY_PICK_HEAD वह कमिट रिकॉर्ड करता है जिसे आप चेरी-पिक चलाने पर चेरी-पिकिंग करते हैं।
HEAD
अब (आगामी git1.8.4) '@
' है! देखें नीचे मेरी संपादित जवाब