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


11908

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


364
আমি গিট আনার বিষয়ে এই লিখিত নিবন্ধটি পেয়েছি এবং গিট টান পড়ার পক্ষে এটি মূল্যবান: লংএয়ার.net
মার্কোস অলিভিরা

50
আমাদের বিকল্প পদ্ধতি git fetch; git reset --hard origin/masterআমাদের কর্মপ্রবাহের অংশ হিসাবে পরিণত হয়েছে । এটি স্থানীয় পরিবর্তনগুলিকে উড়িয়ে দেয়, মাস্টার বিট এর সাথে আপনাকে যুগোপযোগী রাখে তা নিশ্চিত করে যে আপনি কেবলমাত্র বর্তমান পরিবর্তনগুলিতে শীর্ষে নতুন পরিবর্তনগুলি টানছেন না এবং গোলযোগ সৃষ্টি করছেন make আমরা এটি কিছুক্ষণ ব্যবহার করেছি এবং এটি মূলত অনুশীলনে অনেক বেশি নিরাপদ বোধ করে। প্রথমে কোনও কাজ-ইন-প্রগ্রেস যুক্ত / প্রতিশ্রুতিবদ্ধ / স্ট্যাশ করতে ভুলবেন না!
মাইকেল ডুরান্ট

25
গিট স্ট্যাশ কীভাবে সঠিকভাবে ব্যবহার করতে হয় তা নিশ্চিত হয়ে নিন। আপনি যদি 'টানুন' এবং 'আনতে' সম্পর্কে জিজ্ঞাসা করছেন তবে সম্ভবত 'স্ট্যাশ' এরও ব্যাখ্যা প্রয়োজন হবে ...
হেনরি হেলিন

35
মার্কুরিয়াল থেকে আগত প্রচুর লোকেরা "গিট টান" ব্যবহার করে চালিয়ে যান, এটি "এইচজি টান" এর সমতুল্য মনে করে। যা তা নয়। গিটের "এইচজি টান" এর সমতুল্য হ'ল "গিট আনতে"।
সার্জ শাল্টজ

7
গিট ফেচ কমান্ড শাখার সাথে আপডেট কোড আনছে এবং আপনার স্থানীয়ভাবে নতুন যুক্ত শাখাগুলি পাবে, গিট পুল কমান্ড কেবলমাত্র বর্তমান শাখার আপডেট হওয়া কোডটি
কার্তিক প্যাটেল

উত্তর:


9911

সহজ কথায়, git pullএকটি git fetchদ্বারা অনুসরণ করা হয় git merge

এর git fetchঅধীনে আপনার দূরবর্তী ট্র্যাকিং শাখাগুলি আপডেট করতে আপনি যে কোনও সময় একটি করতে পারেন refs/remotes/<remote>/

এই অপারেশনটি আপনার নিজের কোনও স্থানীয় শাখার অধীনে কখনই পরিবর্তন করে না refs/headsএবং আপনার কার্যকরী অনুলিপি পরিবর্তন না করেই নিরাপদ। এমনকি আমি git fetchব্যাকগ্রাউন্ডে ক্রোন চাকরিতে লোকেরা নিয়মিত দৌড়ানোর কথা শুনেছি (যদিও আমি এটি করার পরামর্শ দিই না)।

git pullআপনার স্থানীয় দূরবর্তী অবস্থানের ট্র্যাকিং শাখাগুলি আপডেট করার সাথে সাথে স্থানীয় ব্রাঞ্চকে তার দূরবর্তী সংস্করণ দিয়ে আপ টু ডেট আনতে আপনি কী করবেন A

গিট ডকুমেন্টেশন - গিট টান :

এর ডিফল্ট মোডে git pullশর্টহ্যান্ড git fetchঅনুসরণ করা হয় git merge FETCH_HEAD


326
"একটি" গিট টান "আপনি নিজের সংগ্রহস্থলকে টু ডেট রাখার জন্য কি করতে চান" <- সংগ্রহস্থল আপডেট ইতিমধ্যে আনার মাধ্যমে করা হয় না? আপনি কী বোঝাতে চাইছেন না যে এটি আপনার স্থানীয় শাখাগুলি দূরবর্তী শাখাগুলির সাথে আপ-টু ডেট নিয়ে আসে? সংশ্লেষে: এটি সেই শাখাগুলির আপনার স্থানীয় অনুলিপিগুলির সাথে দূরবর্তী শাখাগুলিকে একত্রিত করে, বা এটি এখানে কী একত্রিত হয়?
অ্যালবার্ট

193
@ অ্যালবার্ট: হ্যাঁ, এটি অদ্ভুতভাবে শব্দযুক্ত। git pullসর্বদা বর্তমান শাখায় একীভূত হবে । সুতরাং আপনি যা শাখা আপনি টান করতে চান তা নির্বাচন থেকে , এবং এটি বর্তমান শাখা সেটিকে pulls। থেকে শাখা স্থানীয় অথবা দূরবর্তী হতে পারে; এটি এমনকি এমন একটি প্রত্যন্ত শাখাও হতে পারে যা নিবন্ধভুক্ত নয় git remote(যার অর্থ আপনি git pullকমান্ড লাইনে একটি URL পাস করেন)।
অনুভূতি

128
@ এস্পার্টাস: না। ধাক্কা দেওয়া কখনই স্বয়ংক্রিয়ভাবে মার্জ হয় না। ব্যবহারকারী স্থানীয়ভাবে যে কোনও সংহত দ্বন্দ্বগুলি সমাধান করে টানবেন এবং তারপরে রিমোটে ফিরে যান।
গ্রেগ হিউগিল

32
যদি আমি থাকি /home/alice/এবং করি git fetch /home/bob, তবে পরবর্তী পর্বে কী কী পরামিতিগুলি পাস করব git merge?
রিপার 234

105
গিট শেখার লোকেদের জন্য নোট: pullআসলে একটি fetchপ্লাস এ দ্বারা অনুকরণ করা যায় না merge। আমি সবেমাত্র একটি পরিবর্তন এনেছি যেখানে কেবল একটি প্রত্যন্ত শাখার পয়েন্টার পরিবর্তিত হয় এবং mergeকিছু করতে অস্বীকার করি। pullঅন্যদিকে, আমার ট্র্যাকিং শাখাটি দ্রুত এগিয়ে দেয়।
রোমান স্টারকভ

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

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


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

126
@ ইলেক্সহোবি শর্টপটে, git fetchকেবলমাত্র আপনার .git/ডিরেক্টরিটি আপডেট করে ( একা : স্থানীয় সংগ্রহস্থল) এবং বাইরের কিছুই নেই .git/(একেএ: ওয়ার্কিং ট্রি)। এটি আপনার স্থানীয় শাখা পরিবর্তন করে না, এবং এটিও স্পর্শ করে না master। এটি স্পর্শ remotes/origin/masterযদিও (দেখুন git branch -avv)। আপনার যদি আরও রিমোট থাকে তবে চেষ্টা করুন git remote update। এটি একটি git fetchকমান্ডের সমস্ত রিমোটের জন্য একটি ।
টিনো

24
@ টিনো আপনার সত্যিই সবচেয়ে গুরুত্বপূর্ণ বিষয়। লোকেরা হয়ত জানেন না যে "রিমোট" শাখাগুলি আসলে হ্যাশগুলির একগুচ্ছ হিসাবে সঞ্চিত থাকে .git/refs/remotes/origin/
ক্রিস

13
যখন আপনি আনবেন, গিট আপনার বর্তমান শাখায় নেই এমন টার্গেট শাখা থেকে কোনও কমিট সংগ্রহ করে এবং সেগুলি আপনার স্থানীয় ভাণ্ডারে সংরক্ষণ করে - আমি কীভাবে দেখতে পাব যে রিমোট থেকে আনা হয়েছিল এবং আমি কীভাবে এটি আমার স্থানীয় শাখায় একীভূত করব?
ア レ ッ ク ス

13
@ টিনো যা আমি এখনও বুঝতে পারি না তা হ'ল ... কী কথা? আনতে কেন এটি আপডেট হয় .git? উদ্দেশ্যযুক্ত সুবিধা কী এবং তার পরে আমার কী করা উচিত?
BadHorsie

1209

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

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

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

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

  • git fetch হ'ল আদেশটি হ'ল "দূরবর্তী সংগ্রহস্থলের আমার স্থানীয় কপিটি আপ টু ডেট আনুন"।

  • git pull বলে যে "আমি নিজের কোডটি যেখানে রেখেছি সেখানে দূরবর্তী সংগ্রহস্থলের পরিবর্তন আনুন।"

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

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


75
প্রযুক্তিগতভাবে, স্থানীয় এবং দূরবর্তী সংগ্রহস্থলগুলি সত্যই এক এবং একই। গিটে, একটি সংগ্রহস্থল হ'ল তাদের পিতামাতাকে নির্দেশ করে প্রতিশ্রুতি দেওয়ার একটি ডিএজি । শাখাগুলি প্রযুক্তিগতভাবে কমিটের অর্থপূর্ণ নাম ছাড়া আর কিছুই নয়। স্থানীয় এবং দূরবর্তী শাখাগুলির মধ্যে একমাত্র পার্থক্য হ'ল দূরবর্তীগুলি remoteName/ গ্রাউন্ড আপ থেকে গিটের সাথে উপসর্গ করা হয় খুব ভাল পঠনযোগ্য। একবার আপনি গিট কীভাবে কাজ করে তা উপলব্ধি হয়ে গেলে - এবং এটি সুন্দরভাবে সহজ , সত্যই - সমস্ত কিছু সার্থক হয়।
এমিল লুন্ডবার্গ

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

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

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

5
@ নবিত থিংটি হ'ল, গিট বিষয়বস্তু ভিত্তিক। এটি কেবল একবার ডেটা সঞ্চয় করে এবং এটি একাধিকবার নির্দেশ করে। এ কারণেই গিট, এমনকি মূলের শীর্ষে একাধিক কমিট রেপোর আকারকে খুব বেশি প্রভাবিত করে না, কারণ বেশিরভাগ বস্তু একই।
cst1992

886

অলিভার স্টিলের চিত্র এখানে কীভাবে সমস্ত কিছু একসাথে ফিট করে তা এখানে :

এখানে চিত্র বর্ণনা লিখুন

যদি যথেষ্ট আগ্রহ থাকে তবে আমি মনে করি যে আমি ছবিটি যুক্ত করতে আপডেট করতে পারি git cloneএবং git merge...


154
একটি আপডেট ইমেজ git cloneএবং git mergeখুব সহায়ক হবে!
মেমার্ক

19
হ্যাঁ, দয়া করে যুক্ত করুন git merge- এটি স্পষ্টভাবে দেখানো উচিত যে mergeপৃথকভাবে কল করা কল করার মতো নয় pullকারণ pullকেবলমাত্র দূরবর্তী থেকে মার্জ করা হচ্ছে এবং আপনার স্থানীয় শাখায় আপনার স্থানীয় কমিটগুলি উপেক্ষা করছে যা দূরবর্তী শাখাটি থেকে টানা হচ্ছে তা ট্র্যাক করছে।
জাস্টামার্টিন

12
একটি ছবি হাজার শব্দের সমান! ক্লোন এবং মার্জ ডেটা প্রবাহ সহ আপডেট হওয়া চিত্রটি কোথাও প্রস্তুত? ইতোমধ্যে ডায়াগ্রামে থাকা ছাড়াও অন্য কোনও ডেটা প্রবাহ?
শিখংশু

10
@ কনটাঙ্গো দয়া করে ক্লোন যুক্ত করুন এবং সংযুক্ত করুন। আমার মতো নবাগতদের জন্য সহায়ক হবে।
ভাড়া

11
ক্লোন দেখিয়ে দুটি ডায়াগ্রাম রয়েছে এবং অন্য উত্তরগুলিতে (নীচে) থ্রিস্টলি এবং থারডকপ্যাসেঞ্জার দ্বারা একত্রিত হয়েছে।
ইন্টোটেচো

487

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

git fetch
git diff ...origin

দেখুন: পৃথক কমান্ডে ডাবল এবং ট্রিপল-ডট বাক্য গঠন সম্পর্কে https://git-scm.com/docs/git-diff


9
কেন না git diff ..origin?
এরিক কাপলুন

3
Git পরিবর্তন উৎপত্তি ও Git পরিবর্তন ..origin কাজ বলে মনে হচ্ছে কিন্তু এই অদ্ভুত ... কাপড়
মার্ক

19
@ কমপাস্ট্রেচ সেখানে কোনও স্থান হওয়ার কথা ছিল না। git diff ...originএর সমতুল্য git diff $(git-merge-base HEAD origin) origin( কার্নেল.আর.git diff [--options] <commit>...<commit> [--] [<path>…] / পব / সফটওয়্যার / এসএসএম / গীত / ডকস / গিট- ডিফ এইচটিএমএল#_ডেস্ক্রিপশন বিভাগটি দেখুন ), যা এর থেকে পৃথক git diff origin; বর্তমান শাখাটি ব্রাঞ্চ হওয়ার পরে থেকে git diff ...originধারণাগতভাবে পরিবর্তিত পরিবর্তনগুলি হ'ল , যেখানে এটি শাখা থেকে চালু হওয়ার পরে বর্তমান শাখায় পরিবর্তনের originবিপরীতও অন্তর্ভুক্ত রয়েছে । origingit diff originorigin
সর্বাধিক ন্যানসি

2
কোনও কমান্ডই (উইন্ডোজে) আমার পক্ষে কাজ করেনি, তবে git diff origin/masterনীচে উল্লিখিত হিসাবে কাজ করে
ব্রায়ান বার্নস

OSX এ গিট 2.0.0 ব্যবহার করে এখানে একই। এই আদেশগুলির কোনওটিই কাজ করে নি। তাদের কি অবহেলা করা হয়েছে?
কে.-মাইকেল আয়ে

372

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

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

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

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

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

14
উত্স / মাস্টার একটি স্থানীয় শাখা যা উত্সের উপর মাস্টারের একটি কপি হয়। যখন আপনি আনবেন, আপনি স্থানীয়: / উত্স / মাস্টার আপডেট করুন। একবার আপনি সত্যিই কুঁকড়ে যাচ্ছেন যে গিটের প্রতিটি জিনিসই একটি শাখা হয়ে যায়, এটি বিভিন্ন ধারণাটি বজায় রাখে এবং দ্রুত স্থানীয় শাখা তৈরি করতে, দ্রুত স্থানীয় শাখা তৈরি করতে, মার্জ করা এবং পুনর্বাসিত করা এবং সস্তার শাখাগুলি থেকে সাধারণত প্রচুর মূল্য অর্জনের এক অত্যন্ত শক্তিশালী উপায় মডেল.
cam8001

3
তবুও বিভ্রান্তিকর। আমি ভেবেছিলাম git fetchআঞ্চলিকভাবে আপনার স্থানীয় রেপোতে রিমোট রেপোতে পরিবর্তনগুলি ডাউনলোড করা হবে, তবে তাদের প্রতিশ্রুতি দেবেন না - অর্থাৎ তাদের এখনও আপনার স্থানীয় রেপোতে যুক্ত / প্রতিশ্রুতিবদ্ধ করা দরকার।
krb686

3
আনতে কেবল দূরবর্তী / উত্স (গিথুব) থেকে আপনার স্থানীয় উত্সের দিকে টান। তবে এটি আপনার প্রকৃত কার্যকারী ফাইলগুলিতে একীভূত হয় না। আপনি যদি একটি টান করেন তবে এটি আপনার বর্তমান কার্যকারী ফাইলগুলিতে একীভূত হবে
জেরার্ডো

223

কখনও কখনও একটি দৃশ্য উপস্থাপনা সাহায্য করে।

এখানে চিত্র বর্ণনা লিখুন


17
আমি মনে করি ছবিটি স্থানীয় রেপোগুলিকেও প্রভাবিত করে show এটি হ'ল, গিট পুল স্থানীয় রেপো এবং ওয়ার্কিং কপির সাথে প্রভাবিত করার সংমিশ্রণ। এখনই মনে হচ্ছে এটি কেবল কার্যকরী অনুলিপিটিকেই প্রভাবিত করে।
অবিচ্ছিন্নতা

10
@ 太極 者 無極 而 reed সম্মত - এই চিত্রটি বেশ বিভ্রান্তিকর, কারণ এটি এটিকে দেখে মনে git pullহচ্ছে যে আনয়নকে এড়িয়ে চলেছে, অবশ্যই কোনটি ভুল।
forresthopkinsa

8
একটি 'স্থানীয় সংগ্রহস্থল' এবং 'ওয়ার্কিং কপির' মধ্যে পার্থক্য কী? তারা উভয়েই কম্পিউটারে স্থানীয় না?
টিআইটিভিডিওগুলি

1
গিট ফেচ ব্যবহার কী? স্থানীয় সংগ্রহস্থল এবং কার্যকরী কপির মধ্যে কী পার্থক্য রয়েছে তা দেখুন?
বিকাশ

1
@ টিটিভিডিও না, এটি নয়। একটি স্থানীয় সংগ্রহশালা হ'ল আপনি যখন প্রতিশ্রুতিবদ্ধ হন তখন আপনার কোড যায় (কাজ ভান্ডার থেকে)। (আপনি চাপ দিলে এটি দূরবর্তী রেপোতে যায়) goes
বিকাশ

218

সংক্ষেপে

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

git pull একটি দূরবর্তী থেকে নীচে টান এবং তাত্ক্ষণিকভাবে মার্জ করে।

অধিক

git clone ক্লোনস একটি রেপো।

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

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

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

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

এবং কভার git pull, git fetch, git cloneএবং git rebase

====

হালনাগাদ

আমি ভেবেছিলাম যে বাস্তবে আপনি বাস্তবে এটি কীভাবে ব্যবহার করবেন তা দেখানোর জন্য আমি এটি আপডেট করব।

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

    git fetch 
    
  2. আপডেটগুলি ডাউনলোড করার পরে, আসুন পার্থক্যগুলি দেখুন:

    git diff master origin/master 
    
  3. যদি আপনি এই আপডেটগুলি নিয়ে খুশি হন তবে মার্জ করুন:

    git pull
    

মন্তব্য:

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

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

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


1
আমার কাছে মনে হচ্ছে যদি কেউ কেবল স্থানীয় কোডটি "টিপ" প্রতিবিম্বিত করতে চায় তবে তাদের ব্যবহার করা উচিত git clone। আমি টিপটি উদ্ধৃতিতে রেখেছি, কারণ আমি অনুমান করি যে এটির অর্থ হ'ল github.com থেকে যা কিছু মাস্টার এবং "জিপ হিসাবে ডাউনলোড করুন"
ক্রিস কে

3
আপনি যদি গিট আনার পরে পরিবর্তনগুলি নিয়ে সন্তুষ্ট না হন তবে কী হবে? পরবর্তী কি করতে হবে?
কুগুটসুমেন

রিবাজে আপনার অনুচ্ছেদটি ঠিক আমি যা খুঁজছিলাম was সমস্ত কিছু শূন্য করার, রিমোট থেকে আপডেট হওয়া, এবং আপনার কাজের সময় ঘটে যাওয়া পূর্ববর্তী কমিটগুলির উপরে আপনার পরিবর্তনগুলি পুনরায় খেলানো সম্পর্কে পুরো ধারণা । এটি সঠিক বলে ধরে নিখুঁত ব্যাখ্যা। ;)
coblr

178
গিট টান - অন্য সংগ্রহস্থল বা স্থানীয় শাখার কাছ থেকে আনুন এবং একত্রিত করুন
সংক্ষিপ্তসার

গিট টান ...
বর্ণনা

প্রদত্ত প্যারামিটারগুলির সাথে গিট-ফেচ চালায় এবং গিট-মার্জকে কলটি মার্জ করার জন্য 
বর্তমান শাখায় মাথা (গুলি) পুনরুদ্ধার করা হয়েছে। --Rebase সহ, গিট-রিবেস কল করে
গিট-মার্জ পরিবর্তে

আপনি ব্যবহার করতে পারেন নোট। (বর্তমান ডিরেক্টরি) টানতে <পুনরায় বিজ্ঞাপন> হিসাবে
স্থানীয় সংগ্রহস্থল থেকে - স্থানীয় শাখা মার্জ করার সময় এটি কার্যকর হয় 
বর্তমান শাখায়।

এছাড়াও নোট করুন যে গিট-টান নিজেই এবং অন্তর্নিহিত গিট-মার্জ করার জন্য বিকল্পগুলি 
গিট-আনার জন্য বিকল্পগুলি বোঝানোর আগে অবশ্যই তা দিতে হবে।

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


5
খুব আকর্ষণীয়, তবে আমি সত্যিই এমন কোনও ব্যবহারের ক্ষেত্রে দেখতে পাই না যেখানে আপনি "কেবল কোড" চান want আপনি যখন আনবেন তখন আপনার কোডের সাথে কী হবে? তা কি মুছে যায়? দূরবর্তী পরিবর্তনের সাথে কী ঘটে? আপনি সংযুক্ত না হলে কীভাবে আপনার কোড মুছে ফেলা হবে তা আপনার রেপোতে কীভাবে যায়?
ই-সন্তুষ্ট

11
@ ই-সন্তুষ্ট: দূরবর্তী শাখাটিও আপনার মেশিনে স্থানীয়ভাবে সংরক্ষণ করা হয়। সুতরাং আপনি যখন git fetchএটি করবেন সংগ্রহস্থল থেকে পরিবর্তনগুলি এনে আপনার স্থানীয় দূরবর্তী শাখা আপডেট করে। এটি আপনার স্থানীয় শাখাকে প্রভাবিত করে না যা স্থানীয় দূরবর্তী শাখাকে ট্র্যাক করে, তাই আপনার কাজের অনুলিপিটিকে প্রভাবিত করে না। এখন, আপনি যখন mergeএটি করবেন এটি আপনার স্থানীয় শাখার সাথে আনীত পরিবর্তনগুলিকে একীভূত করবে।
জেফরিওয়াঁন

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

163

আপনি একটি দূরবর্তী সংগ্রহস্থল থেকে আনতে পারেন, পার্থক্যগুলি দেখতে পারেন এবং তারপরে টানতে বা একত্রীকরণ করতে পারেন।

এটি বলা রিমোট রিপোজিটরি originএবং একটি শাখা যা masterপ্রত্যন্ত শাখাকে ট্র্যাকিং বলে একটি উদাহরণ origin/master:

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

35
আপনি সম্ভবত টানটি এড়িয়ে যেতে চান এবং ইতিমধ্যে পরিবর্তনগুলি আনার পরে শেষ পদক্ষেপ হিসাবে একটি "গিট রিবেস উত্স" করতে পারেন। কারণটি হ'ল যে আপনি আনার সময় থেকে কেউ সেই সময়ে পরিবর্তনগুলিকে ঠেলে দিতে পারত এবং আপনি যে ভিন্ন ভিন্ন পর্যালোচনাটি করেছিলেন তাতে এগুলি পাওয়া যাবে না।
জাস্টিন ওহমস

158

সংক্ষিপ্ত এবং সহজ উত্তরটি git pullকেবল তা git fetchঅনুসরণ করে git merge

এটা তোলে দয়া করে মনে রাখবেন জন্য খুবই গুরুত্বপূর্ণ git pullহবে স্বয়ংক্রিয়ভাবে আপনার কিনা এটা পছন্দ বা না একত্রীকরণ । এটি অবশ্যই মার্জ সংঘাতের কারণ হতে পারে। ধরা যাক আপনার রিমোটটি 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। আপনি সত্যই যদি না জানেন তবে আপনি কী করছেন তা সত্যই না জেনে আমি তার বিরুদ্ধে পরামর্শ দেব। সংস্করণটির manজন্য এই সতর্কতাটি পৃষ্ঠাটি থেকে এসেছে :git-pull2.3.5

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


2
@ জাস্টিনঅহমস যদি git pull --rebaseপ্রদত্ত পরিস্থিতিতে সঠিক জিনিস না হয় তবে এটি দুটি পদক্ষেপে করা যদি ঠিক হয়? যদি এটি সঠিক জিনিস হয় তবে এটি দুটি ধাপে করার অতিরিক্ত সুবিধা কী?
কাজ

@ কাজ - কারণ রিবেস স্বয়ংক্রিয় নয়। প্রথমে পরিবর্তনগুলি আনতে আপনাকে রায় কল করতে দেয়। আপনি ইতিমধ্যে ঠেলাঠেলি করা ইতিহাসের রিবাজিংয়ের সাথে এটি সমস্যার সমাধান করে না। এটি আপনাকে দেখার অনুমতি দেবে যে আপনি ইতিমধ্যে ঠেলাঠেলি না করে এমন পরিবর্তনগুলি পুনর্বার করা নিরাপদ কিনা।
জাস্টিন ওহমস

2
@ JustinOhms আপনি কীভাবে সিদ্ধান্ত নেবেন যে পরিবর্তনগুলি পুনর্নির্বাচন করা নিরাপদ কিনা? আমি কেবল গিট রিবেস চেষ্টা করব, এবং ব্যাকট্র্যাকটি যদি কোনও গোলমাল সৃষ্টি করে, তবে আমি সম্ভবত গিট টান --rebase করতে পারি। তবে অন্য কোনও উপায় থাকতে পারে?
কাজ

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

rebaseআপনি যখন কোনও স্থানীয় শাখায় ইতিমধ্যে ঠেলাঠেলি না করে কাজ করছেন তখন ব্যবহার করুন । আপনি যদি রিমোটে বিদ্যমান একটি শাখায় কাজ করছেন তবে rebaseকিছু বাজে সমস্যা দেখা দিতে পারে তাই আপনার নিয়মিত পছন্দ করা উচিত merge
জাস্টাস রোমিজন

151

ঠিক আছে , এখানে সম্বন্ধে কিছু তথ্য আছে git pullএবং git fetch, তাই আপনি, প্রকৃত পার্থক্য ... কয়েকটি সহজ কথায় বুঝতে পারেন আনা সর্বশেষ তথ্য পায়, কিন্তু কোড পরিবর্তন এবং আপনার বর্তমান স্থানীয় শাখা কোড সহ জগাখিচুড়ি যাচ্ছে না, কিন্তু টান পেতে কোডটি পরিবর্তন করে এটিকে আপনার স্থানীয় শাখায় মার্জ করে, প্রতিটি সম্পর্কে আরও বিশদ পেতে পড়ুন:

গিট আনা

এটি আপনার স্থানীয় সংগ্রহস্থলে সমস্ত রেফারেন্স এবং অবজেক্ট এবং যে কোনও নতুন শাখা ডাউনলোড করবে ...

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

ডিফল্টরূপে, যে ট্যাগটি আনা হচ্ছে ইতিহাসের দিকে নির্দেশ করে তাও আনা হয়; এর প্রভাবটি হল আপনি যে শাখাগুলিতে আগ্রহী সেগুলিতে ট্যাগগুলি আনা to স্পষ্টভাবে ট্যাগ আনার জন্য একটি রেসপেক ব্যবহার করে আপনি এমন ট্যাগগুলি আনতে পারেন যা আপনার আগ্রহী শাখাগুলিতে নির্দেশ করে না into

গিট ফেচ একক একক নামকৃত সংগ্রহস্থল বা ইউআরএল, বা একবার দেওয়া হলেও একাধিক সংগ্রহস্থল থেকে আনতে পারে এবং যদি একটি রিমোট থাকে। কনফিগারেশন ফাইল এন্ট্রি। (গিট-কনফিগারেশন 1 দেখুন )।

যখন কোনও দূরবর্তী নির্দিষ্ট করা হয়নি, ডিফল্টরূপে মূল রিমোট ব্যবহার করা হবে, যদি না বর্তমান শাখার জন্য একটি প্রবাহ শাখা কনফিগার করা থাকে।

যে রেফারির নামগুলি আনা হয় এবং একই সাথে তারা চিহ্নিত বস্তুর নামগুলি .git / FETCH_HEAD এ লেখা হয়। এই তথ্যটি স্ক্রিপ্ট বা অন্যান্য গিট কমান্ড, যেমন গিট-পুল দ্বারা ব্যবহার করা যেতে পারে।


গিট টান

এটি স্থানীয় থেকে দূরবর্তী থেকে বর্তমান শাখায় পরিবর্তনগুলি প্রয়োগ করবে ...

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

আরও সুনির্দিষ্টভাবে, গিট টান প্রদত্ত প্যারামিটারগুলির সাথে গিট আনতে চলে এবং পুনরুদ্ধারকৃত শাখা প্রধানকে বর্তমান শাখায় মার্জ করার জন্য গিট গিলে কল করে। --Rebase সহ, এটি গিট সংযোজনের পরিবর্তে গিট রিবেস চালায়।

গিট-ফেচ 1 তে পাসের সাথে একটি দূরবর্তী সংগ্রহস্থলের নাম হওয়া উচিত । একটি স্বেচ্ছাসেবী দূরবর্তী রেফ (উদাহরণস্বরূপ, কোনও ট্যাগের নাম) বা এমনকি সম্পর্কিত দূরবর্তী ট্র্যাকিং শাখাগুলির (যেমন, রেফ / হেডস :: রেফ / রিমোটস / উত্স / ) সাথে রেফের সংকলন নাম রাখতে পারে, তবে সাধারণত এটি নাম দূরবর্তী সংগ্রহস্থলের একটি শাখা।

গিট-ব্রাঞ্চ - ট্র্যাক দ্বারা নির্ধারিত হিসাবে বর্তমান শাখার জন্য "রিমোট" এবং "মার্জ" কনফিগারেশন থেকে ডিফল্ট মানগুলি পড়া হয় read


কীভাবে এবং একসাথে কাজ করছি তা দেখানোর জন্য আমি নীচের ভিজ্যুয়ালটি তৈরি করি ...git fetchgit pull

গিট টান এবং গিট আনতে


9
আপনি যদি চিত্রটি পছন্দ করেন তবে গিট চিট শিটটি একবার দেখুন, যা সমস্ত গিট কমান্ডের জন্য একই ধরণের জিনিস ... ndpsoftware.com/git-cheatsheet.html
টম

3
ক্লোনগুলি স্থানীয় সংগ্রহস্থলগুলিকেও প্রভাবিত করে না (দূরবর্তী থেকে সমস্ত ইতিহাস অনুলিপি করে)?
টম লোরেডো

135

এখানে চিত্র বর্ণনা লিখুন

এই ইন্টারেক্টিভ গ্রাফিকাল উপস্থাপনাটি গিটকে আন্ডারস্ট্যানিংয়ে খুব সহায়ক http: //

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


18
লোকেরা, বিভিন্ন কলামের সাথে যোগাযোগ করার জন্য লিঙ্কটিতে ক্লিক করুন। এই চিটশিটটি হ'ল সেরা উত্স যা আমি প্রতিটি কমান্ডের মধ্যে পার্থক্যগুলি পুরোপুরি বুঝতে পারি।
এম লুইসা ক্যারিয়েন

এই উত্তরটি অবশ্যই শীর্ষে যেতে হবে
টেসারাক্টর

126

বোনাস:

উপরের উত্তরগুলি টেনে আনার কথা বলার জন্য, আমি একটি আকর্ষণীয় কৌশল ভাগ করতে চাই,

git pull --rebase

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

আপনার নতুন প্রতিশ্রুতিগুলি সার্ভারে ঠেলে দেওয়ার আগে, এই আদেশটি ব্যবহার করে দেখুন এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষ সার্ভারের পরিবর্তনগুলি (একটি ফেচ + মার্জ সহ) সিঙ্ক করবে এবং গিট লগে আপনার প্রতিশ্রুতি শীর্ষে রাখবে। ম্যানুয়াল টান / মার্জ সম্পর্কে চিন্তা করার দরকার নেই।

এখানে বিশদটি সন্ধান করুন: http://gitolite.com/git-pull--rebase


4
দুর্দান্ত টিপ, যদিও নতুন গিট ব্যবহারকারীদের কাছে এটি উল্লেখযোগ্য যে পুনর্বাসনা হ্যাশগুলি সংশোধন করে (আমি অবাক করে দিয়েছি যে অবাক হতে দেখলাম)।
অ্যালেক্সা

1
আপনি কি ব্যাখ্যা করতে পারেন যে git pullএবং এর মধ্যে পার্থক্য কী git pull --rebase?
শাইজুত

2
: উপরে একটি উত্তরে এই পদ্ধতি সম্পর্কে সম্পূর্ণ সতর্কতাটি দেখতে পান stackoverflow.com/a/6011169/241244

118

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

                                         LOCAL SYSTEM
                  . =====================================================    
================= . =================  ===================  =============
REMOTE REPOSITORY . REMOTE REPOSITORY  LOCAL REPOSITORY     WORKING COPY
(ORIGIN)          . (CACHED)           
for example,      . mirror of the      
a github repo.    . remote repo
Can also be       .
multiple repo's   .
                  .
                  .
FETCH  *------------------>*
Your local cache of the remote is updated with the origin (or multiple
external sources, that is git's distributed nature)
                  .
PULL   *-------------------------------------------------------->*
changes are merged directly into your local copy. when conflicts occur, 
you are asked for decisions.
                  .
COMMIT            .                             *<---------------*
When coming from, for example, subversion, you might think that a commit
will update the origin. In git, a commit is only done to your local repo.
                  .
PUSH   *<---------------------------------------*
Synchronizes your changes back into the origin.

রিমোটের একটি আনা মিরর থাকার জন্য কিছু বড় সুবিধা হ'ল:

  • পারফরম্যান্স (নেটওয়ার্কের মাধ্যমে এটি চেপে দেখার চেষ্টা না করে সমস্ত কমিট এবং বার্তাগুলির মাধ্যমে স্ক্রোল করুন)
  • আপনার স্থানীয় রেপো সম্পর্কিত অবস্থা সম্পর্কে মতামত (উদাহরণস্বরূপ, আমি আটলশিয়ানদের সোর্স ট্রি ব্যবহার করি, যা আমাকে একটি বাল্ব দেয় যা উত্সের তুলনায় আমি এগিয়ে বা পিছনে প্রতিশ্রুতিবদ্ধ কিনা তা নির্দেশ করে This

একটিও কি git pullএকত্রিত করে না, অর্থাত্ ওয়ার্কিং অনুলিপিটিতে যেতে পারে?
কামিল ওয়ানরুইজ

ভাল কথা, হ্যাঁ এটি আপনার কার্যকরী অনুলিপিতে সমস্ত পরিবর্তন আনবে এবং তারপরে আপনি এটি স্থানীয় রেপোতে নিজেকে প্রতিশ্রুতিবদ্ধ করতে পারেন। আমি ভিজ্যুয়াল আপডেট করব।
জাস্টাস রোমিজন

@ জুস্টাসরোমিজন কি কোনও টান স্থানীয় ভান্ডার আপডেট করে না? উত্স এবং কার্যকরী অনুলিপিগুলির মধ্যে একটি তারকাচিহ্ন থাকা উচিত নয়?
user764754

2
@ ইউজার 646475754৪ আপনি যখন টানবেন তখন আপনার কাজের অনুলিপিগুলি পরিবর্তনগুলি পাবেন (এমন কিছু বিবাদও হতে পারে যা সমাধানের প্রয়োজন হতে পারে)। আপনাকে এখনও এটি আপনার স্থানীয় ভান্ডারটিতে প্রতিশ্রুতিবদ্ধ করতে হবে।
জাস্টাস রোমিজন

@ জাস্টাসরোমিজন: চিত্রণটির জন্য ধন্যবাদ you রিপোজিটরি স্টেটগুলিতে রিসেট, চেরি পিক এর মতো ক্রিয়াকলাপগুলির প্রভাব চিত্রিত করে যদি আপনি চিত্রটি আরও বিস্তৃত করতে পারেন তবে এটি দুর্দান্ত হবে।
jith912

106

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

আনতে তিনটি রেপো:

---------------------     -----------------------     -----------------------
- 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+               -
---------------------     -----------------------     -----------------------

একটি টান দিয়ে তিনটি রেপো

---------------------     -----------------------     -----------------------
- 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+               -
---------------------     -----------------------     -----------------------

এটি আমাকে কেন বুঝতে পারলো কেন আনতে খুব গুরুত্বপূর্ণ।


এটি পড়ার মতো কঠিন নয়: বাক্সগুলি একটি রেপির স্থিতি উপস্থাপন করে যে প্রতিটি সারিতে বাক্সের সারি 2-এ অপারেশন করার পরে বাম থেকে ডানে সময় পরিবর্তন হয়। R0n লেবেলগুলি গিটের মধ্যে ট্যাগ এবং একটি + সহ একটি ট্যাগ এখনও নিঃশর্ত স্টাফ। সানবক্স আপনার ওয়ার্কিং ফোল্ডারের জন্য ব্যবহৃত হয়, যা রেপো ফোল্ডারের থেকে আলাদা, যেখানে কমিট করা স্টাফ থাকে।
ব্যবহারকারী1708042

96

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

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

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

এখানে চিত্র বর্ণনা লিখুন

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

এখানে চিত্র বর্ণনা লিখুন

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

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

এখানে চিত্র বর্ণনা লিখুন

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

এখানে চিত্র বর্ণনা লিখুন

২. গিট পুল - এটি আপনার স্থানীয় শাখাকে উত্স / মূল শাখার সাথে আপডেট করবে, আসলে এটি যা করে তা গিট ফেচ এবং গিট একের পর এক সংহতকরণের মিশ্রণ। তবে এটি দ্বন্দ্বের কারণ হতে পারে, তাই এটি একটি পরিষ্কার অনুলিপি দিয়ে গিট পুল ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন


1
আপনি যদি 'মেইন ব্রাঞ্চ' কে 'রিমোট রেপো' এ পরিবর্তন করতে পারেন তবে এটি দুর্দান্ত উত্তর হবে।
কিবিরন হু

87

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

git pull == git fetch + git merge

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

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


3
আমি বরং বলব git pull == git fetch + git merge:)
মেলভিনকিম

2
তবেgit pull --rebase = git fetch + git rebase
টিনো

83

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

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


78

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


73

গিট আনুন

আপনি আনয়নের মাধ্যমে উত্স থেকে স্থানীয় শাখায় পরিবর্তনগুলি ডাউনলোড করুন। আনার মাধ্যমে অন্যেরা যে সকল প্রতিশ্রুতি দিয়েছিল তা দূরবর্তী রেপোকে জিজ্ঞাসা করে তবে আপনার স্থানীয় রেপোতে আপনার নেই। এই প্রতিশ্রুতিগুলি ডাউনলোডগুলি আনুন এবং এগুলি স্থানীয় ভাণ্ডারে যুক্ত করে।

গিট মার্জ

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

গিট পুল

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


52

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

git pull একটি প্রত্যন্ত শাখা থেকে টানুন এবং এটি মার্জ করে।

git fetch কেবল দূরবর্তী শাখা থেকে পাওয়া যায় তবে এটি মার্জ হয় না

যেমন গিট টান = গিট আনুন + গিট মার্জ করুন ...


1
এবং গিট যদি মনে করে যে আপনি প্রতিশ্রুতিবদ্ধ হয়ে পিছনে রয়েছেন এবং "ফাস্ট-ফরোয়ার্ড" করতে পারবেন না তেমন সহায়তা করবেন না, যা আমি rm -rfপুরো জিনিসটি শেষ করে শেষ করে দিয়েছি । বোকা গিট, দয়া করে আমাকে এখনই বর্তমান করতে দিন যাতে আমি কাজে ফিরে যেতে পারি?
ক্রিস কে

46

সরল কথায়, আপনি যদি কোনও ইন্টারনেট সংযোগ ছাড়াই কোনও প্লেনে চড়ে যেতে চলেছিলেন ... ছাড়ার আগে আপনি ঠিক করতে পারতেন git fetch origin <master>। এটি আপনার কম্পিউটারে সমস্ত পরিবর্তন আনবে তবে এটিকে আপনার স্থানীয় বিকাশ / কর্মক্ষেত্র থেকে আলাদা রাখবে।

বিমানে, আপনি আপনার স্থানীয় কর্মক্ষেত্রে পরিবর্তন করতে পারেন এবং তারপরে যা আপনি এনেছিলেন তা দিয়ে এটি মার্জ করে এবং ইন্টারনেটের সাথে কোনও সংযোগ ছাড়াই সম্ভাব্য মার্জ সংঘাতগুলি সমাধান করতে পারেন। এবং যদি না কেউ রিমোট রিপোজিটরিতে নতুন বিরোধী পরিবর্তন না করে থাকে তবে একবার আপনি গন্তব্যে পৌঁছে আপনি git push origin <branch>কফি নিয়ে যান।


দুর্দান্ত এই আটলসিয়ান টিউটোরিয়াল থেকে :

git fetchকমান্ড ডাউনলোডসমূহ করে, ফাইল ও refs আপনার স্থানীয় সংগ্রহস্থলের মধ্যে একটি দূরবর্তী সংগ্রহস্থল থেকে।

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

কোনও রিমোট রিপোজিটরি থেকে সামগ্রী ডাউনলোড করার সময় git pullএবং git fetchকমান্ডগুলি কার্য সম্পাদনের জন্য উপলব্ধ। আপনি git fetchদুটি কমান্ডের 'নিরাপদ' সংস্করণ বিবেচনা করতে পারেন । এটি রিমোট সামগ্রীটি ডাউনলোড করবে, তবে আপনার বর্তমান কাজ অক্ষত রেখে আপনার স্থানীয় সংগ্রহস্থলের কার্য স্থিতি আপডেট করবে না। git pullআরও আক্রমণাত্মক বিকল্প, এটি সক্রিয় স্থানীয় শাখার জন্য দূরবর্তী সামগ্রী ডাউনলোড করবে git mergeএবং নতুন দূরবর্তী সামগ্রীর জন্য একীভূত অঙ্গীকার তৈরি করতে তাত্ক্ষণিকভাবে কার্যকর করবে। আপনার যদি অগ্রগতিতে পরিবর্তনগুলি মুলতুবি থেকে থাকে তবে এটি দ্বন্দ্ব সৃষ্টি করবে এবং একীভূত বিরোধ নিষ্পত্তি প্রবাহকে কিকঅফ করবে।


সহ git pull:

  • আপনি কোন বিচ্ছিন্নতা পাবেন না।
  • এটি আপনার স্থানীয় বিকাশকে প্রভাবিত করে।
  • এটি পরিষ্কারভাবে চেক আউট করার প্রয়োজন হয় না। কারণ এটি সুস্পষ্টভাবে একটি git merge
  • এটি মূলত নিরাপদ নয়। এটা আক্রমণাত্মক।
  • git fetchএটি কেবল যেখানে আপনার প্রভাবিত করে তার বিপরীতে .git/refs/remotes, গিট টান আপনার এবং উভয়কেই প্রভাবিত করবে.git/refs/remotes .git/refs/heads/

হুমম ... তাই যদি আমি ওয়ার্কিং কপিটি সাথে আপডেট না করে git fetchথাকি তবে আমি কোথায় পরিবর্তন করছি? গিট ফেচ নতুন নতুন কমিটগুলি কোথায় সঞ্চয় করবে?

দুর্দান্ত প্রশ্ন। এটি আপনার কাজের অনুলিপি থেকে এটি কোথাও বিচ্ছিন্ন করে দেয়। তবে আবার কোথায়? খুঁজে বের কর.

আপনার প্রকল্প ডিরেক্টরিতে (যেমন, যেখানে আপনি আপনার gitআদেশগুলি করেন) করুন:

  1. ls। এটি ফাইল এবং ডিরেক্টরিগুলি দেখায়। কিছুই ঠাণ্ডা, আমি জানি।

  2. এখন কি ls -a। এই প্রদর্শন করবে ডট ফাইল , অর্থাত্, শুরু ফাইল .এর পরে নামে একজন ডিরেক্টরি দেখতে সক্ষম হবে: .git

  3. কি cd .git। এটি স্পষ্টতই আপনার ডিরেক্টরি পরিবর্তন করবে।
  4. এখন আসছে মজার ব্যাপারটি; না ls। আপনি ডিরেক্টরিগুলির একটি তালিকা দেখতে পাবেন। আমরা খুঁজছেন refs। কি cd refs
  5. সমস্ত ডিরেক্টরিতে কী রয়েছে তা দেখতে আকর্ষণীয়, তবে আসুন আমরা তাদের দুটিতে ফোকাস করি। headsএবং remotescdতাদের ভিতরেও পরীক্ষা করতে ব্যবহার করুন ।
  6. git fetchআপনি যে কোনও কাজ করুন /.git/refs/remotesডিরেক্টরিতে আইটেম আপডেট করবে । এটি /.git/refs/headsডিরেক্টরিতে কোনও কিছুই আপডেট করবে না ।
  7. যে কোনও git pull প্রথমে ডিরেক্টরিতে git fetchআইটেম আপডেট করবে /.git/refs/remotes, তারপরে আপনার স্থানীয় সাথে একীভূত হবে এবং তারপরে /.git/refs/headsডিরেক্টরিটির ভিতরে মাথা পরিবর্তন করবে ।

একটি খুব ভাল সম্পর্কিত উত্তর পাওয়া যাবে যেখানে 'গিট ফেচ' নিজেই রাখে?

এছাড়াও, গিট শাখার নামকরণ কনভেনশন পোস্ট থেকে "স্ল্যাশ স্বরলিপি" সন্ধান করুন । গিট কীভাবে বিভিন্ন ডিরেক্টরিতে জিনিস রাখে তা আপনাকে আরও ভালভাবে বুঝতে সহায়তা করে।


আসল পার্থক্য দেখতে

শুধু কর:

git fetch origin master
git checkout master

যদি রিমোট মাস্টার আপডেট করা থাকে তবে আপনি এই জাতীয় বার্তা পাবেন:

Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

আপনি যদি না করেন fetchএবং ঠিক করেন না git checkout masterতবে আপনার স্থানীয় গিটটি জানতে পারে না যে সেখানে 2 টি কমিট যুক্ত রয়েছে। এবং এটি কেবল বলবে:

Already on 'master'
Your branch is up to date with 'origin/master'.

তবে এটি পুরানো এবং ভুল। এটি কারণ গিট আপনাকে যা জানবে তার উপর ভিত্তি করে আপনাকে প্রতিক্রিয়া জানাবে। এটি নতুন প্রতিশ্রুতিবদ্ধ হওয়া সম্পর্কে অবগত যে এটি এখনও টানেনি ...


স্থানীয়ভাবে শাখায় কাজ করার সময় রিমোটে করা নতুন পরিবর্তনগুলি দেখার কোনও উপায় আছে কি?

কিছু আইডিই (যেমন এক্সকোড) দুর্দান্ত স্মার্ট এবং এ এর ​​ফলাফল ব্যবহার করে git fetchএবং আপনার বর্তমান কার্যকারী শাখার দূরবর্তী শাখায় পরিবর্তন করা কোডগুলির লাইনগুলি বর্নিত করতে পারে। যদি সেই লাইনটি স্থানীয় পরিবর্তন এবং দূরবর্তী শাখা উভয় দ্বারা পরিবর্তিত হয়, তবে সেই রেখাটি লাল দিয়ে টীকায়িত হয়। এটি মার্জ সংঘাত নয়। এটি একটি সম্ভাব্য সংহত সংঘাত। এটি এমন একটি শীর্ষস্থান যা আপনি git pullদূরবর্তী শাখা থেকে করার আগে ভবিষ্যতের মার্জ সংঘাত সমাধানের জন্য ব্যবহার করতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন


মজাদার টিপ:

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

git fetch origin feature/123

তারপরে এটি আপনার রিমোট ডিরেক্টরিতে যাবে। এটি এখনও আপনার স্থানীয় ডিরেক্টরিতে উপলভ্য নয়। যাইহোক, এটি আপনার চেকআউটটিকে ডিএমআইআইএম দ্বারা দূরবর্তী শাখায় সরল করে তোলে (আমি যা বলতে চাই তা করুন):

git checkout feature/123

আপনার আর করার দরকার নেই:

git checkout -b feature/123 origin/feature/123

আরও পড়ুন এখানে


1
আমি এই উত্তরটি পছন্দ করি
কিড_লিয়ার্নিং_সি

44

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

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

    (রেপো অপারেশন অপারেশন) master@remote >> remote/origin/master@local

  2. স্থানীয় শাখায় নতুন কমিটি সংহত করা

    (অভ্যন্তরীণ-রেপো অপারেশন) remote/origin/master@local >> master@local

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

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

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

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


36

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

  1. গিট আনুন: গিট দূরবর্তী থেকে স্থানীয়তে সর্বশেষতম সংস্করণ পাচ্ছে, তবে এটি স্বয়ংক্রিয়ভাবে মার্জ হবে না merge      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সম্ভবত আরও সুরক্ষিত কারণ মার্জ হওয়ার আগে আমরা পরিবর্তনগুলি দেখতে পারি এবং একত্রীকরণের সিদ্ধান্ত নিতে পারি।


36

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

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

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

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


34

গিট টান == (গিট ফেচ + গিট মার্জ)

গিট ফেচ স্থানীয় শাখায় পরিবর্তন হয় না।

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


33

পরিষ্কার এবং সহজ হওয়ার চেষ্টা করছি।

Git টান কমান্ড আসলে একটি হয় shortcutজন্য Git সংগ্রহ এর দ্বারা অনুসরণ Git একত্রীকরণ বা Git রি-বেসের ফলে আপনার কনফিগারেশনের উপর নির্ভর করে কমান্ড। আপনি আপনার গিট সংগ্রহস্থলটি কনফিগার করতে পারেন যাতে গিট পুলটি পুনরায় শুল্ক অনুসরণের পরে আসে।


33

নতুনদের জন্য একটি সাধারণ গ্রাফিকাল প্রতিনিধিত্ব,

এখানে চিত্র বর্ণনা লিখুন

এখানে,

git pull  

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

কিন্তু ,

গিট আনা

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

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

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

git pull origin master

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

2) গিট ফেচ (ম্যানুয়ালি পুনরায় চালু করা দরকার):

git fetch origin master

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

git rebase origin/master

এটি কোডিয়াকে স্থানীয়ভাবে পুনরায় চালু করবে। তার আগে আপনি ডান শাখায় আছেন তা নিশ্চিত করুন।


দুর্দান্ত গ্রাফ, তবে আপনি যখন গ্রাফটি "মার্জ" করতে চান তখন আপনি কেন "পুনর্বাসনা" ব্যবহার করেন তা আপনি ব্যাখ্যা করতে চাইতে পারেন।
গুন্ট্রাম ব্লহম

1
মার্জ অন্য শাখা অঙ্গীকারকে উপস্থাপন করবে এবং একটি নতুন প্রতিশ্রুতি উত্পন্ন করবে যার মধ্যে রেফারেন্স হিসাবে কমিট রয়েছে। তবে রিবেস অন্য শাখা থেকে করা প্রতিশ্রুতিগুলি প্রতিলিপি তৈরি করবে বরং এটি প্রতিলিপি না করে নতুন প্রতিশ্রুতি তৈরি করবে
মহিদীন বিন মোহাম্মদ

33

আসলে গিট আপনার নিজস্ব কোড এবং রিমোট রিপোজিটরির একটি অনুলিপি বজায় রাখে।

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

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

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