नई फ़ाइलों को शामिल करने के लिए 'git add --patch'?


104

जब मैं दौड़ता हूं git add -p, तो क्या नए तरीके से बनाई गई फ़ाइलों को चुनने के लिए जंक के लिए एक रास्ता है ??

इसलिए अगर मैं एक नई फाइल बनाता हूं foo.java, तो git ऐड -p चलाएं, git मुझे उस फाइल के कंटेंट को इंडेक्स में जोड़ने की अनुमति नहीं देगा।

जवाबों:


77

प्रत्येक नई फ़ाइलों के साथ ऐसा करने के लिए, आप चला सकते हैं:

git add -N .
git add -p

यदि आप इसे अक्सर उपयोग करना चाहते हैं, तो आप अपने में एक उपनाम बना सकते हैं ~/.bashrc:

alias gapan='git add --intent-to-add . && git add --patch'

NB : यदि आप इसे खाली नई फ़ाइल के साथ उपयोग करते हैं, तो git इसे पैच नहीं कर पाएगा और अगले एक पर छोड़ देगा।


13
जो कोई भी सोच रहा git add -Nहै, वह क्या करता है, यह केवल निर्दिष्ट अनट्रैक की गई फ़ाइलों को इंडेक्स में जोड़ता है, लेकिन सामग्री के बिना।
ओडिन

112

जब मैंने git add -p someNewFile.txtएक नई फ़ाइल (अनट्रैक फाइल) पर कोशिश की , तो git बस आउटपुट No changes.और स्टॉप होगा। मुझे यह बताना था कि मैं नई फ़ाइल को ट्रैक करना चाहता था।

git add -N someNewFile.txt
git add -p

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

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

Stage this hunk [y,n,q,a,d,/,e,?]?

यह मानते हुए कि आप संपूर्ण हंक (और इस प्रकार, संपूर्ण फ़ाइल नहीं करना चाहते हैं; क्योंकि मुझे यकीन नहीं है कि आप git add -pउस स्थिति में उपयोग क्यों करना चाहते हैं ?), आप eगिट को बताने के लिए विकल्प निर्दिष्ट करना चाहेंगे जिसे आप संपादित करना चाहते हैं? हंक।

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

गिट के हंक विकल्पों की व्याख्या Git:

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

1
कृपया सारांश में कोई इसका उत्तर दें।
इनक गमूस

5
संक्षेप में, git add -N someNewFile.txtइसके बादgit add -p
कैटशॉज़

7

git add -p वास्तव में पहले से ही ट्रैक की गई फ़ाइलों में परिवर्तन जोड़ने के बारे में है।

जोड़ने के लिए फ़ाइलों का चयन करने के लिए आदेश है git add -i। उदाहरण के लिए:

$ git add -i

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> a
  1: another-new.java
  2: new.java
Add untracked>> 2
  1: another-new.java
* 2: new.java
Add untracked>> 
added one path

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> q
Bye.
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   new.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        another-new.java

(असली कमांड में ऐसे रंग हैं, जिन्हें मैं यहाँ काट-छाँट नहीं कर सकता, इसलिए ऐसा लगता है कि यह अच्छा है)

वास्तव में, पी atch कमांड git add -iउसी तरह करता है git add -p, इसलिए दूसरा पहले का सबसेट है (भले ही मैं प्यार करता हूँ add -pऔर add -iखुद से नफरत करता हूँ!)।


"मैं मानता हूँ कि मुझे ऐड-पी बहुत पसंद है और ऐड-आई से नफरत है!" यही कारण है कि git ऐड तब पैच एक समाधान है जिसे मैं प्यार करता हूं: यह अभी भी आपको आपके द्वारा जोड़ी जा रही नई फ़ाइलों की सामग्री की जांच करने की अनुमति देता है (जब से आप उनके खाली संस्करणों के साथ तुलना करते हैं), और आपके द्वारा संपादित पैच फ़ाइलें!
उलेसे बीएन

कृपया मुझे सही करें अगर मैं गलत हूं, लेकिन यहां तक ​​कि इंटरैक्टिव मोड में भी, पैच अभी भी No changes.एक नई फ़ाइल पर आउटपुट करेगा । ओपी पूछ रहा था कि नई फ़ाइल से हंक कैसे जोड़ें, न कि पूरी फ़ाइल। मेरा मानना --intent-to-addहै कि अभी भी यहाँ आवश्यक है।
जेफ पकेट

add -pअकेले काम नहीं करेगा, लेकिन यह उत्तर बताता है add -i, जो करता है।
मैथ्यू मोय

मैं परेशान हूँ क्योंकि मुझे पता नहीं था git add -i। हालाँकि, आप एक ही चीज़ को गैर-अंतःक्रियात्मक रूप से कर सकते हैं git add -N
मैड फिजिसिस्ट

4

--cachedध्वज का उपयोग करने के लिए एक बहुत ही समान तरीका है ...

1) अपने अनस्ट्रेड किए गए परिवर्तनों को चरणबद्ध में बदल दें, जैसे आपकी जोड़ी गई फ़ाइल।

git add edited-file.txt
git add new-file.txt
git add directory-of-changes/

2) अंतर देखें (ध्यान दें: आप संपादन और नई फ़ाइलें दोनों शामिल कर सकते हैं)।

git diff --cached

3) पैच बनाएँ।

git diff --cached > my_patch_file.patch

दुर्भाग्य से वही उद्देश्य पूरा नहीं करेगा। मुझे जो पसंद है git add -p, वह यह है कि यह सब कुछ नहीं जोड़ता है, लेकिन मुझे लेने दें और जो मैं जोड़ना चाहता हूं उसे चुनें। यह समाधान आँख बंद करके सब कुछ जोड़ देगा।
अलेक्जेंडर बर्ड

खैर आप जो जोड़ते हैं उसे उठा सकते हैं! मैं जवाब अपडेट कर दूंगा।
डबलजॉश

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