git - 'গিট পুল' এবং 'গিট ফেচ' এর মধ্যে পার্থক্য কী?




git-pull git-fetch (25)

মডারেটর নোট: এই প্রশ্নটি ইতিমধ্যে 60 টি উত্তর পোস্ট করেছে (এদের মধ্যে কয়েকটি মুছে ফেলা হয়েছে), অন্য কোন পোস্ট করার আগে আপনি নতুন কিছু অবদান করছেন কিনা তা বিবেচনা করুন।

git pull এবং git fetch মধ্যে পার্থক্য কি?


Answers

মধ্যে শুধুমাত্র পার্থক্য git pullএবং git fetchযে:

git pull একটি দূরবর্তী শাখা থেকে pulls এবং এটি মার্জ।

git fetch শুধুমাত্র রিমোট শাখা থেকে fetches কিন্তু এটি একত্রিত না

অর্থাত্ গিট টান = জিট ফ্যাক্ট + গিট মার্জ ...


git pull = git fetch + git merge 

আমি পাশাপাশি এই সঙ্গে সংগ্রাম করেছেন। আসলে আমি ঠিক একই প্রশ্নের গুগল অনুসন্ধানের সাথে এখানে এসেছি। এই সমস্ত উত্তর পড়তে অবশেষে আমার মাথায় একটি ছবি আঁকেন এবং আমি এই সংস্করণটি দেখলে এটি 2 টি সংগ্রহস্থল এবং 1 টি স্যান্ডবক্সের অবস্থা এবং সময়টির সাথে সম্পাদিত ক্রিয়াকলাপগুলির দিকে তাকাতে চেষ্টা করার সিদ্ধান্ত নিয়েছি। তাই এখানে আমি সঙ্গে এসেছিলেন কি। আমি কোথাও messed যদি আমার সংশোধন করুন।

একটি আনয়ন সঙ্গে তিন repos:

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - fetch               -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     -                     -
- @ R01             -     - @ R01+              -     - @R01+               -
---------------------     -----------------------     -----------------------

একটি পুল সঙ্গে তিন repos

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - pull                -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     - merged with R02     -
- @ R01             -     - @ R01+              -     - @R02+               -
---------------------     -----------------------     -----------------------

এটি একটি fetch প্রশংসনীয় গুরুত্বপূর্ণ কেন আমাকে বুঝতে সাহায্য করে।


SVN এর মতো আরো একটি ঐতিহ্যগত উত্স নিয়ন্ত্রণ সরঞ্জাম দর্শনের সাথে জিটের নকশা দর্শনের বৈপরীত্যকে গুরুত্বপূর্ণ।

সাবস্ক্রাইব ডিজাইন এবং ক্লায়েন্ট / সার্ভার মডেল সঙ্গে নির্মিত হয়েছিল। সার্ভারের একটি একক সংগ্রহস্থল রয়েছে এবং অনেক ক্লায়েন্ট সার্ভার থেকে কোড আনতে পারে, এতে কাজ করে এবং সার্ভারে এটি ফেরত পাঠায়। ধারণাটি হল যে কোনও অপারেশন করার জন্য ক্লায়েন্ট সর্বদা সার্ভারের সাথে যোগাযোগ করতে পারে।

গিটটি একটি কেন্দ্রীয় সংগ্রহস্থলের জন্য কোনও প্রয়োজনীয় বিতরণ মডেলের সমর্থন করার জন্য ডিজাইন করা হয়েছে (যদিও আপনি যদি চান তবে অবশ্যই এটি ব্যবহার করতে পারেন)। এছাড়াও জিটটি ডিজাইন করা হয়েছে যাতে ক্লায়েন্ট এবং "সার্ভার" একই সময়ে অনলাইন হতে হয় না। গিটটি ডিজাইন করা হয়েছিল যাতে অবিশ্বস্ত লিঙ্কের লোকেরা ইমেলের মাধ্যমে কোড বিনিময় করতে পারে। সম্পূর্ণ সংযোগ বিচ্ছিন্ন করা এবং জিডি দিয়ে কোড বিনিময় করতে একটি সিডি পুড়িয়ে দেওয়া সম্ভব।

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

  • git fetch হ'ল কমান্ড যা "রিমোট রিপোজিটরির আমার স্থানীয় অনুলিপি আপ টু ডেট" বলছে।

  • git pull বলছে "রিমোট রিপোজিটরিতে পরিবর্তন আনা যেখানে আমি নিজের কোড রাখি।"

সাধারণত git pull git fetch রিমোট রিপোজিটরিটির স্থানীয় অনুলিপি আপ টু ডেট পর্যন্ত একটি git fetch করে এটি করে এবং তারপরে আপনার নিজের কোড সংগ্রহস্থল এবং সম্ভবত আপনার কার্যকারী অনুলিপিতে পরিবর্তনগুলিকে মার্জ করে।

আপনার ওয়ার্কস্টেশনটিতে প্রায়শই কমপক্ষে তিনটি কপি থাকে তা মনে রাখা। একটি অনুলিপি আপনার নিজস্ব কমিটির ইতিহাসের সাথে আপনার নিজস্ব সংগ্রহস্থল। দ্বিতীয় কপিটি আপনার সম্পাদনা কপি যেখানে আপনি সম্পাদনা করছেন এবং নির্মাণ করছেন। তৃতীয় কপিটি আপনার দূরবর্তী সংগ্রহস্থলের স্থানীয় "ক্যাশে" কপি।


রিমোট থেকে স্থানীয় সংস্করণে দুটি সংস্করণ ব্যবহার করে Git সর্বশেষ সংস্করণের শাখাটি গ্রহন করে:

  1. গিট আনয়ন: গিট রিমোট থেকে স্থানীয় থেকে সর্বশেষ সংস্করণ পেতে যাচ্ছে, কিন্তু এটি স্বয়ংক্রিয়ভাবে মার্জ হয় না। git fetch origin master git log -p master..origin/master git merge origin/master

    উপরের কমান্ডের মানে দূরবর্তী থেকে মূল মাস্টার শাখা থেকে মূল শাখাটির সর্বশেষ সংস্করণ ডাউনলোড করুন। এবং তারপর স্থানীয় মাস্টার শাখা এবং মূল মাস্টার শাখা তুলনা। অবশেষে, একত্রিত।

  2. গিট টান: গিট রিমোট থেকে সর্বশেষ সংস্করণ পেতে এবং স্থানীয় মধ্যে একত্রিত করা যাচ্ছে।

    git pull origin master

    উপরের কমান্ড সমতুল্য git fetchএবং git merge। অনুশীলনে, git fetchহয়তো আরও নিরাপদ কারণ মার্জ করার আগে আমরা পরিবর্তনগুলি দেখতে এবং একত্রিত হতে পারি কিনা তা নির্ধারণ করতে পারি।


প্রারম্ভিক জন্য একটি সহজ গ্রাফিকাল প্রতিনিধিত্ব,

এখানে,

git pull  

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

কিন্তু ,

গিট আনয়ন

সংগ্রহস্থল থেকে কোড আনতে হবে এবং আমরা এটি ব্যবহার করে ম্যানুয়ালি রিবেজ করতে হবে git rebase

উদাহরণস্বরূপ: আমি সার্ভার মাস্টার থেকে আনতে যাচ্ছি এবং আমার স্থানীয় মাস্টারে এটি পুনরায় বিনিময় করতে যাচ্ছি।

1) গিট পুল (রিবেস স্বয়ংক্রিয়ভাবে সম্পন্ন হবে):

git pull origin master

এখানে মূল আপনার রিমোট repo মাস্টার আপনার শাখা হয়

2) জিট fetch (ম্যানুয়ালি rebase প্রয়োজন):

git fetch origin master

এটি মূল থেকে সার্ভার পরিবর্তন আনা হবে। এবং এটি আপনার স্থানীয় অবস্থায় থাকবে যতক্ষন না আপনি এটি নিজের উপর রিবেস না করেন। আমরা কোড চেক করে দ্বন্দ্ব ঠিক করতে হবে।

git rebase origin/master

এই স্থানীয় মধ্যে কোড রিবেস হবে। তার আগে আপনি সঠিক শাখায় আছেন তা নিশ্চিত করার আগে।


সংক্ষেপে

git fetch pull অনুরূপ কিন্তু মার্জ না। অর্থাৎ এটি দূরবর্তী আপডেটগুলি ( refs এবং objects ) গ্রহণ করে তবে আপনার স্থানীয় একই থাকে (অর্থাত origin/master আপডেট হয়ে যায় তবে master একই থাকে)।

git pull একটি রিমোট থেকে নিচে pulls এবং অবিলম্বে মার্জ।

অধিক

git clone ক্লোন একটি repo।

git rebase আপনার বর্তমান শাখা থেকে স্টাফ সঞ্চয় করে যা একটি অস্থায়ী এলাকাতে আপস্ট্রিম শাখায় নেই। আপনি আপনার পরিবর্তন শুরু করার আগে আপনার শাখা এখন একই। সুতরাং, git pull -rebase দূরবর্তী পরিবর্তনগুলি টেনে আনবে, আপনার স্থানীয় শাখাটি রিউন্ড করুন, আপনার বর্তমান শাখার উপরের অংশে আপনার পরিবর্তনগুলিকে একবারে আপ টু ডেট না করে পুনঃপুন করুন।

এছাড়াও, git branch -a আপনাকে আপনার সমস্ত শাখাগুলি - স্থানীয় এবং দূরবর্তী git branch -a কী চলছে তা দেখাবে।

এই ব্লগ পোস্ট দরকারী ছিল:

গিট টান, গিট আনয়ন এবং গিট ক্লোন মধ্যে পার্থক্য (এবং গিট রিবেস) - মাইক Pearce

এবং git pull , git fetch , git clone এবং git rebase জুড়ে।

====

হালনাগাদ

আমি ভেবেছিলাম এটি আসলে কীভাবে আপনি অনুশীলনে ব্যবহার করবেন।

  1. রিমোট থেকে আপনার স্থানীয় রেপো আপডেট করুন (কিন্তু মার্জ করবেন না):

    গিট আনয়ন

  2. আপডেট ডাউনলোড করার পর, পার্থক্য দেখতে দিন:

    গিট diff মাস্টার মূল / মাস্টার

  3. আপনি যদি সেই আপডেটগুলির সাথে খুশি হন তবে মার্জ করুন:

    গিট টান

নোট:

ধাপ 2: স্থানীয় ও দূরবর্তীগুলির মধ্যে পার্থক্যগুলির জন্য আরও দেখুন, দূরবর্তী শাখার সাথে স্থানীয় গিট শাখাকে তুলনা করুন?

ধাপ 3: এটি সম্ভবত আরও সঠিক (যেমন একটি দ্রুত পরিবর্তিত রেপোতে) এখানে একটি git rebase origin । @ জাস্টিন ওহস অন্য উত্তরটিতে মন্তব্য দেখুন।

আরও দেখুন: longair.net/blog/2009/04/16/git-fetch-and-merge


git fetch একটি ব্যবহার ক্ষেত্রে এটি আপনাকে আপনার শেষ টান থেকে রিমোট শাখায় কোনও পরিবর্তন দেখাবে ... তাই আপনি একটি প্রকৃত পুল করার আগে পরীক্ষা করতে পারেন, যা আপনার বর্তমান শাখায় ফাইলগুলি এবং কাজ কপি পরিবর্তন করতে পারে।

git fetch
git diff ...origin

আমরা কেবল বলি:

git pull == git fetch + git merge

যদি আপনি চালান git pull, আপনি স্থানীয় তথ্য ডেটা মার্জ করতে হবে না। আপনি যদি রান করেন git fetchতবে এর অর্থ হল git mergeআপনার স্থানীয় মেশিনে সর্বশেষ কোড পাওয়ার জন্য আপনাকে অবশ্যই চালানো উচিত । অন্যথায়, স্থানীয় মেশিন কোড মার্জ ছাড়া পরিবর্তন করা হবে না।

সুতরাং গিট গুইতে, আপনি যখন fetch করবেন, তখন আপনাকে ডেটা মার্জ করতে হবে। নিজেই আনতে আপনার স্থানীয় কোড কোড পরিবর্তন করা হবে না। আপনি যখন একবার fetch এবং দেখতে fetching করে কোডটি আপডেট করেন তখন এটি পরীক্ষা করতে পারেন; কোড পরিবর্তন হবে না। তারপর আপনি একত্রিত ... আপনি পরিবর্তন কোড দেখতে হবে।


কখনও কখনও একটি চাক্ষুষ উপস্থাপনা সাহায্য করে।


git fetchরিমোট সার্ভার থেকে আপনার স্থানীয় সংগ্রহস্থলে আপনার ট্র্যাকিং শাখায় কোডটি টেনে আনেন। আপনার রিমোটের নামকরণ করা হয় তাহলে origin(ডিফল্ট) তাহলে এই শাখা মধ্যে হতে হবে origin/, উদাহরণস্বরূপ origin/master, origin/mybranch-123ইত্যাদি.এই আপনার বর্তমান শাখা তারা নয়, স্থানীয় সার্ভার থেকে ঐ শাখা কপি।

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


git-pull - Fetch from and merge with another repository or a local branch
SYNOPSIS

git pull   …
DESCRIPTION

Runs git-fetch with the given parameters, and calls git-merge to merge the 
retrieved head(s) into the current branch. With --rebase, calls git-rebase 
instead of git-merge.

Note that you can use . (current directory) as the <repository> to pull 
from the local repository — this is useful when merging local branches 
into the current branch.

Also note that options meant for git-pull itself and underlying git-merge 
must be given before the options meant for git-fetch.

আপনি যদি ইতিহাসগুলি একত্রিত করতে চান তবে আপনি টেনে আনবেন, যদি আপনি কেবল 'কোডজ চান তবে' আনতে পারেন, কারণ কিছু ব্যক্তি এখানে কিছু নিবন্ধ ট্যাগ করেছেন।


সংক্ষিপ্ত এবং সহজ উত্তর যে git pull সহজভাবে git merge দ্বারা অনুসরণ git fetch হয়।

এটা মনে রাখা খুবই গুরুত্বপূর্ণ যে git pull স্বয়ংক্রিয়ভাবে মার্জ হবে কিনা তা আপনি পছন্দ করেন না । এই, অবশ্যই, দ্বন্দ্ব একত্রিত হতে পারে। চলুন আপনার রিমোটটি origin এবং আপনার শাখাটি master । আপনি যদি git diff origin/master পারার আগে git diff origin/master তবে আপনার সম্ভাব্য একত্রীকরণ বিরোধের কিছু ধারণা থাকা উচিত এবং সেই অনুযায়ী আপনার স্থানীয় শাখাটি প্রস্তুত করতে পারে।

টানতে এবং ধাক্কা দেওয়ার পাশাপাশি, কিছু কার্যপ্রবাহের মধ্যে git rebase জড়িত থাকে, যেমন এইটি, যা আমি লিঙ্কযুক্ত নিবন্ধ থেকে তুলে ধরেছি:

git pull origin master
git checkout foo-branch
git rebase master
git push origin foo-branch

আপনি যদি এমন অবস্থায় নিজেকে খুঁজে পান, তবে আপনি git pull --rebase প্রলুব্ধ হতে পারেন। যদি না আপনি সত্যিই, আপনি কি করছেন সত্যিই জানি, আমি যে বিরুদ্ধে পরামর্শ হবে। এই সতর্কতাটি 2.3.5 git-pull 2.3.5 জন্য man পৃষ্ঠা git-pull , সংস্করণ 2.3.5 :

এটি অপারেশন একটি সম্ভাব্য বিপজ্জনক মোড। এটি ইতিহাস পুনর্লিখন করে, যা আপনি ইতিমধ্যে ইতিহাস প্রকাশিত যখন ভাল bode না। আপনি git-rebase (1) সাবধানে পড়া না থাকলে এই বিকল্পটি ব্যবহার করবেন না।


git fetchরিমোট শাখাগুলি পুনরুদ্ধার করবে যাতে আপনি বর্তমান শাখার সাথে git diffবা git mergeতাদের সাথে করতে পারেন । git pullবর্তমান শাখা দ্বারা ট্র্যাক দূরবর্তী brach উপর fetch চালানো এবং তারপর ফলাফল মার্জ হবে। git fetchদূরবর্তী শাখায় কোনও আপডেট থাকলে আপনার স্থানীয় শাখার সাথে মেলামেশা করার জন্য আপনি এটি ব্যবহার করতে পারেন।


গিট ক্রমবর্ধমান পুরোনো কমিট নতুন commits পরে প্রয়োগ করা যাবে। এই কারণে, রিপোজিটোরির মধ্যে সঞ্চালনের কাজটি দুটি ধাপে বিভক্ত করা হয়:

  1. দূরবর্তী শাখা থেকে স্থানীয় রিপোর ভিতরে এই দূরবর্তী শাখার অনুলিপি করার জন্য নতুন কমিটির অনুলিপি করা হচ্ছে।

    (repo অপারেশন repo) [email protected] >> remote/origin/[email protected]

  2. স্থানীয় শাখা নতুন commits সংহত

    (ভিতরে-রেপ অপারেশন) remote/origin/[email protected] >> [email protected]

পদক্ষেপ 2 করার দুটি উপায় আছে। আপনি যা করতে পারেন:

  1. গত সাধারণ পূর্বপুরুষের পরে ফর্কে স্থানীয় শাখা এবং স্থানীয় রিপোজিটরির জন্য অনন্য যা কমিটির সমান্তরালভাবে নতুন কিছু যোগ করে, ফাঁকা বন্ধ করে চূড়ান্ত করা হয়।
  2. শেষ সাধারণ পূর্বপুরুষের পরে নতুন কমিটগুলি সন্নিবেশ করান এবং স্থানীয় সংগ্রহস্থলের অনন্যটি পুনরায় প্রয়োগ করুন।

ইন gitপরিভাষা, ধাপ 1 git fetch, ধাপ 2 git mergeবাgit rebase

git pullহয় git fetchএবংgit merge


GIT Fetch এবং GIT Pull এর মধ্যে পার্থক্যটি নিম্নলিখিত দৃশ্যকল্পের সাথে ব্যাখ্যা করা যেতে পারে: (মনে রাখবেন ছবিগুলি শব্দগুলির চেয়ে বেশি শব্দ করে !, আমি চিত্রিত উপস্থাপনা প্রদান করেছি)

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

সুতরাং, যখন আপনি আপনার স্থানীয় সংগ্রহস্থলে মূল প্রকল্পটি ফোরক করে থাকেন তখন দুটি শাখার প্রাথমিক রাজ্য এটির মতো হবে ( A, Bএবং Cমডিউলে ইতিমধ্যে প্রকল্পটি সম্পন্ন হয়)

এখন, আপনি নতুন মডিউল (অনুমান করা কাজ শুরু করেছি D) এবং আপনার পরিস্থিতির সম্পন্ন যখন Dমডিউল আপনাকে প্রধান শাখা থেকে এটি ধাক্কা চাই, কিন্তু এদিকে সেখানে কি ঘটছে আপনার সতীর্থদের এক নতুন মডিউল বিকশিত করেছেন E, Fএবং পরিবর্তন C
তাই এখন কি ঘটেছে যে আপনার স্থানীয় সংগ্রহস্থলে প্রকল্পটির মূল অগ্রগতির পিছনে অভাব রয়েছে এবং এইভাবে আপনার পরিবর্তনগুলি প্রধান শাখাতে ঠেলে দেওয়ার ফলে দ্বন্দ্ব হতে পারে এবং আপনার মডিউলটি Dত্রুটিযুক্ত হতে পারে ।

এ ধরনের সমস্যাগুলি এড়ানোর জন্য এবং প্রকল্পের মূল অগ্রগতির সাথে সমান্তরালভাবে কাজ করার জন্য দুটি উপায় রয়েছে:

1. Git Fetch- এটি আপনার স্থানীয় শাখায় উপস্থিত নয় এমন মূল / মূল শাখা প্রকল্পে করা সমস্ত পরিবর্তনগুলি ডাউনলোড করবে। এবং আপনার রিপোজিটরি বা শাখায় আনা যে পরিবর্তনগুলি প্রয়োগ করতে Git Merge কমান্ডের জন্য অপেক্ষা করবে।

তাই এখন আপনি আপনার রিপোজিটরিতে এটি মার্জ করার আগে সাবধানে ফাইলগুলি নিরীক্ষণ করতে পারেন। এবং Dপরিবর্তিত কারণে আপনি যদি সংশোধন করতে পারেন C

2. গিট পুল - এটি আপনার স্থানীয় শাখাকে মূল / মূল শাখা দিয়ে আপডেট করবে যা আসলে এটি যা করে তা Git Fetch এবং Git এর সাথে একত্রিত হয়। কিন্তু এই সংঘর্ষ ঘটতে পারে কারণ, তাই এটি একটি পরিষ্কার অনুলিপি সঙ্গে গিট পল ব্যবহার করার পরামর্শ দেওয়া হয়।


পার্থক্য কি ছিল তা বোঝার জন্য আমার একটু খরচ হয়েছিল, কিন্তু এটি একটি সহজ ব্যাখ্যা। আপনার localhost master একটি শাখা।

যখন আপনি একটি সংগ্রহস্থল ক্লোন করেন তখন আপনি স্থানীয় হোস্টে পুরো সংগ্রহস্থলটি আনেন। এর অর্থ হ'ল সেই সময়ে আপনার HEAD থেকে মূল / মাস্টার পয়েন্টার এবং একই HEAD দিকে নির্দেশকারী মাস্টার।

যখন আপনি কাজ শুরু করেন এবং সম্মতি দেন আপনি মাস্টার পয়েন্টারকে HEAD + আপনার HEAD অগ্রিম অগ্রসর করুন। কিন্তু মূল / মাস্টার পয়েন্টারটি এখনও ক্লোন করার সময় এটির দিকে নির্দেশ করে।

সুতরাং পার্থক্য হবে:

  • আপনি যদি একটি git fetch করবেন তবে এটি রিমোট রিপোজিটরি ( GitHub ) এ সমস্ত পরিবর্তন আনবে এবং মূল / মাস্টার পয়েন্টারকে HEAD সরানো হবে। এদিকে আপনার স্থানীয় শাখা মাস্টার এটা যেখানে নির্দেশ করা হবে।
  • আপনি যদি একটি git pull এটি মূলত আনতে হবে (যেমন আগে ব্যাখ্যা করা হয়েছে) এবং আপনার মাস্টার শাখায় কোনও নতুন পরিবর্তনগুলি মার্জ করুন এবং পয়েন্টারকে HEAD সরান।

এই ইন্টারেক্টিভ গ্রাফিকাল উপস্থাপনাটি গিট বোঝার ক্ষেত্রে খুব সহায়ক: http://ndpsoftware.com/git-cheatsheet.html

রিমোট থেকে রিমোট থেকে আপনার স্থানীয় রিপোজিটরিতে পরিবর্তনগুলি "ডাউনলোড" git fetch করে। git pull পরিবর্তন ডাউনলোড এবং আপনার বর্তমান শাখায় তাদের মার্জ। "এর ডিফল্ট মোডে, git pull git merge FETCH_HEAD জন্য শর্ট্যান্ড্যান্ড যা git merge FETCH_HEAD করে অনুসরণ করে।"



গিট টান == (জিট fetch + গিট মার্জ)

জিট fetch স্থানীয় শাখা পরিবর্তন করে না।

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


আপনি একটি রিমোট রিপোজিটরি থেকে fetch করতে পারেন, পার্থক্যগুলি দেখতে এবং তারপর টানুন বা মার্জ করুন।

এটি একটি দূরবর্তী সংগ্রহস্থলের উদাহরণ এবং একটি শাখা যা দূরবর্তী শাখা origin/master master ট্র্যাকিং নামে একটি শাখার উদাহরণ:

git checkout master                                                  
git fetch                                        
git diff origin/master
git rebase origin master

প্রকৃতপক্ষে Git আপনার নিজস্ব কোড এবং দূরবর্তী সংগ্রহস্থলের একটি অনুলিপি বজায় রাখে।

কমান্ড git fetchরিমোট রিপোজিটরি থেকে তথ্য পেয়ে আপনার স্থানীয় অনুলিপি আপ টু ডেট করে। আমাদের এই কারণটি দরকার কারণ অন্য কেউ কোডটিতে কিছু পরিবর্তন করেছে এবং আপনি নিজেকে আপডেট রাখতে চান।

কমান্ড git pullরিমোট রিপোজিটরিতে পরিবর্তনগুলি এনে দেয় যেখানে আপনি নিজের কোড রাখেন। সাধারণত, git pullরিমোট রিপোজিটরিটির স্থানীয় অনুলিপি আপ টু ডেট করার জন্য প্রথমে এটি 'গিট ফ্যাক্ট' করে, এবং তারপরে এটি আপনার নিজের কোড সংগ্রহস্থল এবং সম্ভবত আপনার কার্যকারী অনুলিপিতে পরিবর্তনগুলি মঞ্জুর করে।


  • আপনি যখন পুলটি ব্যবহার করেন, Git স্বয়ংক্রিয়ভাবে আপনার জন্য আপনার কাজ করার চেষ্টা করে। এটি প্রসঙ্গ সংবেদনশীল , তাই Git আপনি বর্তমানে যে শাখায় কাজ করছেন সেটিতে যে কোনও টানা সঙ্কুচিত অংশকে একত্রিত করবে। স্বয়ংক্রিয়ভাবে আপনি তাদের পর্যালোচনা না করেই স্বয়ংক্রিয়ভাবে মার্জগুলি pull আনুন । আপনি যদি আপনার শাখাগুলি ঘনিষ্ঠভাবে পরিচালনা না করেন তবে আপনি ঘন ঘন দ্বন্দ্বের মধ্যে যেতে পারেন।

  • আপনি যখন fetch , Git আপনার বর্তমান শাখায় বিদ্যমান না এমন লক্ষ্য শাখার যে কোনও কৃতিত্ব সংগ্রহ করে এবং আপনার স্থানীয় সংগ্রহস্থলে সঞ্চয় করে । তবে, এটি আপনার বর্তমান শাখা দিয়ে মার্জ করে না । আপনি যদি আপনার রিপোজিটরি আপ টু ডেট রাখতে চান তবে এটি বিশেষভাবে উপকারী, তবে আপনি যদি আপনার ফাইলগুলি আপডেট করেন তবে এমন কিছু কাজ করতে পারে যা বিরতিতে পারে। আপনার মাস্টার শাখা মধ্যে commits সংহত করার জন্য, আপনি merge ব্যবহার করুন।


বোনাস:

উপরোক্ত উত্তরের মধ্যে টান এবং fetch কথা বলতে, আমি একটি মজার কৌশল শেয়ার করতে চাই,

git pull --rebase

এই উপরের কমান্ড আমার গিট জীবনের সবচেয়ে দরকারী কমান্ড যা অনেক সময় বাঁচায়।

আপনার নতুন সার্ভার সার্ভারে push করার আগে, এই কমান্ডটি চেষ্টা করুন এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষ সার্ভার পরিবর্তনগুলি সিঙ্ক করবে (একটি আনয়ন + মার্জ সহ) এবং গিট লগের উপরে আপনার সংঘটিত স্থানটি রাখবে। ম্যানুয়াল পুল / মার্জ সম্পর্কে চিন্তা করার কোন প্রয়োজন নেই।

বিস্তারিত জানতে এখানে ক্লিক করুন: http://gitolite.com/git-pull--rebase


এটি একটি রিমোট DWIM উত্স ( documentation ) জন্য DWIM করবে:

$ git checkout -t remote_name/remote_branch

একটি নতুন রিমোট যোগ করার জন্য আপনাকে প্রথমে নিম্নলিখিতটি করতে হবে:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

প্রথম রিমোট বিদ্যমান জিট বলে, দ্বিতীয় commits পায়।





git git-pull git-fetch