2011-06-26 17 views
61

मैं मास्टर पर हूँ लेने के लिए प्रतिबद्ध है और मैं rebase -i <my_branch>Git इंटरैक्टिव रिबेस कोई

इस समझे किया:

noop 

# Rebase c947bec..7e259d3 onto c947bec 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

मैं कुछ नहीं करता है सब के रूप में उनमें से कुछ का स्वागत नहीं कर रहे हैं लेने के लिए चाहते हैं। जब आप कुछ फाइलें रखना चाहते हैं या कुछ शाखाओं में हमेशा 'स्थानीय' बदलना चाहते हैं तो आप कैसे काम करते हैं? क्या .gitignore जैसे कुछ सहायक हैं?

उत्तर

58

गैर-इंटरैक्टिव रिबेस की तरह, आपको किसी विशेष प्रतिबद्धता पर पुनर्विचार करना होगा।

गैर-इंटरैक्टिव रिबेस के साथ, यदि आप वर्तमान प्रतिबद्धता का प्रत्यक्ष पूर्वज प्रदान करते हैं तो आप कुछ भी नहीं बदल रहे हैं; एक इंटरैक्टिव रिबेस के साथ आप उस प्रतिबद्धता के बाद प्रतिबद्धता संपादित कर सकते हैं, जिस पर आप पुन: प्रयास कर रहे हैं, भले ही प्रतिबद्धता आपके वर्तमान प्रतिबद्धता का प्रत्यक्ष पूर्वज है लेकिन आपको यह प्रतिबद्धता निर्दिष्ट करनी होगी कि आप आगे से संपादित करना चाहते हैं।

मैं अपनी स्थिति का ब्यौरा पता नहीं है, लेकिन आप कुछ इस तरह देख सकते हैं:

# Opportunity to edit or prune commits between origin/master and current branch 
git rebase -i origin/master 

या

# Edit some of the last ten commits 
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) ! 
20

rebase -i बिना प्रतिबद्ध सीमा के किसी भी काम को प्रदर्शित नहीं करेगा। कि इस इतिहास को फिर से लिखने होगा

git rebase -i HEAD~7 

हालांकि सावधान रहना,: पिछले rebase करने के लिए, 7 प्रतिबद्ध निम्नलिखित का प्रयोग करते हैं,। यह मत करो, अगर प्रतिबद्ध पहले से ही अपने दूसरे प्रश्न के लिए


धकेल दिया जाता है: आपके परिवर्तनों के साथ एक शाखा (मूल रूप से एक विन्यास शाखा) और नियमित रूप से है इसे में अन्य शाखाओं मर्ज करें। इस तरह परिवर्तन अन्य शाखाओं में नहीं जाएंगे

8

जब आप git rebase -i उपयोग कर रहे हैं, आप आमतौर पर निर्दिष्ट करने के लिए है, चूंकि आप प्रतिबद्धता करना चाहते हैं। तो, अगर, उदाहरण के लिए, आप वर्तमान शाखा में पिछले 10 के बीच में प्रतिबद्ध में से कुछ निकालना चाहते हैं, आप क्या करेंगे: दूसरों

git rebase -i HEAD~10 
4

के रूप में उल्लेख किया है, तो आप एक सीमा के लिए प्रतिबद्ध निर्दिष्ट करने के लिए की जरूरत है।

git rebase -i <latest-commit-to-be-retained> 

(यह मानते हुए कि आप एक ही शाखा पर हैं संपादित किया जा करने के लिए प्रतिबद्ध के रूप में) -

प्रतिबद्ध निर्दिष्ट करने के लिए, आप सिर ~ 5 shorthands का उपयोग करें या (शा चेकसम उपयोग कर सकते हैं जो आप कर सकते हैं git log द्वारा प्राप्त करें)

असल में कोई भी प्रतिबद्धता तब होगी जब यह उन चीजों के पूर्व/पूर्वजों के लिए होगी जिन्हें आप पेड़ में हटाना/संपादित/रीडवर्ड करना चाहते हैं। यह संपादक में <latest-commit-to-be-retained> के बाद से सभी कामों की सूची देगा (आपके गिट कॉन्फ़िगरेशन में परिभाषित)।सूची से, कोई, प्रतिबद्ध सिर्फ इतना है कि विशेष लाइन को हटाने के हटाने के लिए, बचाने के लिए और बाहर निकलने के (vi habbits :)) फ़ाइल + संपादक, और git rebase --continue

कर दूसरा जवाब के लिए करने के लिए, मैं Knittl से सहमत

में आपके परिवर्तनों (मूल रूप से एक कॉन्फ़िगरेशन शाखा) और नियमित रूप से अन्य शाखाओं को विलय करने वाली शाखा है। इस तरह से परिवर्तन अन्य शाखाओं में नहीं जाते

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