निम्न कार्यशील ट्री ट्री फ़ाइलों को मर्ज द्वारा अधिलेखित कर दिया जाएगा, लेकिन मुझे परवाह नहीं है


344

अपनी शाखा में मेरे पास .gitignore की कुछ फाइलें थीं

एक अलग शाखा पर वे फाइलें नहीं हैं।

मैं अलग-अलग शाखा को खदान में मिलाना चाहता हूं, और मुझे परवाह नहीं है कि उन फाइलों को अब नजरअंदाज नहीं किया गया है या नहीं।

दुर्भाग्य से मुझे यह मिलता है:

निम्न अनुपयोगी कार्यशील ट्री फ़ाइलों को मर्ज द्वारा अधिलेखित कर दिया जाएगा

मैं उन फ़ाइलों को अधिलेखित करने के लिए अपने पुल कमांड को कैसे संशोधित करूंगा, बिना मुझे उन फ़ाइलों को खोजने, स्थानांतरित करने या हटाने के लिए?





1
यह सबसे अच्छा उत्तर है क्योंकि यह केवल उन फ़ाइलों को हटा देगा जो आपको विलय से रोक रही हैं: stackoverflow.com/a/52255219/551045
RedX

जवाबों:


537

समस्या यह है कि आप फ़ाइलों को स्थानीय रूप से ट्रैक नहीं कर रहे हैं लेकिन समान फ़ाइलों को दूरस्थ रूप से ट्रैक किया जाता है ताकि "पुल" करने के लिए आपका सिस्टम स्थानीय फ़ाइलों को अधिलेखित करने के लिए मजबूर हो जाए जो संस्करण नियंत्रित नहीं हैं।

दौड़ने की कोशिश करो

git add * 
git stash
git pull

यह सभी फ़ाइलों को ट्रैक करेगा, उन फ़ाइलों में आपके सभी स्थानीय परिवर्तन हटा देगा, और फिर सर्वर से फाइलें प्राप्त करेगा।


59
git add -A .; git stashमेरे लिए काम किया। git add *संस्करण को नजरअंदाज कर दिया रास्तों के बारे में शिकायत की।
imsky

11
मैंने git add, git stash, git pull की कोशिश की। यह काम किया है, लेकिन मैं अभी भी न क्यों?
ARK

1
मेरे लिए, मेरे पास एक दूरस्थ फ़ाइल थी जिसे ट्रैक किया गया था और मेरे स्थानीय रेपो में उसी नाम की एक फ़ाइल थी जो अनट्रैक थी। इसलिए, यदि आप परिवर्तनों को छिपाने के लिए स्थानीय फ़ाइल जोड़ते हैं और फिर खींचते हैं, तो दूरस्थ फ़ाइल को स्थानीय फ़ाइल को अधिलेखित करना चाहिए।
यूज़र फॉग

2
यहां यह समझने के लिए एक अच्छा लिंक है कि यह कैसे काम करता है, अगर कोई दिलचस्पी रखता है। git-scm.com/book/en/v1/Git-Tools-Stashing
जेम्स एम लेटाओ

2
//, यह वास्तव में वास्तव में इस त्रुटि के उद्देश्य से बहुत दूर नहीं जाता है।
नाथन बासानी

137

आप स्थानीय से अनट्रैक फ़ाइलों को साफ़ करने के लिए कमांड का प्रयास कर सकते हैं

2.11 और नए संस्करण प्राप्त करें:

git clean  -d  -f .

Git के पुराने संस्करण:

git clean  -d  -f ""

जहां -dनिम्नलिखित के साथ प्रतिस्थापित किया जा सकता है:

  • -x Git के लिए अज्ञात फ़ाइलों के साथ-साथ उपेक्षित फ़ाइलों को भी हटा दिया जाता है।

  • -d अनटैक की गई फ़ाइलों के अलावा अनट्रैकड डायरेक्टरी को हटा दें।

  • -f इसे चलाने के लिए बाध्य करना आवश्यक है।

यहाँ लिंक है कि के रूप में अच्छी तरह से उपयोगी हो सकता है।


23
मैं -iइंटरैक्टिव मोड के लिए जोड़ना होगा । अनचाहे डायरेक्टरी को हटाने के साथ-साथ मैंने प्रोजेक्ट के लिए अपनी यूजर सेटिंग्स को भी डिलीट कर दिया है :-(
डम्बलड

6
यह टिप्पणियों के माध्यम से एक समान जवाब देने के लिए स्कैन करने योग्य है क्योंकि इससे -xचोट लग सकती है।
dumbledad

10
लेकिन यह बहुत खतरनाक है, और अनुचित कार्य नहीं है !! आप बहुत सारी फाइलें खो सकते हैं! सावधान रहे!!
मोहम्मद कावसरा

16
इसने स्लिम फ्रेमवर्क पर मेरे सभी विक्रेता निर्देशिका को हटा दिया । इस कॉम के साथ बहुत सावधान रहना चाहिए
रूसो

2
आपको अपने उत्तर से 'x' हटा देना चाहिए। यह बहुत खतरनाक है!
कर्ल 3

106

मेरे लिए काम करने वाले एकमात्र आदेश थे:

git fetch --all
git reset --hard origin/{{your branch name}}

5
यह ध्यान दिया जाना चाहिए कि इस उत्तर की आवश्यकता है यदि आपने सबमोडुल्स को हटा दिया है और उन्हें मूल रेपो में पुस्तकालयों के रूप में पढ़ा है। मुझे एक उत्तर की आवश्यकता थी और यह सब काम कर रहा था।
राउटरिनेटर

मेरे पास सबमॉड्यूल्स नहीं थे, और अन्य उत्तरों में सुझाए गए अनुसार क्लीन और गिट स्टैश की कोशिश की, लेकिन इससे केवल मदद मिली।
kslstn 7

विभिन्न प्रकार के सबमॉडल्स को साफ़ करने के बाद यह एकमात्र ऐसी चीज़ थी जो मेरे लिए भी काम करती थी। विशेष नोट में, मेरे पास केस संवेदनशीलता के साथ-साथ एक फाइल पर भी समस्या थी। पूर्व। संगीतकार से मेरे विक्रेता फ़ोल्डर में XML.php से Xml.php।
काजाझोडो

1
इसने मेरे लिए भी काम किया। क्या आप बता सकते हैं कि क्या चल रहा है? मुझे नहीं मिला।
दिमित्रीस करमनीस 15

1
इसने मेरे दो स्थानीय कमिट डिलीट कर दिए, इसे इस्तेमाल करने से पहले ध्यान रखें!
डेविड सियान

27

git mergeउस के लिए एक प्रतिस्थापन अनपेक्षित फ़ाइलों को अधिलेखित कर देगा

नीचे दी गई टिप्पणियाँ 'एफओआई' का उपयोग 'ब्याज की फाइलें', फाइलों के लिए करती हैं

  • दाता शाखा में मौजूद है,
  • प्राप्त शाखा में मौजूद नहीं है,
  • और मर्ज को रोक रहे हैं क्योंकि वे आपके वर्किंग डायरेक्टरी में मौजूद और अनट्रैक हैं।
git checkout -f donor-branch   # replace FOI with tracked `donor` versions
git checkout receiving-branch  # FOI are not in `receiving`, so they disapppear
git merge donor-branch  # now the merge works

git pullउस के लिए एक प्रतिस्थापन अनपेक्षित फ़ाइलों को अधिलेखित कर देगा

pull = fetch + merge, इसलिए हम ऊपर दिए git fetchगए git checkout -f, git checkout, git mergeट्रिक को फॉलो करते हैं।

git fetch origin  # fetch remote commits
git checkout -f origin/mybranch  # replace FOI with tracked upstream versions
git checkout mybranch  # FOI are not in mybranch, so they disapppear
git merge origin/mybranch  # Now the merge works. fetch + merge completes the pull.

विस्तृत विवरण

git merge -fमौजूद नहीं है, लेकिन git checkout -fकरता है।

हम ब्याज की फ़ाइलों को निकालने के लिए git checkout -f+ git checkout(ऊपर देखें) का उपयोग करेंगे , और फिर आपका मर्ज सामान्य रूप से आगे बढ़ सकता है।

चरण 1. यह चरण दाता शाखा के ट्रैक किए गए संस्करणों के साथ जबरन एफओआई की जगह लेता है (यह दाता शाखा की जांच भी करता है, और बाकी कामकाजी डायर को अद्यतन करता है)।

git checkout -f donor-branch

चरण 2. यह चरण एफओआई को हटा देता है क्योंकि उन्हें हमारी वर्तमान (दाता) शाखा में ट्रैक किया जाता है, और receiving-branchहम स्विच में अनुपस्थित हैं ।

git checkout receiving-branch

चरण 3. अब जब कि एफओआई अनुपस्थित है, दाता शाखा में विलय करने से किसी भी अनटैक की गई फ़ाइलों को अधिलेखित नहीं किया जाएगा, इसलिए हमें कोई त्रुटि नहीं मिलती है।

git merge donor-branch

3
यह 7 वें या 8 वें उत्तर होने के लिए बहुत साफ है!
मेजर डीएच

1
धन्यवाद, @MajedDH, आपने मेरा दिन बना दिया! <3
एस्टीस

1
यहीं पर मैं देख रहा था इंस्टाफिक्स! साभार
AFM-Horizon

प्रसन्न होकर, आपने @ AFM-Horizon मदद की है!
एस्टीस

20

सभी अनट्रैक की गई फ़ाइलें निकालें:

git clean  -d  -fx .

8
किसी प्रोजेक्ट में संभवतः उपयोग की गई फ़ाइलों को हटाना वास्तविक समाधान नहीं होना चाहिए
Erdinç borbacı

4
yike

18

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

सुनिश्चित करें कि गलती से भी आप अभी भी जरूरत नहीं है कि हटाए गए फ़ाइल को हटा दें;)


15

आप उस कमांड को आजमा सकते हैं

git clean -df

5
अनुपयोगी निर्देशिकाओं को हटाने का क्या उपयोग है? .. वे मूल्यवान हो सकते हैं, आप जानते हैं।
zhekaus

क्या आप बता सकते हैं कि यह क्या करता है ??
सफाक ओजकान

12

अद्यतन - एक बेहतर संस्करण

यह उपकरण ( https://github.com/mklepaczewski/git-clean-before-merge ) होगा:

  • उन फ़ाइलों को हटा दें जो उनके git pullसमकक्षों के समान हैं,
  • उन संशोधित फ़ाइलों में परिवर्तन करना जो संशोधित संस्करण उनके git pullसमकक्षों के समान हैं;
  • संशोधित / अनटैक की गई फ़ाइलों की रिपोर्ट करें जो उनके अलग-अलग हैं git pull संस्करण ,
  • टूल में वह --pretendविकल्प है जो किसी भी फाइल को संशोधित नहीं करेगा।

पुराना संस्करण

यह उत्तर अन्य उत्तरों से कैसे भिन्न है?

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

समाधान

यह स्निपेट उन सभी अनट्रैक की गई फ़ाइलों को निकालेगा, जिन्हें ओवरराइट करके git pullउन्हें हटा दिया जाएगा।

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"

और फिर बस करो:

git pull

यह चीनी मिट्टी के बरतन कमांड नहीं है, इसलिए हमेशा डबल चेक करें कि यह क्या करेगा:

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"

स्पष्टीकरण - क्योंकि एक लाइनर डरावना है:

यहां यह बताया गया है कि यह क्या करता है:

  1. git pull 2>&1- git pullआउटपुट कैप्चर करें और इसे सभी को पुनः निर्देशित करें ताकि हम आसानी से इसे पकड़ सकें grep
  2. grep -E '^\s - आशय यह है कि जिन फ़ाइलों को अधिलेखित कर दिया जाएगा, उनकी सूची को कैप्चर करना git pull । फ़ाइल नाम उनके सामने व्हॉट्सएप पात्रों का एक समूह है, इसलिए हम उन्हें प्राप्त करने के लिए इसका उपयोग करते हैं।
  3. cut -f2- - 2 में कैप्चर की गई प्रत्येक पंक्ति की शुरुआत से व्हाट्सएप को हटा दें।
  4. xargs -I {} rm -rf "{}"- हमें xargsसभी फ़ाइलों पर पुनरावृत्ति करने के लिए, "{}" में उनका नाम सहेजें और rmउनमें से प्रत्येक के लिए कॉल करें। हम -rfअनट्रेंड निर्देशिकाओं को हटाने और हटाने के लिए उपयोग करते हैं ।

यह चरण 1-3 को चीनी मिट्टी के बरतन कमांड के साथ बदलने के लिए बहुत अच्छा होगा, लेकिन मुझे किसी भी समकक्ष के बारे में पता नहीं है।


धन्यवाद, मेरी प्रायः मेरी कार्यशील निर्देशिका में ऐसी फाइलें नहीं हैं जिन्हें मैं नष्ट या प्रतिबद्ध नहीं करना चाहता। मेरे मामले में मैं स्थानापन्न करने की जरूरत git pullके साथgit checkout <branch_name>
mihow

6

यदि आप -fध्वज का उपयोग करने पर विचार करते हैं, तो आप इसे पहले ड्राई-रन के रूप में चला सकते हैं। बस आपको यह पता है कि आप किस तरह की दिलचस्प स्थिति का सामना करेंगे

-n 
--dry-run 
    Don’t actually remove anything, just show what would be done.

6

यदि आप फ़ाइल को निर्दिष्ट करके उनकी ज़रूरत नहीं है, तो स्वीकृत उत्तर के अलावा आप निश्चित रूप से फ़ाइलों को हटा सकते हैं:

git clean -f '/path/to/file/'

याद रखें कि इसे पहले एन-फ्लैग के साथ चलाएं अगर आप यह देखना चाहते हैं कि कौन सी फाइल साफ होगी। ध्यान दें कि ये फ़ाइलें हटा दी जाएंगी। मेरे मामले में मैंने वैसे भी उनकी परवाह नहीं की, इसलिए यह मेरे लिए एक बेहतर समाधान था।


5

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

git add -A
git stash
git pull

आप इस कमांड का उपयोग करके अपनी स्थानीय स्टैक्ड फ़ाइलों की जाँच कर सकते हैं - git stash list


4

जो नहीं जानते हैं, उनके लिए अपरकेस / लोअरकेस नाम के अंतर को फाइलों और फ़ोल्डरों में अनदेखा कर देता है। यह एक बुरा सपना बन जाता है जब आप उन्हें एक ही नाम के साथ एक अलग मामले में नाम देते हैं।

मुझे इस मुद्दे का सामना करना पड़ा जब मैंने एक फ़ोल्डर का नाम "पेटस्टोर" से "पेटस्टोर" (अपरकेस टू लोअरकेस) कर दिया। मैंने मामले को नज़रअंदाज़ करने, बदलाव करने से रोकने के लिए अपनी .it / config फाइल को एडिट किया, मेरे कमिट्स को तोड़ दिया, और एक अलग ब्रांच में जाने के लिए मेरे बदलावों को टाल दिया। मैं इस अन्य शाखा में अपने अटके हुए परिवर्तनों को लागू नहीं कर सका।

मुझे जो ठीक लगा, वह काम अस्थायी रूप से फिर से मामले को नजरअंदाज करने के लिए मेरी .it / config फाइल को अस्थायी रूप से संपादित करने के लिए था। इसके कारण git stash applyसफलता मिली। फिर, मैंने अनदेखा कर दिया वापस कैससे false। मैंने तब सब कुछ जोड़ा, जो कि बिना किसी कारण के, अजीब ढंग से दावा किया गया था कि पेटस्टोर फ़ोल्डर में नई फ़ाइलों को छोड़कर। मैंने अपने बदलाव किए, फिर git reset --hard HEADउन नई फ़ाइलों से छुटकारा पाने के लिए दौड़ा । मेरी प्रतिबद्धता बिल्कुल अपेक्षित रूप से दिखाई दी: फ़ोल्डर में फ़ाइलों का नाम बदल दिया गया।

मुझे आशा है कि इससे आपको मेरे बुरे सपने से बचने में मदद मिलेगी।


मेरे लिए काम नहीं किया। मैंने फ़ोल्डर की सभी फाइलें हटा दी हैं। तब git pull -fतब git checkout .। कितना बुरा सपना।
m.rufca

वास्तव में? इसने कुछ हफ्ते पहले ही मेरे लिए काम किया। क्या आपने अपनी gitconfig फ़ाइल को संपादित करने का प्रयास किया है ताकि मामले को अनदेखा करना बंद कर दिया जाए?
ए। डेविडसन

धन्यवाद। फ़ोल्डर पथ में आवरण को ठीक करने के बाद मुझे मास्टर से विलय करने की आवश्यकता थी। मैं इसे पहले ही मामले की संवेदनशीलता को फिर से सक्षम करने के बाद, मुझे इस मामले को गंभीरता से अनदेखा करने के साथ विलय करने में सक्षम था।
रुबेनिज्म

3

मेरे लिए न तो साफ / रीसेट / हार्ड चेकआउट / रिबास ने काम किया।

इसलिए मैंने अभी उन फ़ाइलों को हटा दिया है जिनके बारे में शिकायत *

rm /path/to/files/that/git/complained/about

* मैंने जाँच की कि क्या यह फाइल एक अलग फोल्डर में एकदम नए रेपो की जाँच करके निकाली जा सकती है (फाइलें नहीं थीं)


1

मेरे मामले में जब मुझे यह समस्या थी। मेरे पास एक स्थानीय फाइल थी जिसे मैंने रिमोट पर बदल दिया था।

git pullGit की कोशिश करते समय मुझे बताया गया कि नया फ़ाइल नाम ट्रैक नहीं किया गया था - जो कि यह रिमोट पर था, हालांकि यह अभी तक स्थानीय पर मौजूद नहीं था।

क्योंकि स्थानीय स्तर पर मैं इसका कोई उदाहरण नहीं दे सकता git pullथा जब तक कि मैं पुराने फ़ाइलनाम git rmपर नहीं कर सकता था (जो नाम बदलने के मेरे बेवकूफ विचार के कारण पहली बार में स्पष्ट नहीं था)।


0

यदि आपके पास .gitignore के नीचे लिखी फाइलें हैं, तो फाइलें हटा दें और फिर से git पुल चलाएं। इससे मुझे मदद मिली।


0

समस्या तब है जब हमारे पास आने वाले बदलाव हैं जो अनट्रैक फ़ाइल को मर्ज कर देगा, गिट शिकायत करता है। इन आदेशों ने मेरी मदद की:

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