গিট গিটহাব থেকে একটি নির্দিষ্ট শাখা টান


630

আমার একাধিক শাখা নিয়ে একটি প্রকল্প আছে। আমি তাদের গিটহাবের দিকে ঠেলে দিচ্ছি , এবং এখন অন্য কেউ এই প্রকল্পে কাজ করছে যে আমার গিটহাব থেকে তাদের শাখা টানতে হবে। এটা মাস্টার ভাল কাজ করে। তবে বলুন যে কেউ একটি শাখা তৈরি করেছে xyz। আমি কীভাবে xyzগিটহাব থেকে শাখা টানতে পারি এবং এটি xyzআমার শাখায় একীভূত করতে পারি localhost?

আমার এখানে আসলে আমার উত্তর আছে: গিটে শাখা চাপুন এবং টানুন

তবে আমি একটি ত্রুটি পেয়েছি "! [প্রত্যাখ্যাত]" এবং "নন ফাস্ট ফরোয়ার্ড" সম্পর্কে কিছু।

কোন পরামর্শ?


3
আপনি যে আসল কমান্ডটি চালাচ্ছেন তা কি?
অ্যালেক্স এন।

1
এটি আনয়ন যা 'নন ফাস্ট ফরোয়ার্ড' বার্তাটি দিয়ে ব্যর্থ হতে পারে। আপনি কি রিমোট-ট্র্যাকিং শাখা (উত্স / xyz) সংশোধন করেছেন, বা ব্রাঞ্চটি রিমোট / রিমোটে পুনরায় লেখা হয়েছিল? আপনার " git fetch origin --force" ব্যবহার করা দরকার , তবে দয়া করে ডকুমেন্টেশন এটি করার আগে পড়ুন।
জাকুব নরবস্কি

উত্তর:


755

তবে আমি একটি ত্রুটি পেয়েছি "! [প্রত্যাখ্যাত]" এবং "নন ফাস্ট ফরোয়ার্ড" সম্পর্কে কিছু

এটি কারণ গিট শাখা থেকে পরিবর্তনগুলি আপনার বর্তমান মাস্টারে মার্জ করতে পারে না। ধরা যাক আপনি শাখাটি পরীক্ষা করে দেখেছেন masterএবং আপনি দূরবর্তী শাখায় মার্জ করতে চান other-branch। আপনি যখন এটি করবেন:

$ git pull origin other-branch

গিট মূলত এটি করছে:

$ git fetch origin other-branch && git merge other-branch

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

O-O-O-O-O-O
^         ^
master    other-branch

তবে এটি দ্রুত-ফরোয়ার্ড মার্জ হবে না :

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

আপনার সমস্যা সমাধানের জন্য প্রথমে আনা দূরবর্তী শাখা:

$ git fetch origin other-branch

তারপরে এটি আপনার বর্তমান শাখায় মার্জ করুন (আমি এটি ধরে নেব master), এবং কোনও মার্জ সংঘাতগুলি সমাধান করুন:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!

না, সমস্যাটি আনার ক্ষেত্রে, একত্রিত পদক্ষেপের সাথে নয়।
জাকুব নরবস্কি

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

আমি এই পদক্ষেপগুলি অনুসরণ করি (আনুন, মার্জ করুন)। গিট আমাকে বলছে কিছু করার নেই। আমি যখন প্রতিশ্রুতিবদ্ধ করার চেষ্টা করি তখন তা দ্রুত-ফরওয়ার্ড সম্পর্কে শোক করার পরে পড়ে।
জিন জর্দান

1
@ মিপাদি আমার কাছে জিনের মতো একই সমস্যা ছিল এবং আমি বলতে পারি না যে আপনি উল্লেখ করেছেন এমন অ-ডিফল্ট উপায়ে রিমোট সেটআপ হয়েছে যা আমি বলতে পারি যে git fetch -fআমার সমস্যাটি স্থির করে দিয়েছে ! ধন্যবাদ!
ক্রেগক্স

1
এটি দূরবর্তী শাখাকে xzyস্থানীয় শাখায় একীভূত করে master, যা মূল প্রশ্নের দ্বারা বোঝানো হয়নি; "আমি কীভাবে গিটহাব থেকে শাখা জাইজেড টানতে এবং এটিকে স্থানীয় স্থানীয় হোস্টের শাখা জাইজেডে একত্রী করতে পারি?"
ব্যবহারকারী5359531

301

আপনার দূরবর্তী শাখাগুলিকে স্পষ্টভাবে ট্র্যাক করুন এবং একটি সাধারণ git pullআপনি যা চান ঠিক তেমনটি করবে:

git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name

পরেরটি একটি স্থানীয় অপারেশন।

বা আরও বেশি ফিট করে গিটহাব ডকুমেন্টেশনের সাথে কাঁটাচামচ করা :

git branch -f new_local_branch_name upstream/remote_branch_name

39
আপনি যদি 'বৈধ অবজেক্টের নাম নন:' উত্স / দূরবর্তী_ব্রঞ্চ_নাম 'পান তবে প্রথমে' গিট আনুন উত্স 'করুন।
মার্টিন কোনিসেক

130

আপনি নিম্নলিখিত আদেশগুলি দিয়ে একটি শাখায় একটি শাখা টানতে পারেন।

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz

আপনি যখন মাস্টার শাখায় থাকবেন আপনি প্রথমে যেমন একটি শাখা চেকআউট করতে পারবেন:

git checkout -b xyz

এটি মাস্টার থেকে একটি নতুন শাখা "xyz" তৈরি করে এবং সরাসরি এটি পরীক্ষা করে দেখায়।

তারপরে আপনি:

git pull origin xyz

এটি আপনার স্থানীয় xyzশাখায় নতুন শাখা টানবে।


1
পারফেক্ট! আমি এই সিনট্যাক্সটি কেবল জানতাম না: গিট টান {রেপো {{রিমোটব্র্যাঙ্কনাম}: b লোকালব্রঞ্চম} প্রশ্ন, যদি সেই টানটি কাজ না করে (সম্ভবত কারও শাখাটি আপডেট হয়েছে এবং সেখানে সংহত বিবাদগুলি হতে পারে) আমার বিকল্পগুলি কী?
কোস্টা

7
আমি এটি হ্রাস করছি কারণ এটি দূরবর্তী শাখাকে আপনার বর্তমান শাখায় মার্জ করার চেষ্টা করে (যেমন মাস্টার)। এটি বেশিরভাগ লোকেরা যা করতে চায় তা নয় এবং ওপি যা চেয়েছিল তা নয়। @ মোহিতের উত্তর সঠিক পছন্দ।
ফ্রোগজ

1
ফ্রোগজ - দেখে মনে হচ্ছে গিটের সাম্প্রতিক সংস্করণগুলিতে এই আচরণটি পরিবর্তিত হয়েছে। আমি এটি আগে ব্যবহার করেছি এবং এটি পুরোপুরি ভালভাবে কাজ করেছে।
পবন

88

সবচেয়ে ভাল উপায়:

git checkout -b <new_branch> <remote repo name>/<new_branch>

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


37

আমি নিশ্চিত না যে আমি সমস্যাটি পুরোপুরি বুঝতে পেরেছি, তবে একটি বিদ্যমান শাখা টানা এইভাবে করা হয়েছে (কমপক্ষে এটি আমার পক্ষে কার্যকর হয় :)

git pull origin BRANCH

এটি ধরে নেওয়া হচ্ছে যে আপনার স্থানীয় শাখাটি উত্স / ব্রাঞ্চের বাইরে তৈরি করা হয়েছে।



8

সোজা কথায়, আপনি যদি গিটহাব থেকে শাখাটি টানতে চান the_branch_I_want:

git fetch origin
git branch -f the_branch_I_want origin/the_branch_I_want
git checkout the_branch_I_want

3
git pull <gitreponame> <branchname>

সাধারণত যদি আপনার কোডটিতে কেবল রেপো অর্পণ করা থাকে তবে গিটারপোনামটি মূল হবে।

আপনি যদি দুটি রেপোতে কাজ করছেন তবে এটির মতো স্থানীয় এবং অন্যটি রিমোটের জন্য যেমন আপনি গিট রিমোট -v থেকে রেপোর তালিকাটি পরীক্ষা করতে পারেন । এটি দেখায় যে আপনার বর্তমান কোডে কতটি রেপো নির্ধারিত হয়েছে।

ব্রাঞ্চনাম সংশ্লিষ্ট গিটারপোনামে থাকা উচিত।

আপনি রেপো যুক্ত করতে বা সরাতে নিম্নলিখিত দুটি কমান্ড ব্যবহার করতে পারেন

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>

2

আপনিও করতে পারেন

git pull -r origin master

যদি কোনও হয় তবে মার্জ সংঘাতগুলি ঠিক করুন

git rebase --continue

-r রিবেস এর জন্য। এটি আপনাকে থেকে শাখা কাঠামো তৈরি করবে

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

প্রতি

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch

এটি একটি ক্লিনার ইতিহাসের দিকে নিয়ে যাবে। দ্রষ্টব্য: আপনি যদি ইতিমধ্যে আপনার অন্যান্য শাখাটিকে উত্স (বা অন্য কোনও দূরবর্তী) এ ঠেলাঠেলি করেছেন তবে আপনাকে পুনঃবাসের পরে আপনার শাখাটি চাপ দিতে হবে।

git push -f origin other-branch

1

আমি করেছিলাম

git branch -f new_local_branch_name origin/remote_branch_name

পরিবর্তে

git branch -f new_local_branch_name upstream/remote_branch_name

যেমন @ ইন্নাএম পরামর্শ দিয়েছে। আমি যখন প্রবাহিত সংস্করণটি ব্যবহার করেছি, তখন এটি বলেছিল 'মারাত্মক: বৈধ অবজেক্টের নাম নয়:' আপস্ট্রিম / রিমোট_ব্র্যাঞ্চ_নাম ''। আমি করিনি git fetch originহিসেবে একটি মন্তব্য প্রস্তাব, কিন্তু এর পরিবর্তে কেবল প্রতিস্থাপিত upstreamসঙ্গে origin। আমি তাদের সমতুল্য অনুমান করি।


0

গিটহাব থেকে শাখাটি টানার জন্য আপনি ব্যবহার করতে পারেন

git checkout --track origin/the-branch-name

নিশ্চিত হয়ে নিন যে শাখার নামটি একই রকম।

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