इंटरैक्टिव इंटरैक्टिव विद्रोह लेने के लिए कोई प्रतिबद्ध नहीं है


105

मैं मास्टर हूं और मैंने किया rebase -i <my_branch>

यह मिल गया:

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?

जवाबों:


85

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

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

मुझे आपकी स्थिति का विवरण नहीं पता है, लेकिन आप कुछ इस तरह चाहते हैं:

# 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("-"_) !

HEAD~*वाक्यविन्यास का उपयोग करना मेरे लिए काम करता है लेकिन पहले वाला नहीं था।
देव येगो

25

rebase -iएक प्रतिबद्ध सीमा के बिना कोई भी प्रदर्शन नहीं करेगा। अंतिम को पुनः कहने के लिए, 7 कमिट्स निम्नलिखित का उपयोग करते हैं:

git rebase -i HEAD~7

हालांकि, सावधान रहें कि यह इतिहास को फिर से लिखेगा। यह मत करो, अगर कमिट्स पहले से ही धकेल दिए जाते हैं


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


9

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

git rebase -i HEAD~10

6

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

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

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

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

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

दूसरे उत्तर के लिए, मैं knittl से सहमत हूं

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.