আমি কীভাবে "গিট টান" স্থানীয় ফাইলগুলিকে ওভাররাইট করতে বাধ্য করব?


7174

আমি কীভাবে স্থানীয় ফাইলের ওভাররাইটটি জোর করব git pull?

দৃশ্যপটটি নিম্নলিখিত:

  • একটি টিমের সদস্য আমরা যে ওয়েবসাইটটিতে কাজ করছি তার টেম্পলেটগুলি সংশোধন করছে
  • তারা ইমেজ ডিরেক্টরিতে কিছু চিত্র যুক্ত করছে (তবে উত্স নিয়ন্ত্রণে এগুলি যুক্ত করতে ভুলে যায়)
  • তারা ছবিগুলি পরে মেইলে পাঠাচ্ছে
  • আমি উত্স নিয়ন্ত্রণের অধীনে ছবিগুলি যুক্ত করছি এবং অন্যান্য পরিবর্তনগুলির সাথে তাদের গিটহাবের দিকে ঠেলাচ্ছি
  • তারা গিটহাব থেকে আপডেটগুলি টানতে পারে না কারণ গিট তাদের ফাইলগুলি ওভাররাইট করতে চায় না।

এই ত্রুটিটি আমি পাচ্ছি:

ত্রুটি: কাজ না করা ট্র্যাক ফাইল 'পাবলিক / ইমেজ / আইকন.এফ' একত্রিত হয়ে ওভাররাইট করা হবে

আমি কীভাবে গিটকে ওভাররাইট করতে বাধ্য করব? ব্যক্তিটি একজন ডিজাইনার - সাধারণত, আমি সমস্ত দ্বন্দ্বগুলি হাত দ্বারা সমাধান করি, তাই সার্ভারের সর্বশেষতম সংস্করণ রয়েছে যা তাদের কেবলমাত্র তাদের কম্পিউটারে আপডেট করা দরকার update


17
যে কেউ এটি পড়েন যারা ভাবেন যে তারা ফাইলগুলি হারাতে পারে, আমি এই অবস্থাতেই ছিলাম এবং সলাইম টেক্সটের বাফারটি আমাকে বাঁচিয়েছে - যদি আমি কোনও বিষয়ে কাজ করছি, তবে ঘটনাক্রমে এ জাতীয় সমস্যা সমাধানের চেষ্টা করে বা ব্যবহার করে সবকিছু মুছুন এই প্রশ্নের একটি উত্তর এবং ফাইলগুলি সাব্লাইমে খোলা ছিল (এটির একটি ভাল সম্ভাবনা রয়েছে) তবে ফাইলগুলি এখনও থাকবে সাব্লাইমে, ঠিক সেখানে আছে, বা পূর্ব ইতিহাসে
টনি লেহে

61
git reset --hard origin/branch_to_overwrite
অ্যান্ড্রু অ্যাটকিনসন

1
মূলত, প্রাথমিক চেকআউট-বি পরে কেবল বিকাশ থেকে একটি টান করুন। আপনার কাজটি করুন, তারপরে পিছনে প্রবেশ করুন
ldgorman

1
সংক্ষিপ্ত উত্তর: মুছুন এবং আবার শাখা তৈরি করুন। 1. শাখা মুছুন: git branch <branch> -D2. দ্বন্দ্বের আগে একটি প্রতিশ্রুতি পুনরায় সেট করুন: git reset <commit> --hard3. শাখাটি পুনরায় তৈরি করুন: git branch <branch>4. সার্ভারে ট্র্যাকিং সেট করুন: git --set-upstream-to=origin/<branch> <branch> 5. Pull: গিট টানুন
নিনো ফিলিউ

1
সমস্ত সিআরএলএফকে এলএফ এন্ডিং-এ পরিবর্তন করতে, (ক্লিন শুরু করুন)git config core.autocrlf false; git ls-files -z | xargs -0 rm; git checkout .
ক্লো

উত্তর:


10022

গুরুত্বপূর্ণ: আপনার যদি স্থানীয় কোনও পরিবর্তন হয় তবে সেগুলি নষ্ট হয়ে যাবে। --hardবিকল্পের সাথে বা ছাড়াই , কোনও স্থানীয় প্রতিশ্রুতি যা ধাক্কা দেয়নি তা হারিয়ে যাবে। [*]

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


আমি মনে করি এটি সঠিক উপায়:

git fetch --all

তারপরে, আপনার কাছে দুটি বিকল্প রয়েছে:

git reset --hard origin/master

অথবা আপনি অন্য কোনও শাখায় থাকলে:

git reset --hard origin/<branch_name>

ব্যাখ্যা:

git fetch কিছুই মার্জ করার বা পুনরায় চালু করার চেষ্টা না করে দূরবর্তী থেকে সর্বশেষতম ডাউনলোড করে।

তারপরে git resetআপনি সবেমাত্র যা এনেছেন তা মাস্টার শাখাটিকে পুনরায় সেট করে। --hardবিকল্প ফাইল মেলে আপনার কাজের গাছ সব ফাইল পরিবর্তনorigin/master


বর্তমান স্থানীয় কমিটগুলি বজায় রাখুন

[*] : এটি উল্লেখ করার মতো যে masterপুনরায় সেট করার আগে থেকে একটি শাখা তৈরি করে বর্তমান স্থানীয় কমিটগুলি বজায় রাখা সম্ভব :

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master

এর পরে, পুরানো কমিটগুলি সমস্তই রাখা হবে new-branch-to-save-current-commits

অনুমোদনবিহীন পরিবর্তনগুলি

অমীমাংসিত পরিবর্তনগুলি (যদিও মঞ্চস্থ), হারিয়ে যাবে। আপনার প্রয়োজনীয় কিছু স্ট্যাশ এবং প্রতিশ্রুতিবদ্ধ তা নিশ্চিত করুন। তার জন্য আপনি নিম্নলিখিত চালাতে পারেন:

git stash

এবং তারপরে এই অননুমোদিত পরিবর্তনগুলি পুনরায় প্রয়োগ করতে:

git stash pop

14
সতর্ক থেকো! আপনার যদি স্থানীয় আনপিশড কমিটস থাকে তবে তা সেগুলি আপনার শাখা থেকে সরিয়ে দেবে! এই সমাধানটি অননুমোদিত ফাইলগুলি সংগ্রহস্থল অক্ষত রাখে না, তবে সমস্ত কিছু ওভাররাইট করে।
ম্যাথিজগুলি পি

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

14
আপনি যদি এমন কোনও রেপো থেকে git reset --hard origin/branch-name
টানছেন

95
এই প্রশ্ন ও উত্তরের পরিমাণের পরিমাণ বিবেচনা করে আমি মনে করি যে git pull -f
গিটটি

7
হার্ড রিসেটের আগে যে কমিটগুলি ধাক্কা দেয়নি সেগুলি পুনরুদ্ধার করে পুনরুদ্ধার করা যেতে পারে git reflog, যা সমস্ত প্রতিশ্রুতিগুলির তালিকা করে এবং এটিও বেস ছাড়াই those আপনি আপনার স্থানীয় অনুলিপিটি ব্যবহার না করে ক্লিপআপ না করা পর্যন্ত git gcসমস্ত কিছু হারিয়ে যায়
কোয়েন।

933

এটা চেষ্টা কর:

git reset --hard HEAD
git pull

এটি আপনার যা করা উচিত তা করা উচিত।


16
আমি এটি করেছি এবং কিছু স্থানীয় ফাইল যা রেপোতে আর ছিল না ডিস্কে রেখে দেওয়া হয়েছিল।
পাইটর ওউসিয়াক

26
আমি মনে করি না যে এটি সঠিক। উপরেরগুলি একটি সংশ্লেষ সম্পাদন করবে, ওভাররাইট নয় যা প্রশ্নে অনুরোধ করা হয়েছিল: "গিটকে ওভাররাইট করতে কিভাবে বাধ্য করবেন?" আমার কাছে উত্তর নেই, আমি বর্তমানে এটি সন্ধান করছি .. এই মুহুর্তে আমি "গিট চেকআউট ব্রাঞ্চউইথকোডটোকিপ" রাখতে চাইছি এমন কোডটি সহ আমি শাখায় স্যুইচ করব, তারপরে "গিট শাখা-ডি ব্রাঞ্চটিও ওভাররাইট" করুন এবং তারপরে অবশেষে "গিট চেকআউট-বি ব্রাঞ্চটো ওভাররাইট"। আপনি এখন মার্জ না করেই ব্রাঞ্চ উইথকোডটোকিপ থেকে শাখা ব্রাঞ্চটিও ওভাররাইটে সঠিক কোডটি পাবেন।
felbus

252
'গিট টান' ব্যবহার করে মার্জ করার পরিবর্তে গিট আনতে চেষ্টা করুন - সব পরে 'গিট রিসেট --হার্ড উত্স / মাস্টার'
লয়েড মুর

5
হ্যাঁ, @ লয়ালডমুর সলিউশনটি আমার পক্ষে কাজ করেছে। একটি উত্তর না দিয়ে উত্তর দেওয়ার সাথে কী করতে পারে।
ম্যাক্স উইলিয়ামস

2
এটি বর্তমান পরিবর্তনগুলি পুনরায় সেট করবে সর্বশেষ শাখার প্রতিশ্রুতি টানতে। তারপরে গিট টান সর্বশেষ শাখা থেকে পরিবর্তনগুলিকে একত্রিত করে। এটি আমি যা করতে চেয়েছিলাম ঠিক তা করেছে .. ধন্যবাদ!
কোডভার্সড

458

সতর্কতা: git cleanআপনার সমস্ত চিহ্নবিহীন ফাইল / ডিরেক্টরি মুছুন এবং পূর্বাবস্থায় ফেরা যাবে না।


কখনও কখনও শুধু clean -fসাহায্য করে না। আপনি যদি ট্রেডবিহীন নির্দেশাবলী থাকে তবে -d বিকল্পেরও প্রয়োজন:

# WARNING: this can't be undone!

git reset --hard HEAD
git clean -f -d
git pull

সতর্কতা: git cleanআপনার সমস্ত চিহ্নবিহীন ফাইল / ডিরেক্টরি মুছুন এবং পূর্বাবস্থায় ফেরা যাবে না।

প্রথমে -n( --dry-run) পতাকা ব্যবহার করার কথা বিবেচনা করুন । এটি আপনাকে দেখাবে যে আসলে কিছু না মুছলে মুছে ফেলা হবে:

git clean -n -f -d

উদাহরণ আউটপুট:

Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...

33
দুর্দান্ত ... আমার হোম ডিরেক্টরিতে এটি আমার ডটফিলসের রেপোর বিরুদ্ধে চালাও। ভাল যে আমার সেখানে সত্যিকারের গুরুত্বপূর্ণ কিছু ছিল না ...
লরি ডেস্ক

7
আমি মনে করি দৃশ্যের বিবরণ এটি পরিষ্কার করে দিয়েছে যে তিনি আসলেই সামগ্রীটি ফেলে দিতে চান না। বরং তিনি যা চান তা হ'ল ফাইলগুলি ওভাররাইট করার সময় গিট বাউলিং বন্ধ করা। @ লৌরি, আপনার সাথে এটি হওয়া উচিত হয়নি। দুর্ভাগ্যক্রমে লোকেরা দৃশ্যের বিবরণের মূল অংশটি ভুলভাবে পড়েছে বলে মনে হচ্ছে - আমার পরামর্শ দেখুন।
হেজেহোগ

19
শেষ পর্যন্ত । সমস্ত কিছু পরিষ্কার করতে পরিষ্কার ব্যর্থ হলে গিট ক্লিন-ফ-ডি ব্যবহার করা সহজ।
আর্থলেলন

7
@ ক্রিজক্রাইগ এগুলিতে যোগ না করা হলে.gitignore
ব্লাডিং ফিঙ্গারস

5
@earthmeLon, এর জন্য আপনি চাইতে পারেন git clean -dfx-xঅগ্রাহ্যের তালিকা .gitignore। সাধারণত আপনার বিল্ড পণ্যগুলি .gitignore এ থাকবে।
পল ড্রাগন

384

হেজেহগের মতো আমি উত্তরগুলি ভয়ানক বলে মনে করি। তবে হেজেহগের উত্তরটি আরও ভাল হতে পারে, তবে আমি এটি এতটা মার্জিত বলে মনে করি না। আমি এটি করতে যেভাবে খুঁজে পেয়েছি তা হল "আনুন" এবং একটি সংজ্ঞায়িত কৌশলটির সাথে "মার্জ" ব্যবহার করে। কোনটি এটিকে তৈরি করা উচিত যাতে আপনার স্থানীয় পরিবর্তনগুলি সংরক্ষণ করা হয় যতক্ষণ না সেগুলি যে ফাইলগুলির সাথে আপনি ওভাররাইট জোর করে চাপানোর চেষ্টা করছেন সেগুলির মধ্যে একটি না।

প্রথমে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন

 git add *
 git commit -a -m "local file server commit message"

তারপরে পরিবর্তনগুলি আনুন এবং যদি কোনও বিরোধ হয় তবে ওভাররাইট করুন

 git fetch origin master
 git merge -s recursive -X theirs origin/master

"-X" একটি বিকল্প নাম এবং সেই বিকল্পটির জন্য "তাদের" মান। আপনি যদি কোনও বিরোধ হয় তবে "আপনার" পরিবর্তনের পরিবর্তে "তাদের" পরিবর্তনগুলি ব্যবহার করতে বেছে নিচ্ছেন।


56
এটি আমি এখনও অবধি দেখা সেরা উত্তর। আমি এটি চেষ্টা করে দেখিনি, তবে অন্যান্য উত্তরের মতো এটি আপনার সমস্ত চিহ্নবিহীন ফাইলগুলিকে নাক করে দেওয়ার চেষ্টা করে না, যা সুস্পষ্ট কারণে অত্যন্ত বিপজ্জনক।
হাইজ

5
ডিট্টো - খুব বড় সংযুক্তি (গিটহাব টান অনুরোধ) করার সময় এটি আমার পক্ষে কাজ করেছিল যেখানে আমি যা ছিলাম তার উপরে আমি এটি সবই গ্রহণ করতে চেয়েছিলাম। ভাল উত্তর! আমার ক্ষেত্রে শেষ দুটি আদেশ ছিল: 1) get fetch other-repo; 2)git merge -s recursive -X theirs other-repo/master
quux00

2
এটি আপনার স্থানীয়গুলির সাথে নয়, रिपাইজিটরি ফাইলগুলির সাথে কোনও বিরোধকে ওভাররাইট করবে?
নাথান এফ।

2
সেরা উত্তর. সর্বাধিক গ্রহণযোগ্য উত্তর আমার ক্ষেত্রে বিচ্ছিন্ন মাথায় রেখে গেছে। আমি স্থানীয় মাস্টার শাখায় ফিরে এসে দৌড়েছিgit merge -X theirs origin/master
পিটারগাস

2
এই (উত্তম) উত্তরের সমস্যাটি হ'ল এটি কি সমস্ত স্থানীয় ফাইল যুক্ত করে, যা কখনও কখনও আপনি চান তা নাও পারে। আপনি কেবল বাদ দেওয়া নির্দিষ্ট ফাইলগুলি যুক্ত করতে চাইতে পারেন। তবে এর সর্বোত্তম জিনিসটি হ'ল, তাঁর যা করা উচিত ছিল তা করতে তিনি তা পান - স্থানীয়ভাবে এগুলি যুক্ত করুন। আপনার সম্ভবত-এক্স কৌশলগুলি প্রয়োজন হবে না, কারণ তারা একই চিত্র। আসলে, আমি প্রথমে এটিকে ছেড়ে দেওয়ার পরামর্শ দিচ্ছি, কেবল কোনও অসঙ্গতি আছে কিনা তা খুঁজে বের করার জন্য এবং সেখানে রয়েছে কিনা তা যুক্ত করার পরে পর্যালোচনা করে জানাচ্ছি যে 'তাদের' সর্বদা সঠিক পছন্দ। তবে তারপরেও আমি অদ্ভুত।
বব কার্নস

279

পরিবর্তে:

git fetch --all
git reset --hard origin/master

আমি নিম্নলিখিতগুলি করার পরামর্শ দেব:

git fetch origin master
git reset --hard origin/master

আপনি যদি মূল / মাস্টার শাখায় পুনরায় সেট করতে চলেছেন তবে সমস্ত রিমোট এবং শাখা আনার দরকার নেই?


3
আপনার উত্তরটি আপনার প্রতিবেদনের জন্য যা প্রয়োজন তা ঠিক। আমাকে অবশ্যই জিজ্ঞাসা করতে হবে, এটি কি সমস্ত অচিহ্নযুক্ত ফাইলগুলি সরিয়ে দেয়?
নিকোলাস ডি জে

5
হ্যাঁ, আমার বেশিরভাগ প্রতিনিধি এখান থেকে আসছেন :) এটি সমস্ত চিহ্নবিহীন ফাইলগুলিও সরিয়ে দেবে। এমন কিছু যা আমি ভুলে গিয়েছিলাম এবং মাত্র 2 দিন আগে যন্ত্রণার সাথে স্মরণ করিয়ে দিয়েছিলাম ...
জোহানেকে

1
: এই অন্যান্য উত্তরে মন্তব্য দেখুন stackoverflow.com/a/8888015/2151700
Johanneke

এটি আমার তালিকাভুক্ত ফাইলগুলি সরিয়ে দেয়নি; যা আসলে আমি প্রত্যাশা করতাম এটি কারও কারও পক্ষে এবং অন্যের পক্ষে নয় এমন কারণ রয়েছে?
আরিচার্ডস

গিটার পুনরায় সেট করে আনট্রাক করা ফাইলগুলি প্রভাবিত হয় না। আপনি যদি git add .git reset --hard
সেগুলিও

131

দেখে মনে হচ্ছে প্রথমে সেরা উপায় হ'ল:

git clean

সমস্ত চিহ্নবিহীন ফাইল মুছতে এবং তারপরে যথারীতি চালিয়ে যান git pull...


4
একই সমস্যা সমাধানের জন্য আমি "গিট ক্লিন" ব্যবহার করার চেষ্টা করেছি, তবে এটি সমাধান হয়নি did গিট স্ট্যাটাস বলছে "আপনার শাখা এবং 'উত্স / মাস্টার' সরানো হয়েছে, # এবং যথাক্রমে 2 এবং 9 টি পৃথক কমিট (গুলি) রয়েছে" " এবং গিট টান আপনার উপরের মতো কিছু বলে।
অস্পষ্টতা

43
গিট ক্লিন একটি বরং ভোঁতা উপকরণ এবং এটি আপনি রাখতে চাইলে প্রচুর জিনিস ফেলে দিতে পারেন। টান সফল না হওয়া অবধি গিট যে ফাইলগুলি অভিযোগ করে তার নাম সরিয়ে ফেলা বা নামকরণ করা ভাল।
নিল মেহেহে

2
আমি মনে করি না এটি সাধারণভাবে কাজ করে। জোর করে গিট টানার মাধ্যমে গিট ক্লোন রিমোটটি করার কি কোনও উপায় নেই?
ম্যাথটিক

10
@ ম্যাথিক:git fetch origin && git reset --hard origin/master
অ্যারোমাস্টার

3
কি git cleanসর্বোত্তম উত্তর এখানে? ফাইলগুলি অপসারণ করা অপরিহার্যভাবে ওপি যা চায় তা নয়। তারা মোছা না করে 'লোকাল ফাইলগুলির ওভাররাইট' চেয়েছিল।
অ্যালেন

111

সতর্কতা, এটি করা আপনার ফাইলগুলি স্থায়ীভাবে মুছে ফেলবে যদি আপনার গিটিগনোর ফাইলে কোনও ডিরেক্টরি / * এন্ট্রি থাকে।

কিছু উত্তর ভয়াবহ বলে মনে হচ্ছে। ডেভিড অবসাজনিশভিলির পরামর্শ অনুসরণ করে @ লাউরির কী হয়েছিল সেই অর্থেই ভয়াবহ।

বরং (গিট> ভি 1.7.6):

git stash --include-untracked
git pull

পরে আপনি স্ট্যাশ ইতিহাস মুছতে পারেন।

ম্যানুয়ালি, একে একে:

$ git stash list
stash@{0}: WIP on <branch>: ...
stash@{1}: WIP on <branch>: ...

$ git stash drop stash@{0}
$ git stash drop stash@{1}

নির্মমভাবে, একবারে:

$ git stash clear

অবশ্যই আপনি যা স্ট্যাস করেছেন তাতে ফিরে যেতে চাইলে:

$ git stash list
...
$ git stash apply stash@{5}

2
না আমি তাই মনে করি না। স্ট্যাশিং কেবল অনির্বাচিত ফাইলকে পথ থেকে সরিয়ে দেয়। উপরেরগুলি গিট ট্র্যাক করে না এমন ফাইলগুলি (স্ট্যাশগুলি) চালিত করে। এটি রিমোটে যুক্ত হওয়া ফাইলগুলিকে বাধা দেয়, যা এখনও আপনার মেশিনে টানেনি - তবে যা আপনি তৈরি করেছেন (!) - নীচে টানতে। অনির্দিষ্ট কাজকে বিনষ্ট না করেই। আশা করি বুঝেছি?
হেজেহোগ

3
যদি আপনার কাছে 1.7.6 না থাকে তবে আপনি --include-untrackedঅস্থায়ীভাবে git addনিজের পুরো রেপো-টি সরিয়ে নকল করতে পারেন , তারপরে অবিলম্বে এটি স্ট্যাশ করে।
ntoodood

3
আমি হেজহগের সাথে একমত আপনি যদি এখানে জনপ্রিয় উত্তরগুলি করেন তবে আপনি সম্ভবত অজান্তেই অনেকগুলি জিনিস হত্যা করেছেন যা আপনি সত্যিই হারাতে চান নি তার চেয়ে বেশি আপনি খুঁজে পেতে পারেন।
গার্ডিয়াস

1
আমার কাছে অন্য চিহ্নবিহীন ফাইল রয়েছে - একত্রীকরণ / টান ওভাররাইট করতে চেয়েছিল এমনটি ছাড়াও, এই সমাধানটি সবচেয়ে ভাল কাজ করেছে। git stash applyসংযুক্তি ইতিমধ্যে তৈরি করা ফাইলগুলির ব্যতিক্রম (ঠিক আছে) ব্যতীত আমার সমস্ত চিহ্নবিহীন ফাইলগুলি ফিরিয়ে এনেছে: "ইতিমধ্যে উপস্থিত রয়েছে, কোনও চেকআউট নেই।" নিখুঁতভাবে কাজ করেছেন।
বিগ ব্লুহ্যাট

2
এটি সবচেয়ে পরিষ্কার উত্তর, এবং এটি গ্রহণযোগ্য হওয়া উচিত। কিছু টাইপিং সংরক্ষণ করতে আপনি সংক্ষিপ্ত রূপ ব্যবহার করতে পারেন: git stash -u
সিসিপিজ্জা

93

স্থানীয় পরিবর্তনগুলি ফেলে দিতে আপনি এই আদেশটি সহায়ক বলে মনে করতে পারেন:

git checkout <your-branch> -f

এবং তারপরে একটি ক্লিনআপ করুন (কার্যকারী গাছ থেকে তালা ছাড়ানো ফাইলগুলি সরিয়ে দেয়):

git clean -f

আপনি যদি ট্রেডবিহীন ফাইলগুলি ছাড়াও ট্রেডবিহীন ডিরেক্টরিগুলি সরাতে চান:

git clean -fd

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

3
যদিও এই উত্তরটি হুবহু বর্ণনার সাথে মাপসই করা যাচ্ছে না, তবুও এটি আমাকে গাড়ীর রিটার্নের সাথে গিট ঝাঁকুনির হতাশা থেকে বাঁচিয়েছে (অটোক্রোল্ফ মিথ্যা সহ ইভেন্ট)। যখন গিট পুনরায় সেট করা - যখন HEAD আপনাকে "না" পরিবর্তিত ফাইলগুলি না দেয়, এই "-f" পতাকাগুলি বেশ সহায়ক। একটি গুচ্ছ ধন্যবাদ।
কেলিনডিল

88

একত্রিত হওয়ার পরিবর্তে এটি ব্যবহার করে দেখুন git pull:

git fetch --all

অনুসরণ করেছে:

git reset --hard origin/master


61

আমার পক্ষে একমাত্র কাজটি ছিল:

git reset --hard HEAD~5

এটি আপনাকে পাঁচটি কমিট এবং তারপরে ফিরিয়ে আনবে

git pull

আমি খুঁজে পেয়েছি কীভাবে গিট মার্জটিকে পূর্বাবস্থায় ফিরিয়ে আনতে হয়


শেষ পর্যন্ত আমার পক্ষে এটিই কাজ করেছিল কারণ আমি আমার শাখাটিকে
উত্সাহিত রেপোতে চাপিয়ে

হাই, আসলে এটি একটি কৌশল work aroundকিন্তু সত্যই কার্যকর for কারণ কিছু সংঘাতের মধ্যে কিছু বিবাদ সংঘটিত হতে পারে তারপরে 5 টি কমিট পুনরায় করা নিশ্চিত করবে যে দূরবর্তী কোডের সাথে কোনও বিরোধ নেই।
হোয়াং লে

54

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

এখানে আমরা সবচেয়ে পরিষ্কার সমাধানটি ব্যবহার করছি:

# Fetch the newest code
git fetch

# Delete all files which are being added, so there
# are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
    rm -f -- "$file"
done

# Checkout all files which were locally modified
for file in `git diff --name-status | awk '/^[CDMRTUX]/ {print $2}'`
do
    git checkout -- "$file"
done

# Finally pull all the changes
# (you could merge as well e.g. 'merge origin/master')
git pull
  • প্রথম কমান্ডটি নতুন তথ্য এনেছে।

  • দ্বিতীয় কমান্ড পরীক্ষা করে রাখে যে এখানে কোনও ফাইল রয়েছে যা সংগ্রহস্থলে যুক্ত করা হচ্ছে এবং স্থানীয় সংগ্রহস্থল থেকে সেই তালাবিহীন ফাইলগুলি মুছে ফেলা হবে যা বিবাদ সৃষ্টি করতে পারে।

  • তৃতীয় কমান্ড স্থানীয়ভাবে সংশোধিত সমস্ত ফাইল চেক আউট করে।

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


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

1
হ্যাঁ, অবশ্যই git merge origin/masterদ্রুত এবং সম্ভবত আরও নিরাপদ হবে। যেহেতু কেউ যদি এই স্ক্রিপ্টের ফাইলগুলি অপসারণের সময় নতুন পরিবর্তনগুলি ঠেলে দেয় (যা হওয়ার সম্ভাবনা নেই তবে সম্ভব) তবে পুরো টান ব্যর্থ হতে পারে। আমি pullসেখানে রাখার একমাত্র কারণ হ'ল কেউ হয়তো মাস্টার শাখায় কাজ করছেন না, তবে অন্য কোনও শাখা এবং আমি চেয়েছিলাম স্ক্রিপ্টটি সর্বজনীন হোক।
স্ট্রাহিনজা কাস্টুডিক

আপনি যদি স্থানীয়ভাবে বিকল্প ফাইলের মতো ফাইল তৈরি করে থাকেন তবে এগুলিতে রাখুন .gitignore
সেবি

52

সবার আগে, স্ট্যান্ডার্ড উপায়টি ব্যবহার করে দেখুন:

git reset HEAD --hard # To remove all not committed changes!
git clean -fd         # To remove all untracked (non-git) files and folders!

সতর্কতা : উপরের কমান্ডগুলি কেবলমাত্র যদি আপনার প্রতিশ্রুতিবদ্ধ না করা হয় তবে ডেটা / ফাইলের ক্ষতি হতে পারে! আপনি যদি নিশ্চিত না হন তবে আপনার পুরো সংগ্রহস্থল ফোল্ডারের প্রথমে ব্যাকআপ নিন।

তারপরে আবার টানুন।

যদি উপরেরটি সহায়তা না করে এবং আপনি আপনার তালাবিহীন ফাইল / ডিরেক্টরিগুলি সম্পর্কে যত্নশীল না হন (কেবল ব্যাকআপটিকে প্রথমে তৈরি করুন), নিম্নলিখিত সহজ পদক্ষেপগুলি ব্যবহার করে দেখুন:

cd your_git_repo  # where 'your_git_repo' is your git repository folder
rm -rfv *         # WARNING: only run inside your git repository!
git pull          # pull the sources again

এটি সমস্ত গিট ফাইলগুলি সরিয়ে ফেলবে (এক্সট্রিপ্ট .git/দির, যেখানে আপনি সমস্ত কমিট করেছেন) এবং এটিকে আবার টানুন।


কেন git reset HEAD --hardকিছু ক্ষেত্রে ব্যর্থ হতে পারে?

  1. কাস্টম বিধি .gitattributes file

    eol=lf.Gitattributes এ নিয়ম থাকার ফলে গিট কিছু টেক্সট ফাইলগুলিতে সিআরএলএফ লাইন-এন্ডিংসকে এলএফতে রূপান্তর করে কিছু ফাইল পরিবর্তন পরিবর্তন করতে পারে।

    যদি এটি হয় তবে আপনাকে এই সিআরএলএফ / এলএফ পরিবর্তনগুলি (এগুলিতে পর্যালোচনা করে git status) প্রতিশ্রুতিবদ্ধ করতে হবে, বা চেষ্টা করুন: git config core.autcrlf falseএগুলি অস্থায়ীভাবে উপেক্ষা করার জন্য।

  2. ফাইল সিস্টেমের অক্ষমতা

    আপনি যখন ফাইল-সিস্টেম ব্যবহার করেন যা অনুমতি বৈশিষ্ট্যগুলি সমর্থন করে না। উদাহরণস্বরূপ আপনার দুটি সংগ্রহস্থল রয়েছে, একটি লিনাক্স / ম্যাক ( ext3/ hfs+) এবং অন্যটি FAT32 / NTFS ভিত্তিক ফাইল-সিস্টেমে।

    যেমন আপনি লক্ষ্য করেছেন, দুটি ভিন্ন ধরণের ফাইল সিস্টেম রয়েছে, সুতরাং যেটি ইউনিক্স অনুমতিগুলি সমর্থন করে না সে সিস্টেমটিতে ফাইল অনুমতিগুলি পুনরায় সেট করতে পারে না যা এই ধরণের অনুমতিগুলিকে সমর্থন করে না, সুতরাং --hardআপনি চেষ্টা করুন না কেন , গিট সর্বদা কিছু "পরিবর্তন" সনাক্ত করুন।


47

আমারও একই সমস্যা ছিল। কেউ আমাকে এই সমাধান দেয়নি, তবে এটি আমার পক্ষে কাজ করেছিল worked

আমি এর দ্বারা সমাধান করেছি:

  1. সমস্ত ফাইল মুছুন। শুধু .gitডিরেক্টরি ছেড়ে দিন ।
  2. git reset --hard HEAD
  3. git pull
  4. git push

এখন এটা কাজ করছে.


1
একই অবস্থা. কখনও কখনও কেবল খুব কঠিন সমাধান কাজ করে, এটি প্রায়শই ঘটে যে কেবল পুনরায় সেট করা এবং পরিষ্কার কোনওভাবেই যথেষ্ট নয় ...
jdehaan

41

বোনাস:

পূর্ববর্তী উত্তরগুলিতে টান / আনার / একীভূত হওয়ার কথা বলতে গিয়ে আমি একটি আকর্ষণীয় এবং উত্পাদনশীল কৌশল ভাগ করতে চাই,

git pull --rebase

এই উপরের কমান্ডটি আমার গিট জীবনের সর্বাধিক দরকারী কমান্ড যা অনেক সময় সাশ্রয় করে।

সার্ভারে আপনার নতুন প্রতিশ্রুতি দেওয়ার আগে, এই কমান্ডটি ব্যবহার করে দেখুন এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষতম সার্ভারের পরিবর্তনগুলি (একটি ফেচ + মার্জ সহ) সিঙ্ক্রোনাইজ করবে এবং গিট লগে আপনার প্রতিশ্রুতি শীর্ষে রাখবে। ম্যানুয়াল টান / একত্রীকরণ সম্পর্কে চিন্তা করার দরকার নেই।

"গিট টান --rebase" কী করে তার বিশদ খুঁজুন ?


3
সংক্ষেপে বলতে গেলে: git pull -r
কেনারব

29

আমারও একই সমস্যা ছিল। আমি এই কাজ করতে ছিল:

git reset --hard HEAD
git clean -f
git pull

6
git cleanসাবধানতার সাথে ব্যবহার করুন
নেটেডুড

29

আমি অন্যান্য উত্তর সংক্ষেপে। আপনি git pullত্রুটি ছাড়াই কার্যকর করতে পারেন :

git fetch --all
git reset --hard origin/master
git reset --hard HEAD
git clean -f -d
git pull

সতর্কতা : এই স্ক্রিপ্টটি খুব শক্তিশালী, যাতে আপনি আপনার পরিবর্তনগুলি হারাতে পারেন।


2
এটি পরিবর্তিত ফাইলগুলিকে ওভাররাইট করবে (আগে যে ফাইলগুলি আগে যাচাই করা হয়েছিল) এবং এটি অন্যাক্র্যাকড ফাইলগুলি (যে ফাইলগুলি কখনও চেক ইন করা হয়নি) সরিয়ে ফেলবে। ঠিক আমি যা খুঁজছিলাম, ধন্যবাদ!
স্টাইফ্লে

3
আমার সন্দেহ হয় তৃতীয় লাইন git reset --hard HEADঅপ্রয়োজনীয় হতে পারে; আমার স্থানীয় ম্যান পৃষ্ঠা (২.6.৩) বলে যে resetদ্বিতীয় লাইনে git reset --hard origin/master "সমস্ত ফর্মের মধ্যে
আরিচার্ডগুলি

2
@ আরিচার্ডস আমি মনে করি আপনার সন্দেহভাজন ঠিক আছে তবে দ্বিতীয় লাইনটি যদি কাজ না করে (কোনও কারণেই) তৃতীয় লাইনটি পুনরায় সেট করতে ভাল কাজ করে। এই সমাধানটি অনুকূলিতকরণের প্রয়োজন নেই। আমি কেবল অন্য উত্তরগুলি সংক্ষিপ্ত করে রেখেছি। এখানেই শেষ. আপনার মন্তব্যের জন্য ধন্যবাদ. :)
রবার্ট মুন

28

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

মনে মনে, আমি কাস্টুডিকের স্ক্রিপ্ট আপডেট করেছি ঠিক তা করতে। আমি একটি টাইপও স্থির করেছিলাম (মূল অনুপস্থিত)

#/bin/sh

# Fetch the newest code
git fetch

# Delete all files which are being added,
# so there are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
    echo "Deleting untracked file $file..."
    rm -vf "$file"
done

# Checkout all files which have been locally modified
for file in `git diff HEAD..origin/master --name-status | awk '/^M/ {print $2}'`
do
    echo "Checking out modified file $file..."
    git checkout $file
done

# Finally merge all the changes (you could use merge here as well)
git pull

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

পরিবর্তিত ফাইলগুলির চেকআউট প্রয়োজন, সুতরাং এটি 100% বার কাজ করে। আমি এটির সাথে আমার স্ক্রিপ্টটি অনেক দিন আগে আপডেট করেছি, তবে এখানেও আপডেট করতে ভুলে গিয়েছি। আমিও এটি আপনার চেয়ে কিছুটা আলাদাভাবে ব্যবহার করি। আমি ফাইলগুলিতে যাচাই করি যেগুলিতে যে কোনও ধরণের পরিবর্তন রয়েছে, কেবল এম নয়, তাই এটি সর্বদা কাজ করে।
স্ট্রাহিনজা কাস্টুডিক

24

আমি বিশ্বাস করি যে দ্বন্দ্বের সম্ভাব্য দুটি কারণ রয়েছে, সেগুলি অবশ্যই আলাদাভাবে সমাধান করা উচিত এবং যতদূর আমি উপরের উত্তরগুলির কোনওটিই উভয়ের সাথেই মোকাবিলা করতে পারি না:

  • স্থানীয় ফাইলগুলি যাচাই না করা হয় সেগুলি ম্যানুয়ালি (নিরাপদ) অথবা অন্য উত্তরে প্রস্তাবিত মোছার দরকার পড়ে git clean -f -d

  • দূরবর্তী শাখায় নেই এমন স্থানীয় কমিটগুলিও মুছে ফেলা দরকার। আইএমও এটি অর্জনের সহজতম উপায়টি হ'ল: git reset --hard origin/master(আপনি যে শাখায় কাজ করছেন তার দ্বারা 'মাস্টার' প্রতিস্থাপন করুন এবং git fetch originপ্রথম চালান )


22

একটি সহজ উপায় হ'ল:

git checkout --theirs /path/to/file.extension
git pull origin master

এটি আপনার স্থানীয় ফাইলটিকে গিটের সাথে ফাইলটি ওভাররাইড করবে


21

দেখে মনে হচ্ছে এখানে বেশিরভাগ উত্তর masterশাখায় ফোকাস করেছে ; যাইহোক, এমন সময় আছে যখন আমি দুটি ভিন্ন স্থানে একই বৈশিষ্ট্য শাখায় কাজ করছি এবং আমি চাই একটির মধ্যে একটি রিবাসটি হুপের মাধ্যমে প্রচুর ঝাঁপ না দিয়ে অন্যটিতে প্রতিবিম্বিত হয়।

আরএনএর উত্তর এবং টের্কের অনুরূপ প্রশ্নের উত্তরের সংমিশ্রণের ভিত্তিতে , আমি এটি নিয়ে এসেছি যা দুর্দান্তভাবে কাজ করে:

git fetch
git reset --hard @{u}

এটি একটি শাখা থেকে চালান এবং এটি কেবল আপনার স্থানীয় শাখাটিকে প্রবাহ সংস্করণে পুনরায় সেট করবে।

এটি দুর্দান্তভাবে একটি গিট ওরফে ( git forcepull) এও দেওয়া যেতে পারে :

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

অথবা, আপনার .gitconfigফাইলে:

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

উপভোগ করুন!


এই উত্তরটিও দুর্দান্ত কারণ আপনি কোন শাখায় রয়েছেন তা নির্বিশেষে এটি কাজ করে!
লিফটমিল

19

আমার একই সমস্যা ছিল এবং কিছু কারণে এমনকি একটি git clean -f -dএটিও করবে না। এই কারণেই: কোনও কারণে যদি আপনার ফাইলটি গিট দ্বারা উপেক্ষা করা হয় (একটি .gitignore প্রবেশের মাধ্যমে, আমি ধরে নিই) তবে এটি পরে টানা দিয়ে এটিকে ওভাররাইট করার বিষয়ে বিরক্ত করে তবে আপনি যোগ না করলে কোনও পরিষ্কার এটি মুছবে না -x


19

আমি একটি খুব সহজ এবং কম বেদনাদায়ক পদ্ধতি সম্পর্কে জানি:

$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp

এটাই!


18

আমি কেবল এটির দ্বারা সমাধান করেছি:

git checkout -b tmp # "tmp" or pick a better name for your local changes branch
git add -A
git commit -m 'tmp'
git pull
git checkout master # Or whatever branch you were on originally
git pull
git diff tmp

যেখানে সর্বশেষ কমান্ডটি আপনার স্থানীয় পরিবর্তনগুলি কী ছিল তার একটি তালিকা দেয়। "টিএমপি" শাখাটি গ্রহণযোগ্য না হওয়া পর্যন্ত সংশোধন করে চলুন এবং তারপরে মাস্টারটিতে আবার মার্জ করুন:

git checkout master && git merge tmp

পরের বারের জন্য, আপনি সম্ভবত "গিট স্ট্যাশ ব্রাঞ্চ" সন্ধানের মাধ্যমে এটি ক্লিনার উপায়ে পরিচালনা করতে পারবেন যদিও স্ট্যাশ আপনাকে প্রথম কয়েকটি চেষ্টা করে সমস্যা দেখা দিতে পারে, তাই অ-সমালোচনামূলক প্রকল্পে প্রথম পরীক্ষা করুন ...


17

আমি একটি অদ্ভুত অবস্থা যে তন্ন তন্ন আছে git cleanবা git resetকাজ করে। আমাকে git indexপ্রতিটি চিহ্নবিহীন ফাইলটিতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করে বিরোধী ফাইলটি সরিয়ে ফেলতে হবে:

git rm [file]

তারপর আমি ঠিক জরিমানা করতে সক্ষম।



14

মূল প্রশ্ন থাকা সত্ত্বেও, শীর্ষস্থানীয় উত্তরগুলি একই রকম সমস্যাযুক্ত লোকদের জন্য সমস্যা তৈরি করতে পারে তবে তাদের স্থানীয় ফাইলগুলি হারাতে চায় না। উদাহরণস্বরূপ, আল-পাঙ্ক এবং ক্রিজক্রাইজের মন্তব্য দেখুন।

নিম্নলিখিত সংস্করণটি আপনার স্থানীয় পরিবর্তনগুলিকে একটি অস্থায়ী শাখায় ( tmp) সংযুক্ত করে, মূল শাখাটি পরীক্ষা করে (যা আমি ধরে নিচ্ছি master) এবং আপডেটগুলি মার্জ করে। আপনি এটি দিয়ে এটি করতে পারেন stash, তবে আমি পেয়েছি শাখা / মার্জ পদ্ধতির সহজভাবে ব্যবহার করা সহজ।

git checkout -b tmp
git add *; git commit -am "my temporary files"
git checkout master

git fetch origin master
git merge -s recursive -X theirs origin master

যেখানে আমরা অনুমান অন্যান্য সংগ্রহস্থলের হয় origin master


13

এই চারটি কমান্ড আমার পক্ষে কাজ করে।

git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master

এই কমান্ডগুলি কার্যকর করার পরে চেক / টানতে

git pull origin master

আমি অনেক চেষ্টা করেছি কিন্তু শেষ পর্যন্ত এই আদেশগুলি দিয়ে সাফল্য পেয়েছি।


2
"গিট শাখা -D মাস্টার" শাখাটি মুছুন। সুতরাং এটির সাথে সাবধানতা অবলম্বন করুন। আমি "গিট চেকআউট উত্স / মাস্টার-বি <নতুন শাখার নাম>" ব্যবহার করতে পছন্দ করি যা নতুন নামের সাথে একটি নতুন শাখা তৈরি করে এবং আপনার প্রয়োজন 3,4 টি লাইন। পাশাপাশি "গিট ক্লিন-ফ" ব্যবহার করার পরামর্শ দেওয়া হয়েছে।
চাঁদ প্রিয়ঙ্কর

13

শুধু কর

git fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname

সুতরাং আপনি সমস্ত অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া এড়ানো, যেমন আপনার ফাইল বা ডিরেক্টরিগুলি মুছতে চান ইত্যাদি মুছে ফেলা ইত্যাদি


12

সূচক এবং প্রধানটি এতে পুনরায় সেট করুন origin/master, তবে কার্যকারী গাছটি পুনরায় সেট করবেন না:

git reset origin/master

আমি ব্যক্তিগতভাবে এটি সবচেয়ে দরকারী বলে মনে করেছি। এরপরে এটি আপনার কার্যকারী গাছ রাখে যাতে আপনি এটি আবার পরীক্ষা করতে পারেন। আমার ইস্যুর জন্য, আমার যুক্ত করা হিসাবে একই ফাইলগুলি মুছে ফেলা হয়েছিল তাই এটি আটকে গিয়েছিল। অদ্ভুত, আমি জানি।
জেসন সেব্রিং 21

12

প্রয়োজনীয়তা:

  1. স্থানীয় পরিবর্তনগুলি ট্র্যাক করুন যাতে এখানে কেউ কখনও তাদের হারাতে পারে না।
  2. স্থানীয় সংগ্রহস্থলটিকে দূরবর্তী উত্সের সংগ্রহস্থলের সাথে মিলিয়ে তুলুন।

সমাধান:

  1. স্থানীয় পরিবর্তনগুলি লুকান
  2. পান একটি সঙ্গে পরিষ্কার এর ফাইল এবং ডিরেক্টরি উপেক্ষা .gitignore এবং হার্ড রিসেট করার মূল

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