Git में किसी फ़ाइल का केवल एक भाग करें


2764

जब मैं किसी फ़ाइल को Git में परिवर्तन करता हूं, तो मैं केवल कुछ परिवर्तनों को कैसे कर सकता हूं?

उदाहरण के लिए, मैं 30 लाइनों में से केवल 15 लाइनों को कैसे कर सकता हूं जो एक फ़ाइल में बदल दी गई हैं?


3
संबंधित stackoverflow.com/q/34609924/52074 : यदि आपको एक हंक को छोटे हंक में विभाजित करने की आवश्यकता है।
ट्रेवर बॉयड स्मिथ

सारांश: क्षमता के संदर्भ में: git gui= git add -e> git add -i -p; सुविधा की दृष्टि से: git gui> git add -i -p> git add -e। तो: git guiजब आपके पास एक्स तक पहुंच हो, तो उसे चुनें। git add -i -pसाधारण सामान लेने के लिए और जब आपके पास एक्स का उपयोग न करना हो या एक्स git add -eके बिना जटिल मंचन के लिए उपयोग करना हो।
पेंघे गेंग

जवाबों:


3686

आप का उपयोग कर सकते हैं git add --patch <filename>(या -pसंक्षेप में), और git आपकी फ़ाइल को तोड़ना शुरू कर देगा, जो इसे लगता है कि समझदार "हॉक" (फ़ाइल के भाग) हैं। यह तब आपको इस प्रश्न से संकेत देगा:

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?

यहाँ प्रत्येक विकल्प का विवरण दिया गया है:

  • y अगले हंक के लिए इस हंक को मंच दें
  • n इस हंक को अगले कमिट के लिए चरणबद्ध न करें
  • qछोड़; इस हंक या शेष हिस्सों में से किसी का भी मंचन न करें
  • a इस हंक को चरणबद्ध करें और बाद में सभी फ़ाइल में हंक करें
  • d फ़ाइल में इस हंक या बाद के किसी भी हिस्से को चरणबद्ध न करें
  • g जाने के लिए एक हंक का चयन करें
  • / दिए गए regex से मिलते हुए हंक की खोज करें
  • j इस हंक को अनिर्दिष्ट छोड़ दें, अगले अचूक हंक को देखें
  • J इस हंक को न छोड़ें, अगले हंक को देखें
  • k इस हंक को अनिर्धारित छोड़ दें, पिछले अघोषित हंक को देखें
  • K इस हंक को न छोड़ें, पिछले हंक को देखें
  • s वर्तमान हंक को छोटे टुकड़ों में विभाजित करें
  • e मैन्युअल रूप से वर्तमान हंक को संपादित करें
  • ? प्रिंट हंक मदद

यदि फ़ाइल अभी रिपॉजिटरी में नहीं है, तो आप पहले कर सकते हैं git add -N <filename>। बाद में आप के साथ जा सकते हैं git add -p <filename>

बाद में, आप उपयोग कर सकते हैं:

  • git diff --staged यह जांचने के लिए कि आपने सही परिवर्तन किए हैं
  • git reset -p अनजाने में गलती से जोड़े गए टुकड़े
  • git commit -v जब आप प्रतिबद्ध संदेश को संपादित करते हैं तो अपनी प्रतिबद्धताओं को देखने के लिए।

ध्यान दें कि यह git format-patchकमांड से बहुत अलग है , जिसका उद्देश्य किसी .patchफाइल में डेटा को पार्स करना है ।

भविष्य के लिए संदर्भ: गिट टूल्स - इंटरएक्टिव स्टेजिंग


83
यह ध्यान रखना उपयोगी हो सकता है कि कमांड के -p/--patchअंदर पैच एक्शन का एक शॉर्टकट है -i/--interactiveजो उपयोगी इंटरएक्टिव मोड को आरंभ करता है
टुटुअज्जु

5
> यदि उस फ़ाइल का पहले ही मंचन हो जाए तो क्या होगा? यह केवल अस्थिर परिवर्तन दिखाएगा। जैसा git diffकरता है।
यूजेन कोनकोव

3
मैं मैन्युअल रूप से वर्तमान हंक को कैसे संपादित कर सकता हूं? मुझे नहीं पता कि ई टाइप करने के बाद मुझे क्या करना है।
हांसु

23
दबाने के बाद e, आप हंक को मैन्युअल रूप से प्रतिस्थापित करके +या उसके -द्वारा#
veksen

1
यह बहुत अच्छा है लेकिन अब मैं वास्तव में इसे कैसे आगे बढ़ाऊं? अगर मैं ऐसा git pushकरता हूं तो यह पहले से ही अद्यतित है। और अगर मैं करता हूं तो git diffमैंने जो कहा, वह मैं देख सकता हूं n। अगर मुझे लगता है कि git diff --stagedमैं प्रतिबद्ध हूं तो मैं धक्का देना चाहता हूं। यह मानते हुए कि मैं कमिट को धक्का दे सकता हूं, मैंने जो कहा था, उसे कैसे हटाऊं no?
चोवी

250

आप उपयोग कर सकते हैं git add --interactiveया , और फिर ( नहीं ); गेट-ऐड मैनपेज में इंटरएक्टिव मोड देखें , या बस निर्देशों का पालन करें।git add -p <file>git commit git commit -a

आधुनिक गिट में भी है git commit --interactive(और git commit --patch, जो इंटरैक्टिव कमिट में पैच विकल्प का शॉर्टकट है)।

यदि आप इसे GUI से करना पसंद करते हैं, तो आप git-gui का उपयोग कर सकते हैं । आप बस उन विखंडू को चिह्नित कर सकते हैं जिन्हें आप प्रतिबद्ध में शामिल करना चाहते हैं। मैं व्यक्तिगत रूप से इसे उपयोग करने की तुलना में आसान पाता हूं git add -i। अन्य गिट GUIs, जैसे QGit या GitX में भी यह कार्यक्षमता हो सकती है।


1
दिलचस्प बात यह है कि windows.github.com को आंशिक फ़ाइल कमिट के लिए समर्थन था, लेकिन लगता है कि इसे हाल ही में गिरा दिया गया है ..
Juri

1
@ मुझे लगता है कि आंशिक फ़ाइल के लिए समर्थन वापस आ गया है।
Ela782

@ जूरी आपका स्वागत है। मैंने वास्तव में कभी नहीं देखा था कि यह पहले भी वहां था - मैंने इसे पिछले हफ्ते देखा और सोचा "ओह, क्या अद्भुत नई सुविधा है"! :-)
एला --२ 24२

1
आजकल windows.github.com रिब्रांडेड GitHub डेस्कटॉप पर पुनर्निर्देशित करता है जो कि Git GUI की तुलना में अच्छा है और आंशिक कमिट का समर्थन करता है ... लेकिन हस्ताक्षर करने का समर्थन नहीं करता है। आह।

147

git gui इस कार्यक्षमता को अलग दृश्य के तहत प्रदान करता है। बस उस पंक्ति पर क्लिक करें, जिसमें आप रुचि रखते हैं और आपको मेनू आइटम के लिए एक "मंच इस पंक्ति को देखना चाहिए"।


13
जटिल पैच के लिए यह आमतौर पर मेरे लिए सबसे तेज़ तरीका है।
hochl

7
चरणबद्ध क्षेत्र में बारीक दाने के तरीके में बदलाव लाने के लिए यह एक बहुत ही कुशल और सहज तरीका है। साथ ही कई लाइनों का चयन किया जा सकता है और उस चयन के भीतर सभी परिवर्तन जोड़ दिए जाएंगे।
जॉक्स

ध्यान दें कि यह नहीं है gitk, लेकिन यह विंडोज के लिए गिट बैश के साथ शामिल है; आपके पास इसके लिए एक स्टार्ट मेनू प्रविष्टि होनी चाहिए या इसे कमांड से शुरू कर सकते हैं git gui। वहाँ भी है stage this hunkजो शायद अधिक से अधिक उपयोगी है stage this line। हो सकता है कि यह उत्तर 10 साल पहले बनाया गया हो।
क्रिस

82

मेरा मानना ​​है कि git add -e myfileयह सबसे आसान तरीका है (कम से कम मेरी प्राथमिकता) क्योंकि यह केवल एक टेक्स्ट एडिटर को खोलता है और आपको यह चुनने देता है कि आप किस लाइन को स्टेज करना चाहते हैं और कौन सी लाइन को नहीं। संपादन आदेशों के बारे में:

जोड़ा गया सामग्री:

जोड़ा गया सामग्री "+" के साथ शुरू होने वाली लाइनों द्वारा दर्शाया गया है। आप उन्हें हटाकर किसी भी अतिरिक्त लाइनों के मंचन को रोक सकते हैं।

निकाली गई सामग्री:

हटाए गए सामग्री को "-" के साथ शुरू होने वाली लाइनों द्वारा दर्शाया गया है। आप "-" को "" (स्थान) में परिवर्तित करके उनके निष्कासन को रोक सकते हैं।

संशोधित सामग्री:

संशोधित सामग्री का प्रतिनिधित्व "-" लाइनों (पुरानी सामग्री को हटाने) द्वारा किया जाता है जिसके बाद "+" लाइनें (प्रतिस्थापन सामग्री जोड़कर) होती हैं। आप "-" लाइनों को "" और "+" लाइनों को हटाकर संशोधन को रोक सकते हैं। खबरदार है कि जोड़े में से केवल आधे को संशोधित करना सूचकांक में भ्रामक परिवर्तन लाने की संभावना है।

के बारे में हर विवरण git addउपलब्ध हैgit --help add


7
यह अधिक उपयोगी होगा यदि वास्तव में उन पंक्तियों (यानी दर्ज करने के लिए वास्तविक आदेश) का चयन करने के तरीके के बारे में कहीं स्पष्ट व्याख्या थी। मैं प्रलेखन में एक नहीं मिला। क्या आप एक संदर्भ जोड़ सकते हैं?
एलेक्स

4
शॉर्टहैंड विकल्प पसंद नहीं करने वालों के लिए -eहै --edit
Kolyunya

2
@Alex संदर्भ संदर्भ फ़्रीडोमनबाना द्वारा जोड़े गए अनुभाग EDITING PATCHES से हैंgit --help add
Randall

8
यह एकमात्र उत्तर है (केवल गिट की आवश्यकता होती है) जो लाइन sपैच को जोड़ने / हटाने की समस्या को हल करता है जब आप इंटरेक्टिव पैच मोड के साथ हॉक को छोटा नहीं कर सकते ।
cdosborn

3
यह समझने में मदद मिल सकती है कि यह कमांड ( git add -e) डिस्क पर फ़ाइल सामग्री को * नहीं बदलता है। यह सिर्फ अस्थिर से चरणबद्ध (सूचकांक) में परिवर्तन का हिस्सा है।
पेंघे गेंग

44

यदि आप विम का उपयोग कर रहे हैं, तो आप भगोड़े नामक उत्कृष्ट प्लगइन को आज़माना चाह सकते हैं ।

आप के साथ काम कर रहे कॉपी और इंडेक्स के बीच एक फ़ाइल का रूप देख सकते हैं :Gdiff, और फिर क्लासिक vim diff कमांड की तरह इंडेक्स में लाइनें या हॉक जोड़ सकते हैं dp। इंडेक्स में संशोधनों को सहेजें और इसके साथ प्रतिबद्ध करें :Gcommit, और आप कर रहे हैं।

यहां बहुत अच्छे परिचयात्मक स्क्रेंकोस्ट हैं (देखें। भाग 2 )।


इस लिंक के लिए बहुत बहुत धन्यवाद। बिल्कुल वही जो मुझे चाहिए। विशेष रूप :diffget/:diffputसे दृश्य मोड में, जहां मैं विशिष्ट लाइनें चुन सकता हूं, जिसे मैं रीसेट / कमिट करना चाहता हूं। तो, फिर से सुनिश्चित करें: विम कमाल है।
गुडनिकेब

30

मैं एटलसियन से सोर्सट्री का उपयोग करने की जोरदार सिफारिश करूंगा । (यह मुफ़्त है।) यह इस तुच्छ बनाता है। आप कोड या कोड की अलग-अलग पंक्तियों को जल्दी और आसानी से चरणबद्ध कर सकते हैं।

यहां छवि विवरण दर्ज करें


1
मैं सहमत हूं कि SourceTree इस उद्देश्य के लिए एक अच्छा उपकरण है, क्योंकि यह आपको कमांड लाइन के माध्यम से जितना संभव हो उतना बेहतर नियंत्रण प्रदान करता है।

18
@cupcake मैं इसके विपरीत बहस करूंगा, यह देखते हुए कि SourceTree शायद उन कमांड लाइन git निष्पादनों का उपयोग करता है, स्वाभाविक रूप से "कमांड लाइन" के माध्यम से समान (या अधिक) ठीक-ठीक कार्रवाई करना हमेशा संभव होगा।
टूटुज्जु

2
ठीक-ठीक दलील के बावजूद, मैं अत्यधिक सलाह देता हूं कि सोर्सट्री को हॉक और व्यक्तिगत लाइनों के मंचन के रूप में सुपर आसान है: i.imgur.com/85bNu4C.png
मंगल रॉबर्टसन

1
@tutuDajuju इस मामले में, मुझे यकीन नहीं है कि यह सच है। SourceTree में लाइन से स्टेज लाइन के लिए कौन से हिस्से लेने की क्षमता है । आपको एक संपूर्ण हंक मंचित करने की आवश्यकता नहीं है; आप एक हंक के बीच में 2 लाइनों को चरणबद्ध कर सकते हैं। मुझे नहीं पता कि यह कैसे पूरा होता है, हालांकि। (फिलहाल, मैं किसी अनट्रैक फ़ाइल के लिए विशेष लाइनों को स्टेज करने के लिए SourceTree की अक्षमता के आसपास काम करने की कोशिश कर रहा हूं। मैं यहां वर्कअराउंड की तलाश में उतरा था, केवल यह खोजने के लिए कि लाइन-बाय-लाइन क्षमता की पेशकश करने के लिए जाहिरा तौर पर प्रतीत नहीं होता है। कम से कम। कम से कम सीधे तरीके से नहीं।)
jpmc26

1
@ मान लीजिए आप लाइन ५० पर क्लिक कर सकते हैं और फिर १०० लाइन पर क्लिक कर सकते हैं। आप आसानी से 50-100 की लाइन को सौत्रिक्री में देख सकते हैं :)
ryan123

26

वर्थ नोटिंग कि git add --patchएक नई फ़ाइल के लिए उपयोग करने के लिए आपको पहले फ़ाइल को इंडेक्स के साथ जोड़ना होगा git add --intent-to-add:

git add -N file
git add -p file

23

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

ऐशे ही:

$ git stash -u
Saved working directory and index state WIP on master: 47a1413 ...
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 1st commit"
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 2nd commit"
$ git stash pop

Whymarrh का जवाब है कि मैं आमतौर पर क्या करता हूं, कभी-कभी बहुत सारे बदलावों को छोड़कर मैं कह सकता हूं कि चीजों को मंचित करते समय मैं एक गलती कर सकता हूं, और मैं एक प्रतिबद्ध राज्य चाहता हूं कि मैं एक दूसरे पास के लिए वापस गिर सकता हूं।


12

क्या आपको emacs का उपयोग करना चाहिए, Magit पर एक नज़र डालें , जो emacs के लिए एक git इंटरफ़ेस प्रदान करता है। यह स्टेजिंग हॉक (फाइलों के कुछ हिस्सों) को काफी अच्छी तरह से सपोर्ट करता है ।


मैं अक्सर एक git कमांड पर एक संपादक को खोलना चाहता हूं, जब मैंने इसे Mx शेल विंडो से चलाया है। क्या मैजिट उस पागलपन को रोकती है, और उसके लिए सिर्फ एक नया बफर खोलती है? (कृपया पृष्ठभूमि-इमैक-डेमन संकेत नहीं; वैसे भी धन्यवाद, लेकिन जीवन बहुत छोटा है)।
user2066657

नहीं, जहां तक ​​मैं बता सकता हूं कि यह इसे बाधित नहीं करता है। लेकिन इसके लिए सिर्फ अपना शब्द न लें क्योंकि (1) मैं शायद ही कभी एमएसीएस में शेल विंडो का उपयोग करता हूं, और (2) मैं सामान्य रूप से एमैकसिएंट का उपयोग करता हूं। यह कहने के बाद कि, यदि आपके लिए emacsclient एक विकल्प है , तो कम से कम अतिरिक्त विंडो को खाली होने से बचाया जा सकता है और "COMMIT_EDITMSG" बफर को मेरी मौजूदा Emacs विंडो में खोला गया है।
मार्क वैन लेंट

10

Intellij IDEA (और मुझे लगता है कि श्रृंखला के अन्य सभी उत्पाद) ने v2018.1 के बाद से आंशिक कमिट के समर्थन में बनाया है

यहां छवि विवरण दर्ज करें


9

Git एक्सटेंशन का उपयोग करने वालों के लिए :

कमिट विंडो में, उस फ़ाइल का चयन करें जिसे आप आंशिक रूप से कमिट करना चाहते हैं, फिर उस पाठ का चयन करें जिसे आप सही फलक में करना चाहते हैं, फिर चयन पर राइट-क्लिक करें और संदर्भ मेनू से 'स्टेज सेलेक्टेड लाइन्स' चुनें।


2
'स्टेज सेलेक्टेड लाइन्स' के लिए Git एक्सटेंशन्स में कीबोर्ड शॉर्टकट है s- एक कमिट के लिए फाइलों को जल्दी से स्टेज करने के लिए बहुत उपयोगी है।
अल्केमिस्टमैट

8

बहुत हद तक jdsumsion के जवाब की तरह आप भी अपने वर्तमान काम को रोक सकते हैं, लेकिन फिर स्ट्रैस से चुनिंदा बदलावों को खींचने के लिए मेल्ड जैसे मल्टफूल का उपयोग करें। इस तरह से आप मैन्युअल रूप से बहुत आसानी से लोड़े को संपादित कर सकते हैं, जो उस समय थोड़ा दर्द होता है git add -p:

$ git stash -u
$ git difftool -d -t meld stash
$ git commit -a -m "some message"
$ git stash pop

स्टैश विधि का उपयोग करने से आपको परीक्षण करने का अवसर मिलता है, यदि आपका कोड अभी भी काम करता है, इससे पहले कि आप इसे करें।


यह अच्छी तरह से काम करता है, लेकिन अगर आप उपयोग करते हैं git commit --amend, तो ऐसा लगता है कि आप बाद में स्टैश पॉप नहीं कर सकते हैं, या ऐसा करने का एक तरीका है?
मार्क

7

पिछले उत्तर पर जोड़ते हुए, यदि आप कमांड लाइन का उपयोग करना पसंद करते हैं, तो प्रवेश करने git add -e myfileसे आपको लाइन द्वारा लाइन चुनने का विकल्प मिलता है कि आप क्या करना चाहते हैं क्योंकि यह कमांड मतभेदों के साथ एक संपादक को खोलेगा, जैसे:

यहां छवि विवरण दर्ज करें

जैसा कि आप जान सकते हैं कि लाइनें जो कि +एडिक्शन से शुरू होती हैं, वे लाइनें जो डिलीट होने के साथ शुरू होती -हैं। इसलिए:

  • इसके अलावा स्टेज को हटाने के लिए उस लाइन को डिलीट न करें।
  • एक विलोपन को चरणबद्ध न करने के लिए बस स्थान के -साथ बदलें

git add -hइस तरह से फ़ाइलों को जोड़ने के बारे में यही कहना है (फ़ाइलों को पैच करना):

जोड़ा गया सामग्री जोड़ा सामग्री "+" के साथ शुरू होने वाली रेखाओं द्वारा दर्शाया गया है। आप उन्हें हटाकर किसी भी अतिरिक्त लाइनों के मंचन को रोक सकते हैं।

हटाया गया कंटेंट: हटाए गए कंटेंट को "-" से शुरू होने वाली लाइनों द्वारा दर्शाया जाता है। आप "-" को "" (स्थान) में परिवर्तित करके उनके निष्कासन को रोक सकते हैं।

संशोधित सामग्री: संशोधित सामग्री का प्रतिनिधित्व "-" लाइनों (पुरानी सामग्री को हटाकर) के बाद "+" लाइनों (प्रतिस्थापन सामग्री को जोड़ने) द्वारा किया जाता है। आप "-" लाइनों को "" और "+" लाइनों को हटाकर संशोधन का मंचन रोक सकते हैं। खबरदार है कि जोड़े में से केवल आधे को संशोधित करना सूचकांक में भ्रामक परिवर्तन लाने की संभावना है।

सावधानी: फ़ाइल की सामग्री को न बदलें, ऐसा करने के लिए यह अच्छी जगह नहीं है। बस हटाए गए या जोड़े गए लाइनों के ऑपरेटरों को बदलें।


पिछला जवाब क्या? उनके पास मौजूद अंकों के आधार पर उत्तर संग्रहीत किए जाते हैं। तो आपका जवाब अब की तुलना में एक अलग जगह पर है जब आपने इसे अन्य उत्तरों की तुलना में लिखा था।
कुलागिन

मेरा मानना ​​है कि संदर्भित उत्तर @theFreedomBanana
K. प्रतीक

6

vim-gitgutter प्लगइन विंब एडिटर का उपयोग किए बिना स्टॉक्स को स्टेज कर सकता है

:GitGutterStageHunk

इसके अलावा, यह कुछ आधुनिक आईडीई की तरह एक अलग साइन कॉलम की तरह अन्य शांत सुविधाएँ प्रदान करता है

अगर हंक के केवल भाग का मंचन विम- फ़्यूगिटिव होना चाहिए

:Gdiff

दृश्य सीमा चयन की अनुमति देता है :'<,'>diffputया फिर :'<,'>diffgetअलग-अलग लाइन परिवर्तनों को स्टेज / रिवर्ट करने की।



4

कछुआ के साथ:

फ़ाइल पर राइट क्लिक करें और उपयोग करें Context Menu → Restore after commit। यह फ़ाइल की एक प्रति बनाएगा जैसा कि यह है। फिर आप फ़ाइल को संपादित कर सकते हैं, जैसे कि TortoiseGitMerge में और उन सभी परिवर्तनों को पूर्ववत करें, जिन्हें आप कमिट नहीं करना चाहते हैं। उन परिवर्तनों को सहेजने के बाद आप फ़ाइल कर सकते हैं।


4

इस सवाल को पूछे जाने में 10 साल हो गए हैं। और मुझे आशा है कि यह उत्तर किसी के लिए उपयोगी होगा। जैसा कि यहां उत्तर में उल्लेख किया गया है , जहां जीयूआई कोई विकल्प नहीं है, एंड्रयू शादुरा का क्रेकॉर्ड एक्सटेंशन एक ncurses विंडो लाने में मदद करता है जिसमें हम प्रतिबद्ध करने के लिए लाइनों का चयन कर सकते हैं।

विस्तार निम्नानुसार सेट करें:

git clone https://github.com/andrewshadura/git-crecord
cd git-crecord
./setup.py install
ln -s $PWD/git-crecord ~/.local/bin/git-crecord

अपने git रेपो में cd और इसे इस प्रकार संलग्न करें:

git crecord

यह ncurses इंटरफ़ेस को लाएगा जिसे नीचे दिखाया गया है। Ncurses विंडो में निम्नलिखित कुंजियों को दबाने से कुछ कार्य किए जाएंगे:

f       hunk toggle fold (arrow keys can also be used)
space   toggle hunk selection
a       toggle commit or amend
c       confirm and open commit window

एक नमूना उपयोग दिखा रहा स्क्रेनेकास्टउदाहरण


3

के लिए एटम उपयोगकर्ताओं, पैकेज GitHub इंटरैक्टिव मचान, की शैली में शामिल हैं git gui। शॉर्टकट के लिए पैकेज का प्रलेखन देखें

एटम का उपयोग करने से एक विषय के साथ काम करने की अनुमति मिलती है जिसमें अंधेरे पृष्ठभूमि होती है (डिफ़ॉल्ट रूप से, git guiएक सफेद पृष्ठभूमि होती है)।



2

git-meld-index - वेबसाइट से उद्धृत:

git-meld-index चलाता है meld - या कोई अन्य git difftool (kdiff3, diffuse, आदि) - जो आपको git index में अंतःक्रियात्मक रूप से परिवर्तन करने की अनुमति देता है (जिसे git स्टेजिंग क्षेत्र के रूप में भी जाना जाता है)।

यह git ऐड -p की कार्यक्षमता के समान है, और git ऐड-इनएक्टिव सक्रिय है। कुछ मामलों में गट एड-पी की तुलना में मेल्ड आसान / तेज होता है। ऐसा इसलिए है क्योंकि मेल्ड आपको अनुमति देता है, उदाहरण के लिए:

  • अधिक संदर्भ देखें
  • इंट्रा-लाइन भिन्न देखें
  • हाथ से संपादित करें और देखें 'लाइव' अलग-अलग अपडेट (हर कीपर के बाद अद्यतन)
  • हर उस बदलाव के लिए जिसे आप छोड़ना चाहते हैं, बिना 'n' कहे परिवर्तन पर नेविगेट करें

प्रयोग

गिट रिपॉजिटरी में, भागो:

git meld-index

आपको मेल्ड (या आपके कॉन्फ़िगर किए गए गिट स्पेसफुटूल) दिखाई देंगे:

LEFT : आपके कार्य करने वाले पेड़ से कॉपी की गई अस्थायी निर्देशिका फ़िनिशिंग फाइलें

राइट : इंडेक्स की सामग्री के साथ अस्थायी निर्देशिका। इसमें ऐसी फाइलें भी शामिल हैं जो अभी तक सूचकांक में नहीं हैं, लेकिन काम की प्रतिलिपि में संशोधित या अनट्रैक की गई हैं - इस मामले में आप HEAD से फ़ाइल सामग्री देखेंगे।

खुश होने तक सूचकांक (दाहिने हाथ की ओर) को संपादित करें। जरूरत पड़ने पर बचत करना याद रखें।

जब आप पूरा कर लेते हैं, तो मेल को बंद कर देते हैं, और गिट-मेल्ड-इंडेक्स अस्थायी निर्देशिका की सामग्री को मेल के दाहिने हाथ की ओर से मेल खाने के लिए अनुक्रमणिका को अपडेट कर देगा।


2

यदि यह Windowsप्लेटफ़ॉर्म पर है, तो मेरी राय git guiमें फ़ाइल से stage/ commitकुछ पंक्तियों के लिए बहुत अच्छा उपकरण हैunstaged

1. हंक बुद्धिमान:

  • unstagged Changesअनुभाग से फ़ाइल का चयन करें
  • कोड का राईट क्लिक करें जिसका मंचन करने की आवश्यकता है
  • चुनते हैं Stage Hunk for commit

2. लाइन वार:

  • unstagged Changesअनुभाग से फ़ाइल का चयन करें
  • मंचन की जाने वाली लाइन / लाइनों का चयन करें
  • राइट क्लिक करें और चुनें Stage Lines for commit

3. यदि आप कुछ लाइनों को छोड़कर पूरी फाइल को स्टेज करना चाहते हैं:

  • unstagged Changesअनुभाग से फ़ाइल का चयन करें
  • दबाएँ Ctrl+T (Stage file to commit)
  • चयनित फ़ाइल अब Staged Changesअनुभाग में जाती है
  • लाइन / लाइन्स का मंचन करें
  • राइट क्लिक करें और चुनें UnStage Lines for commit

1

ऊपर दिए गए एक उत्तर के रूप में , आप उपयोग कर सकते हैं git add --patch filename.txt

या संक्षिप्त रूप git add -p filename.txt

... लेकिन आपके पास पहले से मौजूद रिपॉजिटरी की फाइलों के लिए, एस में बेहतर है - सीधे कमांड पर फ्लैप का उपयोग करें (यदि आप हाल ही में पर्याप्त संस्करण का उपयोग कर रहे हैं): git commit --patch filename.txt

... या, फिर से, संक्षिप्त रूप git commit -p filename.txt

... और फिर उल्लेखित कुंजियों का उपयोग करके, (y / n आदि), प्रतिबद्धताओं में शामिल की जाने वाली लाइनों को चुनने के लिए।


git add -p filename.txtत्रुटि के लिए कम कमरे के अलावा आपको " " क्या देता है ? यदि आप आंशिक-फ़ाइल परिवर्तन को गड़बड़ करते हैं, तो एक ऐड को पूर्ववत करने से बेहतर है एक कमिट को पूर्ववत करना।
CTMacUser

मुझे पता नहीं क्यों, लेकिन जब मैं कहता हूं कि 'एन' लाइन शामिल हो जाती है .... और जब मैं दूसरे हंक पर 'वाई' कहता हूं, तो यह भी शामिल हो जाता है।
चॉवी

0

git-cola एक बेहतरीन GUI है और इसमें यह फीचर बिल्ट-इन भी है। बस चरण और प्रेस करने के लिए लाइनों का चयन करें S। यदि कोई चयन नहीं किया जाता है, तो पूर्ण हंक का मंचन किया जाता है।

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