सारांश
त्रुटि संदेश
एक पिछली प्रतिबद्धता के बिना 'स्क्वैश' नहीं कर सकता
इसका मतलब है कि आप "नीचे की ओर स्क्वाश" करने का प्रयास कर रहे हैं। Git हमेशा एक पुराने कमिट या "अपवर्ड" में एक नए कमिट को स्क्वैश करता है , जैसा कि इंटरएक्टिव रिबेड्स टूडू लिस्ट में देखा गया है, जो कि पिछली लाइन पर कमिट है। अपनी टूडू सूची की पहली पंक्ति पर कमांड को बदलना squash
हमेशा इस त्रुटि को उत्पन्न करेगा क्योंकि इसमें पहली स्क्वैश के लिए कुछ भी नहीं है।
जोड़
पहले जहां आप के साथ शुरू किया था वहां वापस जाएं
$ git rebase --abort
कहो तुम्हारा इतिहास है
$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 a
यही है, एक पहले प्रतिबद्ध था, फिर बी, और अंत में सी। C करने के बाद हम b और c को एक साथ स्क्वैश करने का निर्णय लेते हैं:
(नोट: अधिकांश प्लेटफार्मों पर डिफ़ॉल्ट रूप से git log
, अपने आउटपुट को पेजर में चला रहा less
है। पेजर को छोड़ने और अपने कमांड प्रॉम्प्ट पर वापस जाने के लिए, q
कुंजी दबाएं।)
रनिंग git rebase --interactive HEAD~2
आपको एक संपादक देता है
pick b76d157 b
pick a931ac7 c
# Rebase df23917..a931ac7 onto df23917
#
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
(ध्यान दें कि यह टूडू सूची आउटपुट के साथ तुलना में रिवर्स ऑर्डर में है git log
।)
ख के बदलने pick
के लिए squash
त्रुटि आपने देखा में परिणाम होगा, लेकिन अगर इसके बजाय आप ख में ग स्क्वैश (नए में प्रतिबद्ध पुराने या "ऊपर की ओर कुचलने") के लिए कार्यसूची बदलकर
pick b76d157 b
squash a931ac7 c
और अपने संपादक को बचाने-छोड़ने, आपको एक और संपादक मिलेगा जिसकी सामग्री है
# This is a combination of 2 commits.
# The first commit's message is:
b
# This is the 2nd commit message:
c
जब आप सहेजते हैं और छोड़ते हैं, तो संपादित फ़ाइल की सामग्री नई संयुक्त प्रतिबद्ध का संदेश बन जाती है:
$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
df239176e1a2ffac927d8b496ea00d5488481db5 a
इतिहास को फिर से लिखने के बारे में ध्यान दें
इंटरएक्टिव रिबेस इतिहास को फिर से लिखता है। पुराने इतिहास वाले रिमोट को धकेलने का प्रयास विफल हो जाएगा क्योंकि यह तेज़-फ़ॉरवर्ड नहीं है।
यदि आपने जिस शाखा में छूट दी है वह एक विषय या सुविधा शाखा है जिसमें आप स्वयं काम कर रहे हैं , तो कोई बड़ी बात नहीं। किसी अन्य रिपॉजिटरी में धकेलने के लिए --force
विकल्प की आवश्यकता होगी , या वैकल्पिक रूप से आप सक्षम हो सकते हैं, दूरस्थ रिपॉजिटरी की अनुमति के आधार पर, पुरानी शाखा को हटाने के लिए और फिर विद्रोही संस्करण को धक्का दें। उन आदेशों के उदाहरण जो संभावित रूप से काम को नष्ट कर देंगे, इस उत्तर के दायरे से बाहर हैं।
एक शाखा पर पहले से प्रकाशित इतिहास को फिर से लिखना जिसमें आप बहुत अच्छे कारण के बिना अन्य लोगों के साथ काम कर रहे हैं जैसे कि पासवर्ड या अन्य संवेदनशील विवरणों को लीक करना आपके सहयोगियों पर काम करता है और असामाजिक है और अन्य डेवलपर्स को नाराज करेगा। में "पुन: प्राप्त करना एक अपस्ट्रीम rebase से" अनुभाग git rebase
प्रलेखन अतिरिक्त बल के साथ, बताते हैं।
रिबासिंग (या पुनर्लेखन का कोई अन्य रूप) एक शाखा है जिस पर दूसरों का काम आधारित है, यह एक बुरा विचार है: इसके किसी भी व्यक्ति को अपने इतिहास को मैन्युअल रूप से ठीक करने के लिए मजबूर किया जाता है। यह खंड बताता है कि डाउनस्ट्रीम के दृष्टिकोण से कैसे ठीक किया जाए। हालांकि, वास्तविक सुधार, पहली जगह में अपस्ट्रीम को फिर से बनाने से बचना होगा। ...