2011-08-19 13 views
172

Git का उपयोग में किए गए प्रतिबद्ध करने के लिए मैं इसक्या के साथ एक अलग सिर

git clone 
git checkout {a rev number tree rev before} (here i started to be in a detached head state) 
//hacking 
git commit 
//hacking 
git commit 
(some commit where made on origin/master) 
git pull (wich does complete because there was some error due to the fact that i'm no more on master) 

तरह somthing बनाया क्योंकि Git मुझ से कहा कि मैं अभी भी प्रतिबद्ध सकता है जब एक अलग सिर राज्य में, मैं वैसा ही किया। लेकिन अब मैं अपनी अलग-अलग मुख्य शाखा को अपनी स्थानीय मास्टर शाखा में विलय करना चाहता हूं, और उसके बाद मेरे परिवर्तन मूल/मास्टर पर धक्का देना चाहता हूं।

तो मेरे सवाल का कैसे मैं (अलग सिर) मेरी वास्तविक राज्य के साथ मास्टर शाखा मर्ज कर सकते है

+0

के संभावित डुप्लिकेट [Git: सिर गायब हो गया है, गुरु में मर्ज करना चाहते हैं] (http://stackoverflow.com/questions/2519031/git-head-has-disappeared-want-to-merge- यह-इन-मास्टर) –

+0

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

+0

इस समय दुर्भाग्यपूर्ण मैं नहीं कर सकता लेकिन यदि आप प्रदान कर सकते हैं, तो मुझे इसे यहां देखकर खुशी होगी। यहां तक ​​कि यदि यह एक ड्रॉ होना चाहिए, तो यह इसे स्पष्ट कर देगा – benzen

उत्तर

281

एक शाखा है जहाँ आप कर रहे हैं, तो गुरु और यह विलय करने के लिए स्विच बनाएँ:

git branch my-temporary-work 
git checkout master 
git merge my-temporary-work 
+4

कोई भविष्य में सिर को अलग करने से कैसे बचता है? – ycomp

+0

मैंने ऐसा किया और खुद को 5 कामों से उत्पत्ति से आगे पाया। उस मामले में क्या आप सिर्फ गिट पुश मूल करते हैं? – Winnemucca

+0

@stevek यह चाल करना चाहिए। – juil

12

आप बस git merge <commit-number> या git cherry-pick <commit> <commit> ...

कर सकते हैं रयान स्टीवर्ट ने सुझाव दिया के रूप में आप भी वर्तमान प्रधान से एक शाखा बना सकते हैं:

git branch brand-name 

या सिर्फ एक टैग:

git tag tag-name 
+0

आप अलग-अलग सिर पर 'गीट रेव-पार्स HEAD' – KOGI

55

आप कुछ इस तरह कर सकता है।

# Create temporary branch for your detached head 
git branch tmp 

# Go to master 
git checkout master 

# Merge in commits from previously detached head 
git merge tmp 

# Delete temproary branch 
git branch -d tmp 

भी सरल

git checkout master 
git merge [email protected]{1} 

होगा, लेकिन यह थोड़ा खतरा यह है कि अगर आप एक गलती करते करते यह अलग सिर पर किए गए प्रतिबद्ध ठीक करने के लिए एक छोटे से कठिन हो सकता है।

+1

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

+7

यदि आप 'गिट मर्ज हेड @ {1}' कमांड का उपयोग करने का निर्णय लेते हैं, तो आपको शायद यह सुनिश्चित करना चाहिए कि आप 'गीट रीफ्लॉग' –

+2

का उपयोग करके उपयोग करना चाहते हैं, हेड @ {1} को मर्ज करने में सक्षम होने के कारण से मैं अपने जीवन को बचाता हूं। पहले ही मास्टर को पहले से ही जांच चुके थे। – juil

1

मैंने एक लेख भी स्थापित किया है जहां यह समझाया गया है कि प्रक्रिया कैसे करें। मैं इसे जोड़ता हूं क्योंकि यह प्रस्तावित किए गए प्रस्ताव से थोड़ा अलग है। लेकिन मुझे लगता है कि सभी प्रस्ताव मान्य

http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html

बाद में मैं अच्छा एक

+0

यदि आपका स्वयं का उत्तर सबसे उपयोगी था तो आपको अपना उत्तर स्वीकार करना चाहिए। –

+0

मैं समझता हूं, लेकिन मुझे लगता है कि मैंने जो प्रतिक्रिया स्वीकार की है वह अधिक आसान है, या कम से कम कम त्रुटि-प्रवण बीकॉज़ की वजह से प्रतिबद्ध संख्या का उपयोग करने की आवश्यकता नहीं है – benzen

7

इस रूप में पहली जवाब को स्वीकार करेंगे कर रहे हैं मैं क्या किया है:

असल में, detached HEAD के रूप में के बारे में सोच नाम के बिना एक नई शाखा। आप किसी भी अन्य शाखा की तरह इस शाखा में प्रतिबद्ध हो सकते हैं। एक बार ऐसा करने के बाद, आप इसे रिमोट पर धक्का देना चाहते हैं।

तो सबसे पहले आपको यह करने की आवश्यकता है यह detached HEAD एक नाम दें। आप आसानी से इसे पसंद कर सकते हैं, जबकि इस detached HEAD पर किया जा रहा है:

git checkout -b some-new-name 

अब आप इसे दूरदराज के किसी भी अन्य शाखा की तरह करने के लिए धक्का कर सकते हैं।

मेरे मामले में, मैं detached HEAD (अब some-new-branch) में किए गए कामों के साथ-साथ इस शाखा को तेजी से आगे बढ़ाना चाहता था।सभी मैंने किया

git checkout master 

git pull # To make sure my local copy of master is up to date

git checkout some-new-branch 

git merge master // This added current state of master to my changes

बेशक

था, मैं इसे बाद master को विलय कर दिया।

यह इसके बारे में है।

0

शायद सबसे अच्छा समाधान नहीं है, (इतिहास को फिर से लिख देगा) लेकिन आप git reset --hard <hash of detached head commit> भी कर सकते हैं।

2

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

git branch temp 
git checkout master 
git merge temp 
संबंधित मुद्दे