গিট পুল সম্ভাব্য নয়, ফাইলগুলি নিমজ্জিত নয়


89

আমি এই একই ধরণের সমস্ত প্রশ্ন পড়েছি; দেখে মনে হয় যে নিম্নলিখিতগুলির মধ্যে কেউ কাজ করেন নি:

Delete offending files
git reset --hard HEAD
git stash
git pull

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

সবেমাত্র চেষ্টা করেছেন:

git stash
git pull

কাজও হয়নি।

অধিক তথ্য

একটি স্থানীয় প্রতিশ্রুতি আছে, এবং উজানের পাশাপাশি একটি প্রতিশ্রুতি আছে। আমি এইভাবে চেষ্টা করেছি git pull --rebaseকিন্তু এটি এখনও সঠিকভাবে কাজ করছে না ... যা আমাকে ত্রুটি দেয় - "অমীমাংসিত দ্বন্দ্বের কারণে বেরিয়ে আসা"। আমি যদি করি তবে আমি git stash, git reset --hard HEAD, git pull --rebaseত্রুটি পেয়েছি "টান সম্ভব নয়, নিমজ্জিত পরিবর্তনগুলি ..."

উত্তর:


201

রিমোটটি রয়েছে originএবং শাখাটি বলুন masterএবং আপনি ইতিমধ্যে masterযাচাই করে ফেলেছেন বলে নিম্নলিখিতগুলির চেষ্টা করতে পারেন:

git fetch origin
git reset --hard origin/master

এটি মূলত কেবল বর্তমান শাখা নেয় এবং এটি HEADদূরবর্তী শাখার দিকে নির্দেশ করে।

সতর্কতা : মন্তব্যগুলিতে যেমন বলা হয়েছে, এটি আপনার স্থানীয় পরিবর্তনগুলি দূরে সরিয়ে দেবে এবং উত্সের সাথে যা কিছু আছে তার সাথে ওভাররাইট করবে

অথবা আপনি মূলত একই কাজ করতে নদীর গভীরতানির্ণয় আদেশগুলি ব্যবহার করতে পারেন:

git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard

সম্পাদনা: আমি সংক্ষেপে ব্যাখ্যা করতে চাই কেন এটি কাজ করে।

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

একটি শাখা একটি প্রদত্ত হ্যাশটির কেবলমাত্র একটি নির্দিষ্ট পয়েন্টার। এখানে একটি উদাহরণ সেট আছে:

$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master

এই ফাইলগুলির প্রত্যেকটিতে একটি হ্যাশ থাকে যা প্রতিশ্রুতিবদ্ধ দিকে নির্দেশ করে:

$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b

এগুলি সমস্ত অভ্যন্তরীণ গিট স্টোরেজ মেকানিজমের জন্য এবং ওয়ার্কিং ডিরেক্টরি থেকে স্বতন্ত্রভাবে কাজ করে । নিম্নলিখিতগুলি করে:

git reset --hard origin/master

গিটটি বর্তমান শাখাটিকে একই হ্যাশ মানকে নির্দেশ করবে যা মূল / মাস্টার নির্দেশ করে। তারপরে এটি জোর করে সেই হ্যাশের ফাইলের কাঠামো / সামগ্রীর সাথে মেলে কার্যকারী ডিরেক্টরি পরিবর্তন করে।

এটি কাজ করার জন্য এগিয়ে যান এবং নিম্নলিখিতটি ব্যবহার করে দেখুন:

git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD

4
সাম্প্রতিক অনুমোদিত সম্পাদনা থেকে শুরুতে বিশাল সতর্কতা যুক্ত করে, এটি ইতিমধ্যে উল্লেখ করা উচিত: "তারপরে [গিট] দৃ has়ভাবে সেই হ্যাশের ফাইলের কাঠামো / বিষয়বস্তুগুলির সাথে মেলে কাজের ডিরেক্টরিটি পরিবর্তন করে।" তবে অনুমান করুন যে এটি যথেষ্ট স্পষ্ট ছিল না।
ট্রেভর নরিস


5

নিম্নলিখিত কমান্ড সেটটি ব্যবহার করে সমাধান করা হয়েছে:

git reset --hard
git pull --rebase
git rebase --skip
git pull

কৌশলটি পরিবর্তনগুলি পুনরায় সরিয়ে ফেলার জন্য ... একটি তুচ্ছ কমিটকে ছাড় দিতে আমাদের কিছুটা সমস্যা হয়েছিল, এবং তাই আমরা কেবল গিট রিবেস --স্কিপ (ফাইলগুলি অনুলিপি করার পরে) ব্যবহার করে এড়িয়ে গেছি।


3

আপনি যদি কখনও সমস্যাটি চালিয়ে যাওয়ার পরে এই সমস্যাটি পান git fetchএবং তারপরে গিট আপনাকে git pullএকীভূত দ্বন্দ্বের কারণে চালিত হতে দিচ্ছে না ( উভয় পরিবর্তিত / নিমজ্জিত ফাইল এবং আপনাকে আরও হতাশ করার জন্য) এটি আপনাকে কোনও বিবাদী চিহ্নিতকারী প্রদর্শন করবে না ফাইলটি যেহেতু এটি এখনও মার্জ হয়নি)। আপনি যদি নিজের কাজটি হারাতে না চান তবে আপনি নিম্নলিখিতটি করতে পারেন।

ফাইল স্টেজ।

$ git add filename

তারপরে স্থানীয় পরিবর্তনগুলি লুকিয়ে রাখুন।

$ git stash

আপনার কাজের ডিরেক্টরিটি টানুন এবং আপডেট করুন

$ git pull

আপনার স্থানীয় পরিবর্তিত ফাইলটি পুনরুদ্ধার করুন (গিট যদি তা পারে তবে স্বয়ংক্রিয়ভাবে মার্জ হবে, অন্যথায় এটি সমাধান করুন)

$ git stash pop

আশা করি এটি সাহায্য করবে।


2

আপনি স্থানীয় পরিবর্তনগুলি সরাতে না চাইলেও একটি সমাধান রয়েছে। খালি না করা ফাইলগুলি ( git addবা দ্বারা git remove) ঠিক করুন। তাহলে কর git pull


1

ধরে নিই যে আপনার যে কোনও পরিবর্তন রয়েছে তা আপনি ফেলে দিতে চান, প্রথমে আউটপুট পরীক্ষা করুন git status। এর পাশের "আনমিজড" বলে যে কোনও ফাইলের জন্য, চালান git add <unmerged file>। তারপরে অনুসরণ করুন git reset --hard। এটি তালাবিহীন ফাইল বাদে কোনও স্থানীয় পরিবর্তন থেকে মুক্তি পাবে।


হ্যাঁ সঠিক. এটি "নিমজ্জিত" নাও বলতে পারে। এটি "উভয় সংশোধিত" বা একটি বা দুটি অন্যান্য জিনিসও বলতে পারে। এর আউটপুট কি git status?
রায়ান স্টুয়ার্ট

এটি পোস্ট করার পরে আমি দলের সদস্যকে বলার চেষ্টা করছি git rebase --abortএবং git pull --rebaseগিটের পরামর্শ অনুসারে
ক্রিশ্চিয়ান স্টুয়ার্ট

1

আমি স্থানীয়ভাবে আনমাঞ্জিত ফাইল সরানোর জন্য গিট দিয়ে সমাধান করেছি।

$ git rm <the unmerged file name>
$ git reset --hard
$ git pull --rebase
$ git rebase --skip
$ git pull
Already up-to-date.

আমি পরে যখন গিট কমিট প্রেরণ করি:

$ git commit . -m "my send commit"
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

0

রায়ান স্টুয়ার্টের উত্তর প্রায় ছিল। আপনি যেখানে নিজের স্থানীয় পরিবর্তনগুলি মুছতে চান না সে ক্ষেত্রে , এমন এক কর্মপ্রবাহ রয়েছে যা আপনি মার্জ করার জন্য ব্যবহার করতে পারেন:

  • চালান git status। এটি আপনাকে নিমজ্জিত ফাইলগুলির একটি তালিকা দেবে।
  • এগুলিকে মার্জ করুন (হাতে ইত্যাদি)
  • চালান git commit

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

গিট এর পরে মার্জটিকে সফল মনে করে এবং আপনাকে এগিয়ে যাওয়ার অনুমতি দেয়।

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