2009-05-11 6 views
21

एक आम बात जो मैं करना चाहता हूं वह मेरी कार्य प्रतिलिपि को किसी विशेष संशोधन में वापस लाती है, कुछ परीक्षण करें, और फिर इसे मेरे वर्तमान मास्टर के सिर पर वापस लाएं। अतीत में मैंने अपने सिर को खोने के लिए केवल "गिट चेकआउट हैश" किया है। मैंने तब से सीखा है कि मैं एक शाखा बना सकता हूं और इसे देख सकता हूं, वापस स्विच कर सकता हूं और शाखा को हटा सकता हूं, लेकिन यह एक साधारण जांच के लिए बहुत से कदमों की तरह लगता है। एसवीएन पार्लान्स में, क्या जल्दी से वापस करने का एक तरीका है और फिर गिट में ट्रंक की नोक पर वापस जाएं?क्या आपको एक विशिष्ट गिट संशोधन देखने के लिए शाखा बनाने की आवश्यकता है?

संपादित करें: मैं अपने भ्रम तथ्य यह है कि जब मैं एक हैश और फिर Git लॉग चेकआउट, मैं परिवर्तन है कि बाद की जाँच की हैश हुआ (नहीं दिख रहा है की वजह से उपजी लगता है जो उचित है, जब आप के बारे में सोच यह)। लेकिन स्वीकृत उत्तर सही है; "गिट चेकआउट शाखा" सिर को पिछली शाखा में बहाल कर देगी।

+0

आप "मेरे सिर खो" स्पष्ट सकते हैं? ऐसा लगता है कि कुछ भी नहीं खो गया है। – Wok

उत्तर

27

मान लिया जाये कि आप पहले से ही एक शाखा पर कर रहे हैं (जो आप हमेशा परिवर्तन आप रखना चाहते हैं के लिए होना चाहिए), तो आप सिर्फ

git checkout <revision to check out> 

क्या कर सकते हैं इस विषय को शाखा आप में काम कर रहे थे बंद ले जाएगा (कोई शाखा नहीं), जिसमें कामकाजी प्रति सामान्य रूप से शाखा नाम की बजाय एक प्रतिबद्ध आईडी को संदर्भित करती है।

फिर वापस ले जाने के लिए, बस:

git checkout <old branch name> 

इसके बारे में सोचने के लिए एक उपयोगी तरीका यह है: Git चेकआउट शाखाओं कभी नहीं बदल; यह केवल वही बदलता है जो आपकी कार्यशील प्रतिलिपि वर्तमान में देख रही है (यानी, HEAD), जो या तो शाखा हो सकती है (जिस स्थिति में शाखाएं अपडेट होंगी) या एक यादृच्छिक प्रतिबद्ध हैश।

इस तरह, जब तक आप जो परिवर्तन करना चाहते हैं, वह शाखा पर हैं, तो आपको उन्हें खोने वाले गिट चेकआउट के बारे में चिंता करने की ज़रूरत नहीं है।

+0

+1 एक यादृच्छिक प्रतिबद्धता हैश –

+0

पर इंगित करता है क्या आप 'शाखा' में 'मास्टर' शामिल करते हैं? – Wok

+1

@wok: हां। मास्टर के बारे में कुछ खास नहीं है। – bdonlan

3

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

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

+0

"शो" द्वारा "परिवर्तनों की कुछ पंक्तियों की नोक दिखाएं" में आपका क्या मतलब है? अगर मैं (आईएमओ) प्राकृतिक चीज और "चेकआउट हैश" करता हूं तो मुझे लगता है कि जहां मैं था, वहां वापस जाने का कोई रास्ता नहीं है (किसी भी तरह) जहां मैं थाश को जान रहा था। – Nick

+0

गिट द्वारा परिवर्तनों की कुछ पंक्ति दिखाते हुए, मेरा मतलब है कि आप इसे "गिट शाखा", "गिट टैग" या "गिटक --all" जैसे कमांड के साथ देख सकते हैं। क्या आपका मतलब है "हैश को जानना जहां मैं था" कि आप एक शाखा के बाहर काम कर रहे थे? आपको हेश को नहीं पता होना चाहिए कि आप कहाँ थे - आपको उस शाखा को जानना है जहां आप थे। –

4

हां, आप वर्णन करते हुए "गिट चेकआउट" के साथ किसी भी मनमानी संशोधन पर जा सकते हैं। यदि आप किसी शाखा के बजाय मनमाने ढंग से संशोधन की मांग करते हैं, तो गिट के पास आपके द्वारा किए गए परिवर्तनों का ट्रैक रखने का कोई स्पष्ट तरीका नहीं होगा। आप देख सकते हैं कि रीफ्लॉग ("गिट रीफ्लॉग शो") से परामर्श करके आप पहले कहां थे, लेकिन आम तौर पर, आप शायद "गिट चेकआउट मास्टर" या इसी तरह के साथ उस पर वापस बदलना चाहते हैं, तो आप एक शाखा में रहे होंगे।

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

मुझे लगता है कि हाल के गिट संस्करणों ने "जहां मैं पिछली बार चली गई थी" के लिए शॉर्टेंड "@ {- 1}" पेश किया है, जो वास्तव में आप इस मामले में जो चाहते हैं वह हो सकता है। (मैंने इसका उपयोग नहीं किया है, बस रिलीज नोट्स में इसके बारे में पढ़ें)।

+1

"यदि आप किसी शाखा के बजाय मनमाने ढंग से संशोधन की मांग करते हैं, तो आप निश्चित रूप से कोई भी परिवर्तन करने में सक्षम नहीं होंगे।" - आप * प्रतिबद्ध * कर सकते हैं। यह सिर्फ इतना है कि आप "(कोई शाखा नहीं)" पर काम करेंगे (जैसा कि "गिट शाखा" द्वारा दिखाया गया है), इसलिए दूसरी शाखा की जांच करने के बाद प्रतिबद्धता खोजना कठिन होगा, जब तक कि आप प्रतिबद्ध की हैश लिखते हैं या इसे खोदते हैं लॉग। –

+0

हां, अच्छा बिंदु; मैं मानता हूं, मैंने पहले कोशिश नहीं की थी। – araqnid

+0

यदि आप गिट एक्सटेंशन का उपयोग कर रहे हैं, तो यह आपको पूछेगा कि क्या आप चेकआउट करना चाहते हैं या शाखा बनाते हैं यदि आप शाखा में नहीं हैं, जो अच्छा है। लेकिन गिट एक्सटेंशन मेरे जैसे नए लोगों के लिए खतरनाक हो सकता है क्योंकि मुझे अब संशोधन बनाम शाखा की जांच करने का महत्व मिल रहा है। काम करने की प्रतियों की व्याख्या के लिए – Chance

6

आप विशिष्ट में एक शाखा बना सकते हैं प्रतिबद्ध आप (मैनुअल पेज से) चेकआउट करने

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>] 

तो SHA1 के रूप में <start-point> में भरने चाहते हैं क्या आप नई शाखा <branchname> पर शुरू करना चाहते हैं और आपको विस्तारित शाखा से अलग 'सिर' नहीं मिलेगा।

वहाँ अन्य बातों के आप शायद क्या करना चाहते हैं राज्य इच्छा में अपना काम कर रहा फ़ाइलों में से कुछ रखने के लिए किया जाएगा ....

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