আপনি কীভাবে সর্বদা একটি নির্দিষ্ট শাখা থেকে টানতে পারেন?


485

আমি গিট মাস্টার নই, তবে বেশ কিছু বিভিন্ন প্রকল্প নিয়ে আমি বেশ কিছুদিন ধরে এটি নিয়ে কাজ করছি। প্রতিটি প্রকল্পে আমি সর্বদা git clone [repository]এবং সেদিক থেকে সর্বদা পারি git pull, যতক্ষণ না আমার অবশ্যই অসামান্য পরিবর্তন হয় না changes

সম্প্রতি, আমাকে একটি পূর্ববর্তী শাখায় ফিরে যেতে হয়েছিল, এবং এটি দিয়েও হয়েছিল git checkout 4f82a29। যখন আমি আবার টানতে প্রস্তুত ছিলাম, আমি দেখতে পেলাম যে আমাকে আমার শাখাটি মাস্টারে ফিরে যেতে হবে। এখন, আমি একটি সোজা ব্যবহার করে টানতে পারি না git pullপরিবর্তে, নির্দিষ্ট করতে হবে git pull origin masterযা বিরক্তিকর, এবং আমাকে ইঙ্গিত করে যে আমি কী চলছে তা পুরোপুরি বুঝতে পারছি না।

কী এমন পরিবর্তন হয়েছে যা git pullমূল উত্সকে নির্দিষ্ট না করে আমাকে সোজা করার অনুমতি দেয় না এবং আমি কীভাবে এটি আবার পরিবর্তন করব?

হালনাগাদ:

-bash-3.1$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "origin"]
    url = git@github.com:user/project.git
    fetch = refs/heads/*:refs/remotes/origin/*

আপডেট 2: স্পষ্ট করে বলার জন্য, আমি বুঝতে পারি যে আমার মূল পদ্ধতিটি ভুল হতে পারে, তবে আমাকে এই রেপো ঠিক করা দরকার যাতে আমি কেবল git pullআবার ব্যবহার করতে পারি। বর্তমানে, গিট টান ফলাফল:

-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull  ').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote = 
    branch.master.merge = 
    remote..url = 
    remote..fetch = 

See git-config(1) for details.

আমি git pullকোন শাখাটি মার্জ করতে হবে তা বলতে পারি এবং এটি সঠিকভাবে git pullকাজ করে তবে এটি আমার আগে যেমন কাজ করেছিল তেমন কাজ করে না git checkout


আপনার .git / কনফিগার দেখতে কেমন? এই প্রতিশ্রুতিটি পরীক্ষা করে দেখার পরে আপনি কী করলেন?
রায়ান গ্রাহাম

আপনি কি 4f82a29 শীর্ষে কমিট করেছেন?
প্যাট নটজ

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

2
রায়ান, .git / কনফিগারেশন অন্তর্ভুক্ত করার জন্য আমি আপডেট করেছি। চেকআউট করার পরে, আমি কিছু করিনি। এই কম্পিউটারটি একটি সার্ভার, উন্নয়নের জন্য নয়।
ডেভিড স্মিথ

উত্তর:


730

এর অধীনে [branch "master"], রেপোর গিট কনফিগারেশন ফাইলে ( .git/config) এ নিম্নলিখিতগুলি যুক্ত করার চেষ্টা করুন :

[branch "master"]
    remote = origin
    merge = refs/heads/master

এটি গিটকে 2 টি জিনিস বলে:

  1. আপনি যখন মাস্টার শাখায় থাকবেন তখন ডিফল্ট দূরবর্তীটি উত্স।
  2. যখন ব্যবহার git pullমাস্টার ডালে, কোন প্রত্যন্ত ও শাখা নির্দিষ্ট করা, দূরবর্তী মাস্টার শাখা থেকে পরিবর্তন ডিফল্ট দূরবর্তী (মূল) এবং একত্রীকরণ ব্যবহার করুন।

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

আপনি যদি নিজের হাতে কনফিগার ফাইলটি সম্পাদনা করতে না চান তবে আপনি পরিবর্তে কমান্ড-লাইন সরঞ্জামটি ব্যবহার করতে পারেন:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

2
এটি আমার পক্ষেও কাজ করেছিল, আমি গিথুব থেকে একটি প্রকল্প পরীক্ষা করে দেখেছি। আমি ওএস এক্স 10.4 চালাচ্ছি
স্যাম বার্নাম

আপনাকে ধন্যবাদ খুব অনেক - এই একটি "সার্ভার" সংগ্রহস্থল এবং দুই কম্পিউটার (যা আমি সামান্য ত্রুটি সামনে কোন বিষয় নিয়ে ঘন ঘন ধাক্কা / পুল ব্যবহৃত) সঙ্গে একটি একক ডেভেলপার প্রকল্পে আমার ঘটেছে, কেন জানি না, কিন্তু ফিক্স কাজ জরিমানা!
চেস্টারব্র

1
আন্ডার [শাখা "মাস্টার"] দ্বারা আপনি কী বোঝাতে চাইছেন
ianj

3
@ianj: গিট কনফিগারেশন ফাইলে (রেপো রুট থেকে .git/config)।
মিপাদি

1
@ianj: কমান্ড লাইন থেকে, আপনি সর্বদা এর $ git config branch.master.remote origin ; git config branch.master.merge refs/heads/masterপরিবর্তে করতে পারেন ।
মিপাদি

139

যদি আপনি পছন্দ করেন তবে আপনি কম্যান্ড লাইনের মাধ্যমে এই বিকল্পগুলি সেট করতে পারেন (কনফিগার ফাইলটি সম্পাদনার পরিবর্তে):

  $ git config branch.master.remote origin
  $ git config branch.master.merge refs/heads/master

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

  $ git config --global branch.master.remote origin
  $ git config --global branch.master.merge refs/heads/master

12
"রেফ / মাথা / মাস্টার" ম্যাজিক শব্দটি জানার জন্য +1 ভেরিয়েবলটি কীভাবে সেট করবেন তা নির্ধারণ করতে আমার কোনও অসুবিধা হয়নি, তবে কী সেট করতে হবে তা সম্পর্কে কোনও ধারণা নেই , এবং ম্যান পেজগুলি খুব বেশি সহায়ক ছিল না। আমি এই উত্তরটি খুঁজে পাওয়ার পরে অবশেষে ডক্সে সঠিক জায়গাটি পেয়েছি। কৌতূহলের জন্য: ম্যাজিক শব্দটি এমন একটি ফাইল পাথকে বোঝায় .gitযেখানে গিটটি masterবর্তমান কমিটের হ্যাশ কোডটি রাখে ।
মোকস

84
git branch --set-upstream master origin/master

এটি আপনার configফাইলে নিম্নলিখিত তথ্য যুক্ত করবে :

[branch "master"]
    remote = origin
    merge = refs/heads/master

আপনার যদি থাকে branch.autosetuprebase = alwaysতবে এটি যুক্ত করবে:

    rebase = true

1
আমি অনুরোধের মতো গিট আচরণ করার সহজতম উপায়টি খুঁজে পেয়েছি, বিশেষত যদি আরও প্রত্যন্ত নয়, কেবল প্রত্যন্ত নয় (এমনকি প্রতিটি শাখার জন্য আপনাকে এটি করতে হয় তবে এটি শাখায় এক সময় হয়)
s3v3n

2
আমি কেবল এটি চেষ্টা করেছি এবং আমি বৈধ রিমোট fatal: Not a valid object name: 'origin/master'.হলেও ত্রুটিটি পেয়েছি originএবং masterযথারীতি দু'দিকেই উপস্থিত রয়েছে।
কেন উইলিয়ামস

2
কেন, দূরবর্তী শাখার নাম পেতে আপনাকে প্রথমে "গিট ফ্যাচ আদি" করতে হবে।
এরিক লি

14
নতুন গিট আপনি ব্যবহার করতে চান git branch --set-upstream-to=origin/master master
অরব্যাকস্ট

52

মিপাডির এবং ক্যাসির উত্তরগুলির মতো সঠিক git configবা git branchতর্কগুলি মনে রাখা আমার পক্ষে কঠিন মনে হয় , তাই আমি এই 2 টি কমান্ড আপস্ট্রিম রেফারেন্স যুক্ত করতে ব্যবহার করি:

git pull origin master
git push -u origin master

এটি আপনার .git / কনফিগারেশনে একই তথ্য যুক্ত করবে, তবে মনে রাখা এটি আমার কাছে সহজ মনে হয়েছে।


1
আমি রাজী. এটি সর্বোত্তম সহজ উত্তর হওয়া উচিত।
লিনবিয়ান্সিয়াওকাও

2
আপনার উত্তরে এটি কেন কাজ করে তা অন্তর্ভুক্ত করা উচিত এবং ডক্সের বিভাগটি উল্লেখ করা উচিত যা এটি ব্যাখ্যা করে।
ভিএফক্লিস্টরা

24

গিট টান দুটি ক্রিয়াকে একত্রিত করে - ট্র্যাক করা শাখাগুলিতে দূরবর্তী সংগ্রহশালা থেকে নতুন কমিটস আনতে এবং সেগুলি আপনার বর্তমান শাখায় মার্জ করে।

আপনি যখন কোনও নির্দিষ্ট প্রতিশ্রুতিটি পরীক্ষা করে দেখেন, আপনার বর্তমান শাখা নেই, আপনার কেবলমাত্র শেষ করা প্রতিশ্রুতিটি নির্দেশ করে শিরোনাম। সুতরাং এর git pullসমস্ত পরামিতি নির্দিষ্ট করা নেই। এ কারণেই এটি কার্যকর হয়নি।

আপনার আপডেট হওয়া তথ্যের ভিত্তিতে, আপনি যা করার চেষ্টা করছেন তা হ'ল আপনার রিমোট রেপোকে ফিরিয়ে আনতে। আপনি যদি বাগটি প্রবর্তন করে এমন প্রতিশ্রুতিটি জানেন, তবে এটি পরিচালনা করার সবচেয়ে সহজ উপায় হ'ল git revertএকটি নতুন প্রতিশ্রুতি রেকর্ড করা যা নির্দিষ্ট বাগী প্রতিশ্রুতিটিকে পূর্বাবস্থায় ফিরিয়ে দেয়:

$ git checkout master
$ git reflog            #to find the SHA1 of buggy commit, say  b12345
$ git revert b12345
$ git pull
$ git push

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

যদি বাগটি মার্জ কমিটে প্রবর্তিত হয়, তবে এই পদ্ধতিটি কার্যকর হবে না। দেখুন কিভাবে-থেকে-প্রত্যাবর্তন-এ-ত্রুটিপূর্ণ-একত্রীকরণ


আপনি এখানে আমাকে কিছু দুর্দান্ত শিক্ষা দিচ্ছেন, যা আমি প্রশংসা করি, তবে আমি আমার পরিস্থিতি খুব ভালভাবে বর্ণনা করছি না, সুতরাং এটি আমার কর্মপ্রবাহের সাথে কোনও সঠিক মিল নয়। আমি সম্ভবত এটির জন্য আরও একটি প্রশ্ন পোস্ট করব। ধন্যবাদ যদিও, পল! আপনাকে +1, স্যার।
ডেভিড স্মিথ

আমি আপনার পরিস্থিতি ভুলভাবে লিখেছি। আপনার খুশী উত্তরটি পেয়েছি বলে আমি আনন্দিত।
পল

12

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

বর্তমান কার্যনির্বাহী ডিরেক্টরিগুলির উপরে পরবর্তী সংগ্রহস্থলের জন্য:

git config branch.autosetupmerge true

সমস্ত গিট সংগ্রহস্থলের জন্য, যা অন্যথায় কনফিগার করা হয়নি:

git config --global branch.autosetupmerge true

জাদু কাইন্ড, এই প্রোগ্রামটিতে কিন্তু ক্ষেত্রে এই শক্তি সাহায্যের যেখানে নির্দিষ্ট শাখা হল সবসময় বর্তমান শাখা

আপনি যখন প্রথমবার কোনও শাখাটি branch.autosetupmergeস্থাপন trueএবং চেকআউট করবেন, তখন গিট আপনাকে সংশ্লিষ্ট দূরবর্তী শাখার সন্ধানের জন্য বলবে:

(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

গিট এর পরে স্বয়ংক্রিয়ভাবে সংশ্লিষ্ট শাখায় চাপ দেবে:

(gh-pages)$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To git@github.com:bigben87/webbit.git
   1bf578c..268fb60  gh-pages -> gh-pages

10

আমার গিট কনফিগারেশন ফাইলটি সম্পাদনা করতে চাইছেন না আমি @ মিপাডির পোস্টে তথ্য অনুসরণ করেছি এবং ব্যবহার করেছি:

$ git pull origin master

13
মূল বিষয়টি এটি নির্দিষ্ট করার চেয়ে স্বয়ংক্রিয়ভাবে এটি করা ছিল।
এরিক 21

4

এটিকে কীভাবে টানা মাস্টার তৈরি করবেন আপনার তাত্ক্ষণিক প্রশ্ন, এটি যা বলে তা আপনার করা দরকার। আপনার ব্রাঞ্চ কনফিগারেশনে থেকে রেফস্পেকটি টানতে নির্দিষ্ট করুন।

[branch "master"]
    merge = refs/heads/master

এটি "রেফ / মাথা / মাস্টার" হওয়া উচিত নয়? গিট-পুল (1) অনুসারে, এটি দূরবর্তী সাইটে শাখার নাম যা ডিফল্টরূপে মার্জ করা হয়।
অ্যাডাম মনসেন

হ্যাঁ, আপনি ঠিক বলেছেন। যে রেপো আমি আমার উদাহরণটি নিয়েছি তা একটি বিশেষ ঘটনা। সংশোধন।
রায়ান গ্রাহাম

0

কেবল কিছু তথ্য যুক্ত করতে চেয়েছিলাম যে, আমরা কোনও তথ্য git pullস্বয়ংক্রিয়ভাবে কোনও শাখায় উল্লেখ করে কিনা তা এই তথ্যটি পরীক্ষা করতে পারি ।

আপনি নিম্নলিখিত কমান্ডটি প্রয়োগ পারেন, git remote show originএই তথ্য (দূরবর্তী সংক্ষিপ্ত নামের উৎপত্তি অভিমানী), Git শো, যেকোনো ডিফল্ট রেফারেন্সের জন্য বিদ্যমান কিনা git pullবা না।

নীচে একটি নমুনা আউটপুট। (গিট ডকুমেন্টেশন থেকে নেওয়া)।

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/schacon/ticgit
  Push  URL: https://github.com/schacon/ticgit
  HEAD branch: master
  Remote branches:
    master                               tracked
    dev-branch                           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

দয়া করে যে অংশটি দেখায় সেখানে নোট করুন, গিট টানার জন্য স্থানীয় শাখাটি কনফিগার করা হয়েছে।

এই ক্ষেত্রে, git pullউল্লেখ করা হবেgit pull origin master

প্রাথমিকভাবে, আপনি যদি গিট ক্লোন ব্যবহার করে ভান্ডারটি ক্লোন করে ফেলে থাকেন তবে এই জিনিসগুলি স্বয়ংক্রিয়ভাবে যত্ন নেওয়া হয়। আপনি যদি গিট রিমোট অ্যাড ব্যবহার করে ম্যানুয়ালি একটি রিমোট যুক্ত করে থাকেন তবে এগুলি গিট কনফিগারেশন থেকে নিখোঁজ রয়েছে। যদি এটি হয় তবে যে অংশটি এটি "'গিট টান' জন্য কনফিগার করা স্থানীয় শাখা:" দেখায়, এর আউটপুট থেকে অনুপস্থিত হবে git remote show origin

পরবর্তী ধাপগুলি অনুসরণ করার জন্য যদি কোনও কনফিগারেশন উপস্থিত না থাকে তবে git pullঅন্যান্য উত্তর দ্বারা ইতিমধ্যে ব্যাখ্যা করা হয়েছে।

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