Magit में एक हंक उलट 2.1.0


24

मैंने अभी-अभी मैगिट 2.1.0 में अपग्रेड किया। (और 25.0.50 emits और 2.3.1 git पर भी।)

इससे पहले, *magit*बफर में मैं कर सकता था:

  1. Unstaged क्षेत्र में एक हंक का चयन करें।
  2. vइसे उलटने के लिए हां टाइप करें और उत्तर दें।

यह काम था।

लेकिन अब मैगिट 2.1.0 में यह एक त्रुटि देता है "Cannot reverse unstaged changes":।

क्यूं कर?


त्रुटि संदेश से संकेत लेते हुए, मुझे पता चला कि मैं अभी भी ऐसा कर सकता हूं, यद्यपि कुछ और चरणों के साथ "पीछे" तरीके से

  1. sहंक को छेड़ो। (पीछे की ओर लगता है, यह प्रतिबद्ध राज्य के करीब जा रहा है।)
  2. नीचे नेविगेट करें और इसे चरणबद्ध क्षेत्र में चुनें।
  3. दबाएं v, हां में जवाब दें।
  4. हालांकि हंक अभी भी मंचन किया गया है, इसलिए अंत में मुझे uहंक को रोकना होगा।

क्या यह एक बग है, या, क्या यह जानबूझकर है और / या मैं घना हो रहा हूं? यदि बाद में, क्या आप मुझे समझने में मदद कर सकते हैं?


अद्यतन: पूरी तरह से RTFinfo- आईएनजी के बाद, मैं देखता हूं कि दो कमांड हैं:

  • v magit-reverse काम के पेड़ में बिंदु पर परिवर्तन को उल्टा करें।
  • k magit-discard काम के पेड़ से बिंदु पर परिवर्तन निकालें।

ऐसा लगता है कि k magit-discardवही करता है जो मुझे vपहले करने की आदत थी । यह एक अस्थिर हंक पर काम करता है।

इसलिए व्यावहारिक रूप से मुझे सिर्फ अपनी मांसपेशियों की मेमोरी का उपयोग करने की आवश्यकता है k। मैं एक स्व-उत्तर के रूप में पोस्ट कर सकता था। लेकिन मुझे लगता है कि मैं अभी भी तर्क के बारे में उत्सुक हूं, क्योंकि मुझे यह समझने की कल्पना है कि इससे मुझे मैगिट को बेहतर ढंग से समझने में मदद मिलेगी।


खुशी है कि आप ललित जानकारी पढ़ रहे हैं :) मैं उलझन में हूँ कि आपको "हंक" उलटने से क्या मतलब है। मैंने उस शब्द को पहले कभी नहीं सुना है।
PythonNut

kमैगिट के पहले के संस्करणों में भी परिवर्तन के बारे में जानकारी देता है, और जो आप कर रहे हैं उसके लिए उपयुक्त कमांड लगता है। vगेट रिवर्ट के लिए है: एक नई प्रतिबद्ध बनाना जो एक पूर्व के विपरीत परिवर्तन को बनाता है। मुझे लगता है कि एक परिवर्तन जो वास्तव में प्रतिबद्ध नहीं था, उसे त्यागने के समान है, लेकिन 'रिवर्ट' का अर्थ एक कमांड के रूप में है।
ग्लूकोज

ठीक है, यह कैसा दिखता vही था magit-revert-item( "रिवर्स" शब्दावली वहाँ, @PythonNut से आता है) और इस unstaged आइटम के लिए एक करते थे magit-discard-item(के रूप में भी करने के लिए बाध्य kलाइन 4872 देखते हैं -) यहाँ । जाहिरा तौर पर मैंने गलती से उस विशेष अर्थ को सीख लिया v, जो काम करता था, जब मुझे इसका उपयोग करना सीखा था k
ग्रेग Hendershott

हालाँकि मैं आमतौर पर स्व-उत्तरों का बहुत बड़ा प्रशंसक नहीं हूं, लेकिन मुझे लगता है कि इस मामले में यह निष्कर्ष निकालने का सबसे दयालु तरीका है। :) एक नीचे पोस्ट किया गया।
ग्रेग Hendershott

जवाबों:


20

मैगिट पांच मैनुअल में वर्णित "लागू वेरिएंट" लागू करता है : चरण, अस्थिर, "नियमित रूप से लागू", त्यागें और रिवर्स। पहले तीन सबसे गिट उपयोगकर्ताओं के लिए स्पष्ट होना चाहिए। बाद के दो Git में मौजूद नहीं है चीनी मिट्टी के बरतन (MAGIT में वे Git का उपयोग करके लागू पाइपलाइन आदेश और Emacs लिस्प)।

ये दो प्रकार इस प्रकार वर्णित हैं:

  • त्यागें। एक चरणबद्ध बदलाव पर, इसे कार्यशील पेड़ और सूचकांक से हटा दें। एक अस्थिर परिवर्तन पर, इसे केवल काम करने वाले पेड़ से हटा दें।
  • उल्टा। काम के पेड़ में एक बदलाव उल्टा। प्रतिबद्ध और मंचित दोनों परिवर्तन उलटे हो सकते हैं। अस्थिर बदलावों को उलटा नहीं किया जा सकता है। इसके बजाय उन्हें त्यागें।

ये दोनों वेरिएंट बहुत अलग चीजें करते हैं, इसलिए इनमें से किसी भी वेरिएंट को उन मामलों में दूसरे वेरिएंट में वापस नहीं आना चाहिए जहां खुद का इस्तेमाल नहीं किया जा सकता है। पुराने व्यवहार (कुछ संदर्भों में पीछे हटने के लिए पीछे गिरने से) को कम समय में रखना अधिक सुविधाजनक हो सकता है, लेकिन लंबे समय में यह उपयोगकर्ताओं को यह समझने की कोशिश करने से रोकता है कि ये दो संस्करण क्या हैं।

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

"बनाने" से "हटाने" से पीछे हटना बहुत खतरनाक है, इसलिए मैगिट अब ऐसा नहीं करता है।


नए विप्र मोड का उपयोग करके भी ध्यान दें कि आप आकस्मिक हार के कारण खुद को बदलाव से बचा सकते हैं।


3
जवाब देने और औचित्य समझाने के लिए समय निकालने के लिए बहुत-बहुत धन्यवाद।
ग्रेग हेंडरशॉट

10

ऐसा लगता है कि मैंने गलती से सीख लिया था v, जो कि बाध्य था magit-revert-item, इसने magit-discard-itemअनस्ट्रेस्ड हॉक के इस विशेष मामले में किया था । <=== HERE ===मेरे द्वारा नीचे दी गई टिप्पणी देखें :

(defun magit-revert-item ()
  "Revert the item at point.
The change introduced by the item is reversed in the current
working tree."
  (interactive)
  (magit-section-action revert (info)
    ([* unstaged] (magit-discard-item))  ;; <=== HERE ===
    (commit (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this commit? "))
              (magit-revert-commit info)))
    (diff   (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this diff? "))
              (magit-apply-diff-item it "--reverse")))
    (hunk   (when (or (not magit-revert-item-confirm)
                      (yes-or-no-p "Revert this hunk? "))
              (magit-apply-hunk-item it "--reverse")))))

स्रोत: 1.4.2 कोड

लेकिन अब ऐसा नहीं होता:

(defun magit-reverse (&rest args)
  "Reverse the change at point in the working tree."
  (interactive (and current-prefix-arg (list "--3way")))
  (--when-let (magit-current-section)
    (pcase (list (magit-diff-type) (magit-diff-scope))
      (`(untracked ,_) (user-error "Cannot reverse untracked changes"))
      (`(unstaged  ,_) (user-error "Cannot reverse unstaged changes"))
      (`(,_      list) (magit-reverse-files (magit-section-children it) args))
      (`(,_     files) (magit-reverse-files (magit-region-sections) args))
      (`(,_      file) (magit-reverse-files (list it) args))
      (_               (magit-reverse-apply it args)))))

स्रोत: गुरु :


हालाँकि kसीधे तौर पर बाध्य है magit-discard-item। मुझे इसका उपयोग करना सीखना चाहिए था। 2.1.0 से पहले काम किया, और अभी भी काम करता है।

निष्कर्ष में, मजिट 2.1.0 को काफी बदल दिया गया है। यह अपरिहार्य है कि कुछ अजीब कोने के मामले बच नहीं सकते हैं। और, मैं सहमत हूँ, जीवित रहने की आवश्यकता नहीं है। मैं चाबी वापस कर दूँगा।


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