2011-02-02 7 views
39

git status फ़ाइलों का एक समूह दिखाता है जो संशोधित किए गए थे और कुछ जिन्हें हटा दिया गया था। मैं पहले संशोधित फ़ाइलों और फिर हटाए गए लोगों को प्रतिबद्ध करना चाहता हूं। मुझे git add में कोई विकल्प नहीं दिख रहा है जो मुझे ऐसा करने में सक्षम बनाता है। मैं यह कैसे कर सकता हूं?केवल संशोधित (और नई या हटाई गई) फ़ाइलों को कैसे प्रतिबद्ध किया जाए?

संपादित: जैसा कि बताया, git add मंचन नहीं होता हटाई गई फ़ाइलों वैसे भी, इसलिए git add . करना होगा। लेकिन इसका उन फाइलों को शामिल करने का दुष्प्रभाव है जिन्हें ट्रैक नहीं किया गया था, जिसे मैं टालना भी चाहूंगा। मैंने तदनुसार प्रश्न का शीर्षक बदल दिया है।

उत्तर

58

निम्न आदेश चाल करना चाहिए:

git commit -a 

या

git commit -am "commit message" 
Pro Git किताब से

:

Git करने के लिए -एक विकल्प उपलब्ध कराना आदेश प्रतिबद्ध Git बनाता है प्रतिबद्धता

करने से पहले पहले से ट्रैक की गई प्रत्येक फ़ाइल को स्वचालित रूप से चरणबद्ध करें
+0

क्या मल्टीप्लेक्स झंडे का उपयोग करने के लिए कोई नकारात्मक पक्ष है ताकि संदेश भी जोड़ा जा सके? उदाहरण के लिए गिट प्रतिबद्ध- "अद्यतन फ़ाइलें" – sayth

+1

@sayth, इस मामले में, कोई नकारात्मकता नहीं है। यह वरीयता का मामला है - कोई व्यक्ति प्रतिबद्ध संदेश लिखने के लिए एक टेक्स्ट एडिटर का उपयोग करना चाहता है। – tokarev

+3

यह सवाल का जवाब नहीं देता है। इन दोनों में शामिल होंगे: संशोधित और हटाए गए फाइलें। यह पूरी तरह से गलत है और हटा दिया जाना चाहिए। –

30

git diff --name-only --diff-filter=M | xargs git add

(Charles Bailey's answer on a related question के आधार पर)

+7

संशोधित फ़ाइलों को धक्का देने के लिए इतना कुछ करने के लिए यह थोड़ा बोझिल है। क्या आपको नहीं लगता? – Cherian

+2

@ चेरियन कोई इस – user151841

3

मैं कुछ लेकिन Git ऐड गायब हो सकता है नष्ट कर दिया फ़ाइलों को शामिल नहीं करता है, तो आप उन दूर करने के लिए Git rm का उपयोग करना होगा:

mkdir git-test 
cd git-test 
git init 
touch a 
touch b 
touch c 
git add . 
git commit -m "Initial" 
echo "a" > a 
echo "b" > b 
rm c 
git status 

# On branch master 
# Changed but not updated: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: a 
#  modified: b 
#  deleted: c 
# 

git add . 

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: a 
#  modified: b 
# 
# Changed but not updated: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: c 
# 

git commit -m "Changed" 
git status 

# On branch master 
# Changed but not updated: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: c 
# 

git rm c 
git commit -m "Deleted" 

और गिट लॉग तीन काम करता है।

+0

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

+0

क्या आप अभी भी उन अनचाहे फ़ाइलों को जोड़ना चाहते हैं? यदि नहीं, तो आप उन्हें .gitignore फ़ाइल में जोड़ सकते हैं। – Makis

+0

मुझे नहीं पता था .gitignore, धन्यवाद। मेरी वर्तमान आवश्यकता केवल कामों को व्यवस्थित करने के लिए है ताकि वे वास्तव में एक परमाणु संचालन को प्रतिबिंबित कर सकें (उदा। "निश्चित बग" को "अतिरिक्त सुविधा" से अलग किया गया है), इसलिए इन फ़ाइलों को भविष्य में किसी बिंदु पर किया जाएगा। –

0

मैं Git प्रतिबद्ध -एक का उपयोग कर के साथ सावधान रहना होगा - जब तक आप सुनिश्चित करें कि आपके .gitignore फ़ाइल है कि आप वहाँ जोड़ा नहीं करना चाहते

मैं Git का इस्तेमाल किया है कई बार -एक प्रतिबद्ध सभी फ़ाइलों है बना दिया है क्षेत्रों में जहां यह स्थिति नहीं था, और मैं साफ

+2

नहीं, यह 'गिट प्रतिबद्ध नहीं है' - यह किसने किया। 'गिट प्रतिबद्ध-ए' * नई फाइलें नहीं जोड़ता है, यह सिर्फ पहले से ट्रैक की गई फ़ाइलों में सभी बदलाव करता है। शायद आप इस स्थिति में समाप्त होने के लिए 'गिट एड' चला चुके हैं। –

13

आप इस्तेमाल कर सकते हैं Git भंडार से अस्थायी फ़ाइलें आदि को नष्ट/करने के लिए समाप्त हो गया:

git add -u 

पहले से ही मंच फ़ाइलों को संशोधित किया गया है पर नज़र रखी करने के लिए आखिरी प्रतिबद्धता के बाद से।

git-add आदमी पृष्ठ से:

-u
--update

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

हालांकि यह सुविधा तब भी शामिल नहीं है जब यह सुविधा जोड़ा गया हो।

+0

'गिट एड' फाइलें 'प्रतिबद्ध' होगी ?! –

+0

@AlexisWilke नहीं, लेकिन यह स्टेजिंग क्षेत्र में फाइलें जोड़ देगा, जिससे उन्हें आपकी वर्तमान चेक-आउट शाखा में एक नई प्रतिबद्धता के लिए तैयार किया जा सकेगा। आपको बाद में 'गिट प्रतिबद्ध' के साथ चरणबद्ध परिवर्तन करने की आवश्यकता होगी। –

+2

'git add -u; गिट प्रतिबद्ध 'अनिवार्य रूप से 'गिट प्रतिबद्ध-ए' के बराबर है। यह फ़ाइल हटाने को प्रतिबद्ध करेगा, इसलिए यह सवाल का जवाब नहीं देता है। –

संबंधित मुद्दे