গিট কেন বলছে যে "আপনার কাছে আনমিজড ফাইল থাকার কারণে পুলটি সম্ভব নয়"?


195

আমি যখন টার্মিনালে আমার প্রকল্প ডিরেক্টরিটি টানতে চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি দেখতে পাচ্ছি:

harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

গিট কেন বলে "Pull is not possible because you have unmerged files"এবং আমি কীভাবে এটি সমাধান করতে পারি?


1
আমার ক্ষেত্রে আমি এই কমান্ডগুলি কেবল "গিট অ্যাড" ব্যবহার করেছি। তারপর "Git -m কমিট" টেস্ট "এবং শেষ মধ্যে" Git পুশ "ত্রুটি সরানো হয়েছে।
Akhzar নাজির

প্রতিশ্রুতিবদ্ধ বা পুনরুদ্ধার করা হবে তা আপডেট করার জন্য (ওয়ার্কিং ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে) তারপরে "it গিট কমিট", তারপরে "it গিট পুশ" সংযুক্তি অর্জনের জন্য আপনাকে কেবল "it গিট অ্যাড <ফাইল>" যুক্ত করতে হবে।
সন্ধান_এক্স

যদি এটি সহায়তা করে: আমি লক্ষ্য করেছি যে কেবল "গিট অ্যাড" করছেন। তাহলে প্রতিশ্রুতিবদ্ধতা কার্যকর হয়নি। নাম অনুসারে স্বতন্ত্র ফাইলটি যুক্ত করতে হয়েছিল, তারপরে প্রতিশ্রুতিবদ্ধ এবং টান / ধাক্কা।
16

উত্তর:


212

বর্তমানে যা ঘটছে তা হ'ল, আপনার কাছে ফাইলগুলির একটি নির্দিষ্ট সেট রয়েছে, যা আপনি আগে মার্জ করার চেষ্টা করেছেন, তবে তারা মার্জ সংঘাতগুলি ছুঁড়ে দিয়েছে। আদর্শভাবে, যদি কেউ একীভূত সংঘাত পায়, তবে সেগুলি ম্যানুয়ালি সমাধান করতে হবে এবং ব্যবহার করে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ git add file.name && git commit -m "removed merge conflicts"। এখন, অন্য ব্যবহারকারী তার সংগ্রহস্থলের প্রশ্নে থাকা ফাইলগুলি আপডেট করেছেন এবং তার পরিবর্তনগুলি সাধারণ প্রবাহের রেপোতে ঠেলে দিয়েছেন।

এটি ঘটে, আপনার (সম্ভবত) শেষ প্রতিশ্রুতি থেকে সংযুক্ত বিবাদগুলি সমাধান করা হয়নি, সুতরাং আপনার ফাইলগুলি ঠিকঠাকভাবে মার্জ করা হয়নি, এবং সেইজন্য ফাইলগুলির জন্য U( unmerged) পতাকা। সুতরাং এখন, যখন আপনি একটি করেন git pull, গিটটি ত্রুটিটি ছুঁড়ে ফেলছে কারণ আপনার ফাইলটির কিছু সংস্করণ রয়েছে যা সঠিকভাবে সমাধান হয়নি।

এটি সমাধানের জন্য, আপনাকে প্রশ্নাবলীতে সংহত বিরোধগুলি সমাধান করতে হবে এবং আপনি একটি করার আগে পরিবর্তনগুলি যুক্ত করতে এবং প্রতিশ্রুতিবদ্ধ git pull

সমস্যার পুনরায় উত্পাদন এবং সমাধানের নমুনা:

# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test

প্রথমে সংগ্রহস্থল কাঠামো তৈরি করা যাক

test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone

এখন আমরা রেপো_ক্লোনতে আছি এবং আপনি যদি git pullএটি করেন তবে এটি বিরোধ সৃষ্টি করবে

repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
 * branch            master     -> FETCH_HEAD
   24d5b2e..1a1aa70  master     -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.

যদি আমরা ক্লোনটির দ্বন্দ্বগুলি উপেক্ষা করে এবং এখনই মূল রেপোতে আরও কমিট করে তুলি,

repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone

এবং তারপরে আমরা একটি করি git pull, আমরা পাই

repo_clone $ git pull
U   file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

নোট করুন যে fileএখনটি একটি নিমজ্জিত অবস্থায় রয়েছে এবং আমরা যদি এটি করি তবে আমরা git statusস্পষ্টভাবে দেখতে পাচ্ছি:

repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:      file

সুতরাং, এটি সমাধান করার জন্য, আমাদের প্রথমে মার্জ হওয়া দ্বন্দ্বটি সমাধান করা উচিত যা আমরা আগে উপেক্ষা করেছি

repo_clone $ vi file

এবং এর বিষয়বস্তু সেট করে

text2
text1
text1

এবং তারপরে এটি যুক্ত করুন এবং পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন

repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts

1
সম্পূর্ণ হওয়ার জন্য, আমি বিবাদগুলি সমাধান করতে 'গিট মার্জেটুল' ব্যবহার করতে পবন এর উত্তরটি যুক্ত করব। দ্বিতীয় থেকে শেষ পদক্ষেপটি খুব ব্যবহারিক নাও হতে পারে ("সংযুক্তির সমাধান করুন ... [সেট করে] ... এর বিষয়বস্তু এতে: [কিছু পাঠ্য]")।
undeniablyrob

বিকল্পভাবে, আপনি @ ব্যবহারকারী261 এর পরামর্শ ব্যবহার করে মার্জ করতে পারেন। যেভাবেই হোক না কেন, আমি মনে করি কীভাবে ব্যবহারিক অর্থে মার্জ করা যায় তার একটি পদক্ষেপ যুক্ত করা এই উত্তরটি সম্পূর্ণ করবে complete
undeniablyrob

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

46

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

রিমোট: এ <- বি <- সি <- ডি
স্থানীয়: এ <- বি *
(* ইঙ্গিত করে যে আপনার বেশ কয়েকটি ফাইল রয়েছে যা সংশোধিত হয়েছে তবে প্রতিশ্রুতিবদ্ধ নয়))

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

বিকল্প একটি: পরিবর্তনগুলি ছুঁড়ে ফেলুন
আপনি হয় git checkoutপ্রতিটি নিমজ্জিত ফাইলের জন্য ব্যবহার করতে পারেন, বা আপনি git reset --hard HEADনিজের শাখার সমস্ত ফাইলকে হেডে পুনরায় সেট করতে ব্যবহার করতে পারেন । যাইহোক, আপনার স্থানীয় শাখায় হেড হ'ল বি, একটি তারকাচিহ্ন ছাড়াই। আপনি যদি এই বিকল্পটি চয়ন করেন তবে চিত্রটি হয়ে যায়:

রিমোট: এ <- বি <- সি <- ডি
স্থানীয়: এ <- বি

এখন আপনি যখন টানবেন, আপনি মাস্টার থেকে পরিবর্তনগুলি দিয়ে আপনার শাখাটি দ্রুত-ফরওয়ার্ড করতে পারেন। টান দেওয়ার পরে, আপনি শাখাটি মাস্টারের মতো দেখবেন:

স্থানীয়: এ <- বি <- সি <- ডি

বিকল্প দুটি: পরিবর্তনগুলি পুনরুদ্ধার করুন
আপনি যদি পরিবর্তনগুলি রাখতে চান তবে প্রথমে প্রতিটি ফাইলের মধ্যে যে কোনও সংহত দ্বন্দ্ব সমাধান করতে চাইবেন। আপনি আপনার আইডিইতে প্রতিটি ফাইল খুলতে এবং নিম্নলিখিত চিহ্নগুলি সন্ধান করতে পারেন:

<<<<<<< মস্তক
// কোডের আপনার সংস্করণ
=======
// দূরবর্তী এর কোড সংস্করণ
>>>>>>>

গিট আপনাকে কোডের দুটি সংস্করণ সহ উপস্থাপন করছে। HEAD চিহ্নিতকারীদের মধ্যে থাকা কোডটি হ'ল আপনার বর্তমান স্থানীয় শাখার সংস্করণ। অন্য সংস্করণটি হ'ল দূরবর্তী থেকে কী আসছে। আপনি একবার কোডটির একটি সংস্করণ বেছে নিয়েছেন (এবং চিহ্নিতকারীদের সাথে অন্য কোডটি সরিয়ে দিয়েছেন), আপনি প্রতিটি ফাইল টাইপ করে আপনার স্টেজিং এরিয়ায় যুক্ত করতে পারেন git add। চূড়ান্ত পদক্ষেপটি git commit -m কোনও উপযুক্ত বার্তা দিয়ে টাইপ করে আপনার ফলাফল প্রতিশ্রুতিবদ্ধ । এই মুহুর্তে, আমাদের চিত্রটি এর মতো দেখাচ্ছে:

রিমোট: এ <- বি <- সি <- ডি
স্থানীয়: এ <- বি <- সি '

এখানে আমি কেবলমাত্র সি হিসাবে তৈরি প্রতিশ্রুতি হিসাবে লেবেল করেছি কারণ এটি রিমোটের প্রতিশ্রুতিবদ্ধ সি থেকে আলাদা। এখন, আপনি যদি টানতে চেষ্টা করেন তবে একটি দ্রুত-অগ্রবর্তী ত্রুটি পাবেন গিট আপনার শাখায় রিমোটের পরিবর্তনগুলি খেলতে পারে না, কারণ আপনার শাখা এবং দূরবর্তী উভয়ই পূর্বসূরীর বি সাধারণ প্রতিশ্রুতিবদ্ধ বি থেকে বিভক্ত হয়ে গেছে point এই মুহুর্তে, আপনি যদি টানতে চান তবে আপনি অন্যটি করতে পারেন git merge, বা git rebaseআপনার শাখাটি রিমোটে।

গিটের উপর দক্ষতা অর্জনের জন্য ইউনি-দিকনির্দেশক লিঙ্কযুক্ত তালিকাগুলি বুঝতে এবং পরিচালনা করতে সক্ষম হওয়া দরকার। আমি আশা করি এই ব্যাখ্যাটি আপনাকে গিট ব্যবহার সম্পর্কে সঠিক দিক দিয়ে ভাববে।


33

এটির একটি সহজ সমাধান থেরেস। তবে তার জন্য আপনাকে প্রথমে নিম্নলিখিতগুলি শিখতে হবে

vimdiff

সঙ্কট সরানোর জন্য, আপনি ব্যবহার করতে পারেন

git mergetool

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


2
আমি যা বলতে চাই vimdiff হয় না প্রয়োজন (আপনি WinMerge যেমন আপনার পছন্দের, বা ওএসএক্স এর বিল্ট-ইন FileMerge, ইত্যাদি কোন একত্রীকরণ / পরিবর্তন টুল ব্যবহার করতে পারেন)। এটি বলার পরে, এটি @ মিউ এর উত্তরের একটি দুর্দান্ত সংযোজন।
undeniablyrob

32

আপনি যদি পরিবর্তনগুলি মার্জ করতে না চান এবং এখনও আপনার স্থানীয় আপডেট করতে চান তবে চালান:

git reset --hard HEAD  

এটি আপনার স্থানীয়কে হেড দিয়ে পুনরায় সেট করবে এবং তারপরে গিট টান ব্যবহার করে আপনার রিমোটটি টানবে।

যদি আপনি ইতিমধ্যে স্থানীয়ভাবে আপনার মার্জটি প্রতিশ্রুতিবদ্ধ থাকেন (তবে এখনও রিমোটে যান নি), এবং এটিও আবার ফিরিয়ে দিতে চান:

git reset --hard HEAD~1 

6

আপনি যদি স্থানীয়ভাবে চালানোর জন্য কোনও দূরবর্তী শাখাটি টেনে নামাতে চান (পর্যালোচনা বা পরীক্ষার উদ্দেশ্যে বলুন), এবং আপনি যখন $ git pullস্থানীয় সংযুক্তির বিরোধগুলি পান:

$ git checkout REMOTE-BRANCH
$ git pull  (you get local merge conflicts)
$ git reset --hard HEAD (discards local conflicts, and resets to remote branch HEAD)
$ git pull (now get remote branch updates without local conflicts)

5

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

git checkout app/config/app.php app/config/database.php app/routes.php
git pull origin master

একত্রীকরণ দুটি ফাইলের বিষয়বস্তু একত্রিত করে। বর্তমানে আপনার স্থানীয় ফাইলগুলি দূরবর্তী সার্ভারের ফাইলগুলির চেয়ে পৃথক। সংযুক্তি অবশ্যই দূরবর্তী সার্ভারে করা উচিত। সুতরাং আপনি যদি আপনার সম্পাদিত ফাইলগুলি মঞ্চায়িত করেন এবং সেগুলিকে ধাক্কা দেন তবে আপনার পরিবর্তনগুলি সংগ্রহস্থলের ফাইলগুলিতে যুক্ত করা হবে। তারপরে আপনার ফাইলগুলি সিঙ্কে থাকবে এবং আপনি অন্যান্য পরিবর্তনগুলির সাথে পুরো প্রকল্পটি টানতে পারেন। আমি গিট ব্যবহার শুরু করতে গিয়ে গিট সহায়তা বইটি খুব সহায়ক বলে মনে করেছি। আপনি এটি এখানে খুঁজে পেতে পারেন: git-scm.com/book/en/Getting-Sarted
নিক

মনে রাখবেন যে আমি ওপি নই। "ফাইলগুলি মার্জ করা" হ'ল অনুচিত পরিভাষা। কড়া কথা বলতে গেলে, আপনি কমিট করে মার্জ করেন, ফাইলগুলি নয়।
jub0bs

হ্যাঁ হ্যাঁ এটি সত্য, আমার আবেদনগুলি। আমি একটি সহজ উত্তর দেওয়ার চেষ্টা করছিলাম
নিক

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

3

অনুসরণের পদক্ষেপগুলি:

step-1 : git reset --hard HEAD  (if you want to reset it to head)
step-2 : git checkout Master 
step-3 : git branch -D <branch Name>
(Remote Branch name where you want to get pull) 
step-4 : git checkout <branch name>
step-5 : git pull. (now you will not get any
error)

ধন্যবাদ, সর্বশীষ


2

আমার সাথে একই সমস্যা ছিল
আমার ক্ষেত্রে, পদক্ষেপগুলি নীচে রয়েছে -

  1. সমস্ত ফাইল মুছে ফেলা হয়েছে যা ইউ (নিমজ্জিত) চিহ্ন দিয়ে শুরু হচ্ছে । as-

U   project/app/pages/file1/file.ts
U   project/www/assets/file1/file-name.html
  1. মাস্টার থেকে কোড টানুন

$ git pull origin master
  1. স্থিতির জন্য পরীক্ষা করা হয়েছে

 $ git status

এটি প্রকাশিত বার্তাটি এখানে-
এবং যথাক্রমে 2 এবং 1 টি পৃথক প্রতিশ্রুতিবদ্ধ। আপনার কাছে সরল পথ নেই।
(use "git pull" to merge the remote branch into yours)

(fix conflicts and run "git commit")

নিমজ্জিত পাথগুলি:
(রেজোলিউশন চিহ্নিত করতে "গিট অ্যাড ..." ব্যবহার করুন)

both modified:   project/app/pages/file1/file.ts
both modified:   project/www/assets/file1/file-name.html
  1. সমস্ত নতুন পরিবর্তন যুক্ত করা হয়েছে -

    $ git add project/app/pages/file1/file.ts
project/www/assets/file1/file-name.html
  1. মাথা পরিবর্তনের প্রতিশ্রুতিবদ্ধ-

$ git commit -am "resolved conflict of the app."
  1. কোড ঠেলা -

$ git push origin master

কোন ছবিটি এই চিত্রটির সাথে সমাধান হতে পারে - এখানে চিত্র বর্ণনা লিখুন


1

যখন মার্জ সংঘাত ঘটে তখন আপনি পৃথক ফাইল খুলতে পারেন। আপনি "<<<<<<<< বা >>>>>>>" প্রতীক পাবেন। এগুলি আপনার পরিবর্তনগুলি এবং রিমোটে উপস্থিত পরিবর্তনগুলি উল্লেখ করে। প্রয়োজনীয় অংশটি আপনি ম্যানুয়ালি সম্পাদনা করতে পারেন। এর পরে ফাইলটি সংরক্ষণ করুন এবং তারপরে: গিট অ্যাড করুন

মার্জ বিরোধগুলি সমাধান করা হবে।


-1

কেবল এই আদেশটি চালান:

git reset --hard

3
/: যদি তারা চেষ্টা এবং এটা তাদের বর্তমান স্থানীয় সমস্ত পরিবর্তন মুছে ফেলা জানতে আপনি ব্যাখ্যা করতে হবে কি কমান্ড আছে কারণ কিছু মানুষ খুব হতাশ করা হবে না
জোসেফ Budin

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