यदि आपने प्रकाशित किया है तो आप सही हैं कि आप master
के इतिहास को फिर से लिखना नहीं चाहते हैं। आप जो चाहते हैं वह मास्टर को एक प्रतिबद्धता प्रकाशित करना है जो इसे वापस राज्य में लाता है कि यह वर्तमान इतिहास को बनाए रखते हुए D
पर था ताकि अन्य उपयोगकर्ता आसानी से अपने काम को मर्ज या रीबेज कर सकें।
आप भविष्य में कुछ बिंदु पर योजना बना रहे हैं तो क्या आप शायद भी master
और topic
के बीच एक नया आम आधार बनाने की है, ताकि जब आप बाद में topic
मर्ज करते हैं, आप डॉन 'क्या करना चाहते हैं master
में topic
विलय करने के लिए master
में वापस आने वाले कामों को खो दें। ऐसा करने का सबसे आसान तरीका 'पूर्ववत' प्रतिबद्धता के शीर्ष पर 'रेडो' प्रतिबद्धता है जो master
को अपने मूल स्थिति में रीसेट करता है और उस पर शीर्ष topic
शाखा का आधार बनाता है।
# checkout master branch (currently at G)
git checkout master
# Reset the index to how we want master to look like
git reset D
# Move the branch pointer back to where it should be, leaving the index
# looking like D
git reset --soft [email protected]{1}
# Make a commit (D') for the head of the master branch
git commit -m "Temporarily revert E, F and G"
# Create the new topic branch based on master.
# We're going to make it on top of master and the 'undo'
# commit to ensure that subsequent merges of master->topic
# or topic->master don't merge in the undo.
git checkout -b topic
# Revert the undo commit, making a redo commit (G').
git revert HEAD
एक विकल्प आपके द्वारा किए गए सकता है करता है ई ', एफ' और जी 'अलग से प्रत्येक भाग redoing लेकिन जैसा कि ई, एफ और जी अपने प्रकाशित इतिहास में पहले से ही कर रहे हैं यह शायद अधिक समझ में आता है अगर आप सिर्फ संदर्भ' पूर्ववत करें और कहें कि प्रतिबद्धता पूर्ववत की जा रही है। यह git revert
है, वैसे भी।
अनिवार्य रूप से जो आप जानते हैं वह यह है। करता
D -- E -- F -- G -- D' <-- master
\
\
G' <-- topic
महत्वपूर्ण बातें हैं कि आप इतिहास फिर से लिखा नहीं किया है और विषय मास्टर पर आधारित है तो मर्ज के गलती से किसी भी 'पूर्ववत करें' लागू नहीं होगा। अब आप master
और topic
दोनों को अपने रिमोट रिपोजिटरी में सुरक्षित रूप से पुश कर सकते हैं।
स्रोत
2009-10-06 18:12:16
धन्यवाद, यह वही है जो मैंने अभी किया था (जो मैंने जेफोमी को कुछ टिप्पणियों में भी सुझाया था)। इस पूर्ववत प्रतिबद्धता के कारण इतिहास अब थोड़ा बदसूरत है लेकिन मैं इसके बारे में कुछ भी नहीं कर सकता। – Albert
2 सप्ताह गिट उपयोगकर्ता यहाँ। पहली बार जी टू जी 'की शाखा बनाना आसान नहीं होगा, और फिर' गिट रिवर्ट 'जी से डी, जिसके परिणामस्वरूप डी'? इस तरह आपको कुछ भी पूर्ववत/दोबारा नहीं करना है, जो मुझे बहुत सुरक्षित लगता है। (मैं पहले से ही 'गिट रीसेट' के साथ गड़बड़ होने के कारण अप्राप्य रूप से खो गया संपादन कर चुका हूं।) – bart
@ बार्ट, 'गिट रीफ्लॉग' पर एक नज़र डालें। जिस सामग्री को कम किया गया है और बाद में खराब हो गया है, कम से कम कुछ दिनों के लिए, हमेशा रिफ्लॉग के माध्यम से पुनर्प्राप्त करने योग्य होना चाहिए। हालांकि आप कभी भी उन परिवर्तनों को खो सकते हैं जिन्हें आप कभी भी प्रतिबद्ध नहीं कर पाए। – dubiousjim