मैं केवल कुछ फाइलें कैसे कर सकता हूं?


259

मेरे पास दो प्रोजेक्ट हैं। एक "आधिकारिक" परियोजना है और दूसरा एक प्रकाश संशोधन (कुछ फाइलें जोड़ी गई) हैं। मैंने नई शाखा बनाई और मैंने उनके लिए नई फाइलें रखीं। लेकिन विकास के दौरान दोनों शाखाओं में आम कुछ फाइलें बदल जाती हैं।

मैं केवल इन फ़ाइलों को कैसे करूँ?


क्या वे दो परियोजनाएं एक ही गिट रिपॉजिटरी से जुड़ी हैं?
ऑलेक्ज़ेंडर

हां, यह वही रिपॉजिटरी है, लेकिन मैं अपनी शाखा को सर्वर पर नहीं रखना चाहता हूं
निप्स

तो आप अपनी नई शाखा को मास्टर (या अन्य आधिकारिक शाखा) में विलय क्यों नहीं करते हैं
ऑलेक्ज़ेंडर

1
इन सवालों के जवाब आपको मदद करेंगे: stackoverflow.com/questions/7161860/… stackoverflow.com/questions/7175869/…
eckes

जवाबों:


261

मुझे लगता है कि आप एक शाखा में परिवर्तन करना चाहते हैं और फिर उन परिवर्तनों को दूसरी शाखा में दिखाई देते हैं। Git में आपको शाखाओं को बदलते समय HEAD के शीर्ष पर कोई परिवर्तन नहीं करना चाहिए।

आप केवल बदली गई फ़ाइलों को कमिट करते हैं:

git commit [some files]

या यदि आप सुनिश्चित हैं कि आपके पास एक साफ मंचन क्षेत्र है जो आप कर सकते हैं

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

यदि आप उस शाखा को उपलब्ध कराना चाहते हैं जो आप करते हैं

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again

22
वस्तुतः केवल उन फ़ाइलों को करने के लिए, भले ही अन्य परिवर्तनों का मंचन किया गया हो, दूसरा उदाहरण ( git commit [some files], जिसका अर्थ --onlyस्विच है) का उपयोग किया जाना चाहिए। पहला उदाहरण ( git add [some files]इसके बाद git commit) कोई अन्य परिवर्तन भी करेगा जिसका मंचन किया गया था।
लेक्सिकोस

4
मैं जीआईटी कमिट [कुछ फाइलों] के लिए उदाहरण प्रदान करने में सहायक होगा। जैसे कि आपको [कुछ फ़ाइलों], अल्पविराम, सफेद स्थान को कैसे बदलना चाहिए?
क्लॉडिउ क्रेगना

2
@claudiu आमतौर पर शेल सामान अंतरिक्ष सीमांकित है। और अगर आप गहरी गोता लगाते हैं तो आप कुछ भी बदल सकते हैं
एलेक्स

यदि आप कुछ उदाहरण जोड़ सकते हैं, तो यह उत्तर बहुत अच्छा होगा।
यमूर

154

उन फ़ाइलों की सूची प्राप्त करें जिन्हें आप कमिट करना चाहते हैं

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

मचान में फ़ाइलें जोड़ें

$ git add file1 file2

यह देखने के लिए जांचें कि आप क्या कर रहे हैं

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

फ़ाइलों को एक प्रतिबद्ध संदेश के साथ प्रतिबद्ध करें

$ git commit -m "Fixed files 1 and 2"

यदि आप गलती से गलत फाइल करते हैं

$ git reset --soft HEAD~1

यदि आप फ़ाइलों को अस्थिर करना चाहते हैं और शुरू करना चाहते हैं

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4


30

इसमें से कुछ "अधूरा" लगता है

लोगों के समूहों को पता नहीं चल रहा है कि क्या उन्हें उद्धरण आदि का उपयोग करना चाहिए।

स्थान पथ दिखाने के साथ ही 1 विशिष्ट फ़ाइल जोड़ें

git add JobManager/Controllers/APIs/ProfileApiController.cs

प्रतिबद्ध (याद रखें, प्रतिबद्ध केवल स्थानीय है, यह किसी अन्य प्रणाली को प्रभावित नहीं कर रहा है)

git commit -m "your message"  

रिमोट रेपो के लिए धक्का

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

अन्य उत्तर (एस) स्टैश आदि को दर्शाते हैं जो आप कभी-कभी करना चाहते हैं


11

यदि आपने पहले ही फ़ाइलों का मंचन कर लिया है, तो बस उन्हें अस्थिर करें:

git reset HEAD [file-name-A.ext] [file-name-B.ext]

फिर उन्हें थोड़ा सा पीछे से जोड़ दें।


11

मान लीजिए कि आपने कई फ़ाइलों में परिवर्तन किए हैं, जैसे:

  • file1
  • करें 2
  • file3
  • File4
  • File5

लेकिन आप File1 और File3 के केवल परिवर्तन करना चाहते हैं।

ऐसा करने के दो तरीके हैं:

1. उपयोग केवल इन दो फ़ाइलों,

git add file1 file2

फिर, प्रतिबद्ध

git commit -m "your message"

फिर धक्का,

git push

2. अप्रत्यक्ष प्रतिबद्ध

git commit file1 file3 -m "my message"

फिर धक्का,

git push

वास्तव में पहला तरीका उस स्थिति में उपयोगी है जब हम फाइलों को नियमित रूप से संशोधित कर रहे हैं और उनका मंचन कर रहे हैं -> बड़े प्रोजेक्ट, आमतौर पर लाइव प्रोजेक्ट।
लेकिन अगर हम फाइलों को संशोधित कर रहे हैं और उनका मंचन नहीं कर रहे हैं तो हम डायरेक्ट कमिट -> छोटे प्रोजेक्ट कर सकते हैं


जब आप फ़ाइल नाम निर्दिष्ट नहीं कर रहे हैं जैसा कि आप दूसरे उदाहरण से पता चलता है, git इन तर्कों के लिए कमांड ध्वज को मानता है --only। फिर, यह संदर्भ के git commit --only file1 --only file3 -m "my message"रूप में शॉर्टकट के रूप में या का उपयोग करते हुए समान कमांड होगा git commit -o file1 -o file3 -m "my message": git-scm.com/docs/git-commit
उपयोगकर्ता

0

यदि आपके पास बहुत अधिक कोड परिवर्तन नहीं हैं, तो यह एक सरल तरीका है:

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

फिर यदि आप चाहते हैं कि आपके द्वारा हटाया गया कोड (बिट्स जो आपने कमिट नहीं किया है) एक अलग कमेटी या किसी अन्य शाखा में है, तो इस शाखा पर अभी भी है:

5. git stash apply
6. git stash

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

जैसा कि चरण 6 में कोड का एक स्टैश है जिसे आप [नहीं करना चाहते हैं], जैसा कि आप शायद उन परिवर्तनों को सही रूप से खोना नहीं चाहते हैं? तो स्टेप 6 से नया स्टैश अब इस या किसी अन्य ब्रांच के लिए किया जा सकता है, जो सही ब्रांच पर लागू होता है और कमिट करता है।

स्पष्ट रूप से यह माना जाता है कि आप चरणों को एक प्रवाह में करते हैं, यदि आप इन चरणों में किसी अन्य बिंदु पर टकराते हैं, तो आपको ऊपर दिए गए प्रत्येक चरण के लिए स्टैश रिफ को नोट करने की आवश्यकता होगी (बजाय केवल मूल स्लैश और सबसे हाल ही के स्लैश को लागू करने के लिए)।

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