क्या गिट में सिर्फ एक फाइल खींचना संभव है?


177

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

मुझे पता है कि मैं कर सकता हूं

git pull origin that_other_branch

लेकिन यह बहुत सारी अन्य फ़ाइलों को मर्ज करने का प्रयास करेगा, इसके लिए मैं अभी तैयार नहीं हूं।

क्या उस निर्दिष्ट शाखा से केवल निर्दिष्ट फ़ाइल (और सब कुछ नहीं) को खींचना और मर्ज करना संभव है?

यह सिर्फ एक फ़ाइल के लिए Git पुल अनुरोध का डुप्लिकेट नहीं है क्योंकि उस प्रश्न के सभी उत्तर किसी भी शाखाओं को बदले बिना, रिपॉजिटरी संस्करण में स्थानीय रूप से परिवर्तित फ़ाइल को कैसे वापस करना है।


7
मेरा मानना ​​है कि इस पृष्ठ की कोई भी प्रविष्टि प्रश्न का उत्तर नहीं देती है। प्रश्न का अर्थ है रिमोट सर्वर से सिर्फ एक फाइल को खींचना, सभी फाइलों को खींचना नहीं है और स्थानीय रूप से सिर्फ एक की जांच करना है। इसलिए प्रश्न को फिर से किया जाना चाहिए, या चयनित उत्तर प्रश्न के समाधान के रूप में चिन्हित किया जाना चाहिए।
mljrg

जवाबों:


153

आप इस तरह से केवल एक फ़ाइल प्राप्त कर सकते हैं:

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit

git checkoutकमांड के बारे में : <revision> - एक शाखा का नाम, यानी origin/master <yourfilepath>रिपॉजिटरी नाम शामिल नहीं है (कि आप copy pathGitHub पर एक फ़ाइल पृष्ठ पर बटन पर क्लिक करके प्राप्त कर सकते हैं ), अर्थातREADME.md


23
हैश कोड द्वारा आवश्यक एम-स्विच को जीआईटी शाखा -v के साथ मुद्रित किया जा सकता है। बहुत बढ़िया!
ऑड्रियस मेसकॉस्कस

2
अति उत्कृष्ट। इससे मुझे एक से अधिक अवसरों पर मदद मिली है। स्पष्ट करने के लिए, एम-ध्वज उस कमिट के हैश से खुश लगता है जिससे आप अपनी सिंगल फाइल खींचना चाहते हैं।
rd108

1
यह मेरे लिए भी काम किया। हालाँकि, मैंने प्रत्यावर्तन खोजने के लिए अपनी दूरस्थ शाखा पर git लॉग चलाया: उदाहरण के लिए $ git लॉग रेमो / मूल / मास्टर
Dan

6
क्या अन्य फ़ाइलों को खींचने के बिना विशिष्ट फ़ाइल खींचना संभव है?
अच्छा महसूस करें और

3
@aleroot क्या करता है <संशोधन> का मतलब है?
वकन टांका

240

यहाँ थोड़ा आसान तरीका है जो मैंने अभी इस पर शोध किया है:

git fetch {remote}
git checkout FETCH_HEAD -- {file}

4
घातक: अमान्य संदर्भ: FETCH_HEAD
एंटनी

4
इस उत्तर में संभवतः एक कार्यशील उदाहरण का अभाव है। यह स्पष्ट नहीं है कि अगर किसी को अगले करने की आवश्यकता है।
Dr_Zaszuś

@ अगर हमें शाखा में पहले से ही है तो क्या हमें {रिमोट} की आवश्यकता है? यदि हाँ, तो क्यों?
क्लाउड चो

2
पुल के समान नहीं, जो मर्ज का प्रयास करेगा, यही कारण है कि हम पुल का उपयोग करना चाहते हैं।
जोसेफ

22
git checkout master -- myplugin.js

मास्टर = शाखा का नाम

myplugin.js = फ़ाइल नाम


और वहाँ वापस लौटने के लिए एक रास्ता है?
liyuan

1
इससे पहले 'git pull' को मत भूलना;)
matson kepson

16

@ मावार्डी के जवाब ने मेरे लिए काम किया, लेकिन मेरे बदलाव दूरस्थ थे इसलिए मुझे मूल निर्दिष्ट करना पड़ा

git checkout origin/master -- {filename}

2

हां, यहां प्रक्रिया है:

# Navigate to a directory and initiate a local repository
git init        

# Add remote repository to be tracked for changes:   
git remote add origin https://github.com/username/repository_name.git

# Track all changes made on above remote repository
# This will show files on remote repository not available on local repository
git fetch

# Add file present in staging area for checkout
git check origin/master -m /path/to/file
# NOTE: /path/to/file is a relative path from repository_name
git add /path/to/file

# Verify track of file(s) being committed to local repository
git status

# Commit to local repository
git commit -m "commit message"

# You may perform a final check of the staging area again with git status
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.