git - কিভাবে আমি একটি রিমোট ট্র্যাকিং শাখা(যেমন 'গিট পুল') থেকে 'জিট ফেকচার' এবং 'গিট মার্জ'




git-pull git-merge (4)

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

উদাহরণস্বরূপ, ধরুন আমার দূরবর্তী শাখা রয়েছে 'অ-অন্য-শাখা'। আমি ব্যবহার করে ট্র্যাকিং শাখার হিসাবে স্থানীয় সেট আপ

git branch --track an-other-branch origin/an-other-branch

এ পর্যন্ত সব ঠিকই. কিন্তু যদি সেই শাখাটি আপডেট হয়ে যায় (সাধারণত আমার দ্বারা মেশিনটি চালানো এবং সেই মেশিন থেকে প্রেরণ করে), এবং আমি এটি মূল মেশিনে আপডেট করতে চাই, আমি আনতে / একত্রীকরণে সমস্যায় পড়ছি:

git fetch origin an-other-branch
git merge origin/an-other-branch

যখনই আমি এটি করি, আমি একটি 'ইতিমধ্যে আপ টু ডেট' বার্তা পাই এবং কিছুই মিলতে পারে না।

যাইহোক, একটি

git pull origin an-other-branch

আপনি আশা করবে সবসময় এটি আপডেট।

এছাড়াও, চলমান গিট diff

git diff origin/an-other-branch

দেখায় যে পার্থক্য আছে, তাই আমি মনে করি আমার সিনট্যাক্স ভুল আছে।

আমি কি ভুল করছি?

সম্পাদনা করুন [2010-04-09]: আমি কয়েক বার চেক করেছি, এবং আমি অবশ্যই একটি ভিন্ন শাখায় নেই। আমার 'গিট ফ্যাক্ট' এর পরে একটি 'গিট মার্জ' অনুসরণ করা উচিত (উপরে দেখানো হয়েছে) একটি গিট টান হিসাবে ঠিক একই জিনিস করবেন? আমি একটি Git অবস্থা ফলাফল দেখাচ্ছে কিছু ওয়ার্কফ্লো পাবেন।


শুধু একটি শাখা নির্বাচন করা: fetch / বনাম pull

লোকেরা আপনাকে "মার্জিং" থেকে "fetching" পৃথক করার পরামর্শ দেয়। তারা পরিবর্তে এই বলে:

    git pull remoteR branchB

এটা কর:

    git fetch remoteR
    git merge remoteR branchB

তারা কি উল্লেখ করে না যে এই ধরনের একটি আনুষ্ঠানিক কমান্ড প্রকৃতপক্ষে রিমোট রেপো থেকে সমস্ত শাখাগুলি আনবে, যা যা পুল কমান্ডটি নয়। রিমোট রেপোতে আপনার হাজার হাজার শাখা থাকলেও আপনি তাদের সব দেখতে চান না, আপনি এই অস্পষ্ট কমান্ডটি চালাতে পারেন:

    git fetch remoteR refs/heads/branchB:refs/remotes/remoteR/branchB
    git branch -a  # to verify
    git branch -t branchB remoteR/branchB

অবশ্যই, এটি স্মরণীয়ভাবে মনে রাখা কঠিন, তাই যদি আপনি সত্যিই সমস্ত শাখাগুলি আনতে এড়াতে চান তবে ProGit এ বর্ণিত আপনার .git/config পরিবর্তন করা ভাল।

তাই না?

এর সবথেকে ভাল ব্যাখ্যা ProGit এর অধ্যায় 9-5, গিট অভ্যন্তরীণ - দ্য রেফসপেক ( বা গিথুবের মাধ্যমে )। এটি গুগল এর মাধ্যমে সন্ধান করা অসম্ভব কঠিন।

প্রথম, আমরা কিছু পরিভাষা পরিষ্কার করতে হবে। রিমোট-শাখা-ট্র্যাকিংয়ের জন্য, সাধারণত 3 টি বিভিন্ন শাখা সচেতন হতে পারে:

  1. রিমোট refs/heads/branchB শাখা: অন্য রেপোর ভিতরে refs/heads/branchB
  2. আপনার দূরবর্তী ট্র্যাকিং শাখা : আপনার repo মধ্যে refs/remotes/remoteR/branchB
  3. আপনার নিজের শাখা: আপনার repo ভিতরে refs/heads/branchB

রিমোট ট্র্যাকিং শাখাগুলি ( refs/remotes ) কেবল-পঠনযোগ্য। আপনি সরাসরি যারা পরিবর্তন করবেন না। আপনি নিজের শাখাটি সংশোধন করেন এবং তারপরে রিমোট রেপোতে সংশ্লিষ্ট শাখায় যান। ফলাফলটি আপনার যথাযথ refs/remotes কোন যথাযথ পুল বা refs/remotes না হওয়া পর্যন্ত প্রতিফলিত হয় না। refs/heads/branchB man-pages থেকে আমাকে বোঝার জন্য এই পার্থক্যটি কঠিন ছিল, প্রধানত কারণ স্থানীয় শাখার ( refs/heads/branchB ) রিমোট-ট্র্যাকিং শাখাকে "ট্র্যাক" বলে মনে করা হয় যখন .git/config branch.branchB.remote = remoteR সংজ্ঞায়িত করে। branch.branchB.remote = remoteR

সি ++ পয়েন্টার হিসাবে 'refs' এর কথা ভাবুন। শারীরিকভাবে, তারা SHA-digest ধারণকারী ফাইল, কিন্তু মূলত তারা কমিটির মধ্যে শুধু পয়েন্টার হয়। git fetch আপনার কমিট-ট্রিতে অনেক নোড যুক্ত করবে, কিন্তু কীভাবে গিটগুলি সরানো যায় তা কীভাবে জটিল হয় তা একটু জটিল।

হিসাবে অন্য উত্তর উল্লিখিত, না

    git pull remoteR branchB

না

    git fetch remoteR branchB

refs/remotes/branches/branchB সরানো হবে, এবং পরবর্তী অবশ্যই refs/heads/branchB সরানো যাবে না refs/heads/branchB । যাইহোক, উভয় FETCH_HEAD সরানো। (আপনি এই ফাইলগুলির মধ্যে cat কোনও। .git/ ভেতরে পরিবর্তন করতে পারেন তা দেখতে পারেন।) এবং git merge FETCH_HEAD উল্লেখ করবে, MERGE_ORIG সেট করার MERGE_ORIG , ইত্যাদি।


আপনি একটি শাখা আনতে না, আপনি একটি সম্পূর্ণ দূরবর্তী আনতে:

git fetch origin
git merge origin/an-other-branch

এই কমান্ড

git fetch origin
git merge origin/somebranch somebranch

যদি আপনি দ্বিতীয় লাইনে এটি করেন:

git merge origin somebranch

এটি আপনার বর্তমান শাখা স্থানীয় মালিক মার্জ করার চেষ্টা করবে।

প্রশ্ন, আমি এটা বুঝতে পেরেছি, আপনি কি ইতিমধ্যেই স্থানীয়ভাবে fetched এবং এখন আপনার শাখা একই শাখার সর্বশেষে মার্জ করতে চান।


গিট পুল আসলে একটি কম্বো সরঞ্জাম: এটি গিট fetch (পরিবর্তনগুলি পেয়ে) চালায় এবং জিট মার্জ (আপনার বর্তমান কপি দিয়ে তাদের মার্জ)

আপনি সঠিক শাখায় আপনি কি নিশ্চিত?





git-fetch