নিম্নলিখিত অবিরত কর্মক্ষম গাছের ফাইলগুলি মার্জ করে ওভাররাইট করা হবে, তবে আমি যত্ন করি না


343

আমার শাখায় আমার .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
আমি গিট অ্যাড।, গিট স্ট্যাশ, গিট টানতে চেষ্টা করেছি। এটি কাজ করেছে, কিন্তু আমি এখনও কেন পাই না?
আরকে

1
আমার জন্য, আমার কাছে একটি রিমোট ফাইল ছিল যা ট্র্যাক হয়েছিল এবং আমার স্থানীয় রেপোতে একই নামের একটি ফাইল ছিল যা ট্র্যাক করা হয়নি। সুতরাং, আপনি যদি স্থানীয় ফাইলগুলি সংশোধন করে পরিবর্তনগুলি যোগ করেন এবং তারপরে টানুন, দূরবর্তী ফাইলটি স্থানীয় ফাইলটি ওভাররাইট করা উচিত।
ইউজারফগ

2
যদি কেউ আগ্রহী হয় তবে এটি কীভাবে কাজ করে তা বোঝার জন্য এখানে একটি ভাল লিঙ্ক। git-scm.com/book/en/v1/Git- টুলস- স্ট্যাশিং
জেমস এম। লে

2
//, এটি সত্যই এই ত্রুটির উদ্দেশ্যটিতে খুব বেশি যায় না।
নাথান বাসানিজ

137

স্থানীয় থেকে তালাবিহীন ফাইলগুলি সাফ করার জন্য আপনি কমান্ড চেষ্টা করতে পারেন

গিট 2.11 এবং আরও নতুন সংস্করণ:

git clean  -d  -f .

গীতের পুরানো সংস্করণ:

git clean  -d  -f ""

-dনিম্নলিখিতগুলির সাথে কোথায় প্রতিস্থাপন করা যেতে পারে:

  • -x উপেক্ষা করা ফাইলগুলি যেমন গিটের অজানা ফাইলগুলিও সরানো হবে।

  • -d চিহ্নবিহীন ফাইলগুলি ছাড়াও তালিকাভুক্ত ডিরেক্টরিগুলি সরান।

  • -f এটি চালাতে বাধ্য করা প্রয়োজন।

এখানে সেই লিঙ্কটিও সহায়ক হতে পারে।


23
আমি -iইন্টারেক্টিভ মোডের জন্য যুক্ত করব । অযাচিত ডিরেক্টরি মুছে ফেলার পাশাপাশি আমি এই প্রকল্পের জন্য আমার ব্যবহারকারীর সেটিংসটিও মুছে ফেলেছি :-(
ডাম্বলডেড

6
মতামতগুলি যেমন আঘাত করতে পারে তেমন একটি উত্তরের মন্তব্যে স্ক্যান করার উপযুক্ত -x
ডাম্বলডেড

10
তবে এটি অত্যন্ত বিপজ্জনক, এবং অগ্রহণযোগ্য কাজ নয় !! আপনি অনেক ফাইল হারাতে পারেন! সাবধান হও!!
মোহাম্মদ কাওসারা

16
এটি স্লিম ফ্রেমওয়ার্কে আমার সমস্ত বিক্রেতা ডিরেক্টরি মুছে ফেলেছেএই কমান্ডের সঙ্গে খুব সতরক হও
RousseauAlexandre

2
আপনার উত্তর থেকে আপনার 'x' মুছে ফেলা উচিত। এটা খুব বিপজ্জনক!
earl3s

106

আমার পক্ষে কাজ করা কেবলমাত্র আদেশগুলি ছিল:

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

5
এটি লক্ষ করা উচিত যে আপনি উত্তর মডেলগুলিকে সরিয়ে রেখে এবং মূল রেপোগুলিতে লাইব্রেরি হিসাবে পুনরায় সংযুক্ত করে যদি এই উত্তরটির প্রয়োজন হয়। আমার একটি উত্তর দরকার ছিল এবং এটিই কাজ করেছিল।
রুথিনেটর

আমার কাছে সাবমডিউলগুলি নেই, এবং অন্যান্য উত্তরের পরামর্শ অনুসারে গিট ক্লিন এবং গিট স্ট্যাশ চেষ্টা করেছি, তবে কেবল এটিই সাহায্য করেছিল।
kslstn

বিভিন্ন সাবমডিউলগুলি সাফ করার পরে এটি কেবল আমার জন্য কাজ করেছিল। বিশেষ দ্রষ্টব্য, আমার একটি ফাইলের ক্ষেত্রেও কেস সংবেদনশীলতা সমস্যা ছিল। যাত্রা। সুরকার থেকে আমার বিক্রেতা ফোল্ডারে XML.php থেকে XML.php।
কাজাজোডো

1
এটা খুবই আমার জন্য কাজ করেন। আপনি কি দয়া করে ব্যাখ্যা করতে পারেন কি চলছে? আমি পাই না।
দিমিত্রিস করমানিস

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. এই পদক্ষেপটি FOI কে সরিয়ে দেয় কারণ সেগুলি আমাদের বর্তমান (দাতা) শাখায় ট্র্যাক করা হয়েছে এবং receiving-branchআমরা পরিবর্তিত হয়েছি।

git checkout receiving-branch

পদক্ষেপ ৩. এখন যেহেতু এফওআই অনুপস্থিত, দাতা শাখায় মার্জ করা কোনও অচিহ্নযুক্ত ফাইলকে ওভাররাইট করতে পারবে না, তাই আমরা কোনও ত্রুটি পাই না।

git merge donor-branch

3
এটি 7 তম বা 8 ম উত্তর হতে খুব পরিষ্কার!
মাজেদ ডিএইচ

1
ধন্যবাদ, @ মাজেদডিএইচ, আপনি আমার দিনটি তৈরি করেছেন! <3
এস্তেইস

1
এই ঠিক এখানে আমি খুঁজছিলাম ইনস্টাফিক্স ছিল! ধন্যবাদ
এএফএম-দিগন্ত

আপনাকে সাহায্য করতে পেরে খুশি, @ এএফএম-হরিজন!
এস্তেইস


18

এটি যদি এককালীন ক্রিয়াকলাপ হয়, আপনি টান দেওয়ার আগে কার্যকারী ডিরেক্টরি থেকে সমস্ত চিহ্নবিহীন ফাইলগুলি সরিয়ে ফেলতে পারেন। পড়ুন বর্তমান গীত কাজ গাছ থেকে স্থানীয় (untracked) ফাইল মুছে ফেলার জন্য কিভাবে? সমস্ত আন-ল্যাক করা ফাইল কীভাবে সরানো যায় সে সম্পর্কিত তথ্যের জন্য।

আপনার এখনও প্রয়োজন এমন দুর্ঘটনাবশত অনক্রষ্ট ফাইলটি মুছে ফেলার বিষয়ে নিশ্চিত হন;)


15

আপনি যে কমান্ড চেষ্টা করতে পারেন

git clean -df

5
চিহ্নবিহীন ডিরেক্টরি মুছে ফেলার কী ব্যবহার? .. সেগুলি মূল্যবান হতে পারে, আপনি জানেন।
zhekaus

আপনি কি এটা কি ব্যাখ্যা করতে পারেন ??
সাফাক ওজকান

12

আপডেট - একটি ভাল সংস্করণ

এই সরঞ্জামটি ( https://github.com/mklepaczewski/git-clean-before- विसর ) করবে:

  • তাদের 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/'

আপনি কোন ফাইলটি গিট ক্লিনটি সরিয়ে ফেলবেন তা যদি দেখতে চান তবে প্রথমে এটি -n পতাকা দিয়ে চালানো মনে রাখবেন। নোট করুন যে এই ফাইলগুলি মুছে ফেলা হবে। আমার ক্ষেত্রে আমি যাইহোক তাদের সম্পর্কে যত্ন নিই না, সুতরাং এটি আমার পক্ষে আরও ভাল সমাধান ছিল।


5

এটি করার একটি উপায় হ'ল আপনাকে স্থানীয় পরিবর্তনগুলি পর্যালোচনা করে এবং দূরবর্তী রেপো থেকে টান। এইভাবে, আপনার স্থানীয় ফাইলগুলি হারাবেন না কারণ ফাইলগুলি স্ট্যাশগুলিতে চলে যাবে।

git add -A
git stash
git pull

আপনি এই কমান্ডটি ব্যবহার করে আপনার স্থানীয় স্ট্যাশ করা ফাইলগুলি পরীক্ষা করতে পারেন - git stash list


4

যারা জানেন না তাদের জন্য গিট ফাইল এবং ফোল্ডারে বড় হাতের / ছোট হাতের নামের পার্থক্য উপেক্ষা করে। আপনি কোনও ভিন্ন কেসের সাথে হুবহু একই নামের সাথে তাদের নাম পরিবর্তন করলে এটি দুঃস্বপ্নে পরিণত হয়।

আমি যখন "পেটস্টোর" থেকে একটি ফোল্ডারটির নাম "পেটস্টোর" (বড় হাতের থেকে ছোট হাতের) রাখলাম তখন আমি এই সমস্যার মুখোমুখি হয়েছি। কেস উপেক্ষা করা বন্ধ করে দেওয়ার জন্য, পরিবর্তনগুলি করা, আমার প্রতিশ্রুতি স্কোয়াশ করে দেওয়া এবং আমার পরিবর্তনগুলি অন্য একটি শাখায় স্থানান্তরিত করার জন্য আমি আমার .git / কনফিগার ফাইল সম্পাদনা করেছি। আমি আমার স্ট্যাশেড পরিবর্তনগুলি এই অন্যান্য শাখায় প্রয়োগ করতে পারি না।

আমি যে কাজটি স্থির করেছিলাম তা হ'ল সাময়িকভাবে কেসটিকে আবার উপেক্ষা করার জন্য আমার .git / কনফিগার ফাইলটি সম্পাদনা করা। এটি 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 pullগিটকে চেষ্টা করার সময় আমাকে বলেছিল যে নতুন ফাইলের নামটি ট্র্যাক করা হয়নি - যা এটি রিমোটে ছিল যদিও এটি স্থানীয়ভাবে বিদ্যমান ছিল না।

কারণ এটার কোনো দৃষ্টান্ত ছিল স্থানীয়ভাবে আমি যেত না git pullযতক্ষণ না আমি git rmউপর পুরাতন ফাইলের নাম (যা এটা পুনঃনামকরনের আমার মূঢ় ধারণা কারণ প্রথমে সুস্পষ্ট ছিল না)।


0

আপনার যদি .gitignore এর অধীনে ফাইলগুলি লেখা থাকে তবে ফাইলগুলি সরান এবং আবার গিট টান চালান। এটি আমাকে সাহায্য করেছিল।


0

সমস্যাটি তখন যখন আমাদের আগত পরিবর্তনগুলি থাকে যা অনতিযুক্ত ফাইলটিকে একীভূত করে দেয়, গিট অভিযোগ করে। এই আদেশগুলি আমাকে সহায়তা করেছিল:

git clean -dxf
git pull origin master
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.