git - tutorial - কিভাবে আমি মাস্টার/মূল সঙ্গে পৃথক হেড সমন্বয় করতে পারি?




gitlab (18)

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

সম্প্রতি কোথাও, আমি কিছু স্ট্যাটাসের স্টেজিং থেকে তাদের ফিরিয়ে আনতে কিছুটা রিসেট করেছি, এবং পরে কয়েকটি সাম্প্রতিক স্থানীয় কমিটি থেকে মুক্তি পাওয়ার জন্য আমি পুনরায় একটি rebase -i । এখন আমি একটি রাষ্ট্রে আমি বেশ বুঝতে না।

আমার কর্মক্ষেত্রের মধ্যে, git log লোগুলি ঠিক যা দেখবে আমি তা দেখিয়েছি - আমি সঠিক ট্রেনে যাচ্ছি যা আমি যেতে চাই না এবং সেখানে নতুন কিছু, ইত্যাদি।

কিন্তু আমি রিমোট রিপোজিটরিতে ধাক্কা দিলাম, আর সেখানে কি আলাদা ছিল - রিবেসে আমি কয়েকটা করে মেরে ফেলতাম, আর স্থানীয়ভাবে নতুন করে সেখানেই নেই।

আমি মনে করি "মাস্টার / মূল" শিরোনাম থেকে বিচ্ছিন্ন, তবে আমি কী বুঝাতে চাইছি তার 100% স্পষ্ট নয়, কমান্ড লাইন সরঞ্জামগুলির সাথে এটি কীভাবে দৃশ্যমান করা যায় এবং এটি কীভাবে সমাধান করা যায়।


নিজস্ব শাখা সম্মুখের আপনার পৃথক কমিট পান

শুধু git checkout -b mynewbranch চালানো।

তারপর git log চালান, এবং আপনি যে HEAD এখন এই নতুন শাখায় HEAD দেখতে পাবেন।


আজ আমার এই সমস্যা ছিল, যেখানে আমি একটি সাবমিডেল আপডেট করেছি, কিন্তু কোন শাখায় ছিলাম না। আমি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ ছিল, তাই stashing, চেকআউট, unstashing কাজ করবে না। আমি চরিত্র শেষ পর্যন্ত বিচ্ছিন্ন মাথা এর কমিট পিকিং। তাই অবিলম্বে আমি প্রতিশ্রুতিবদ্ধ (ধাক্কা ব্যর্থ হলে), আমি করেছি:

git checkout master
git cherry-pick 99fe23ab

আমার চিন্তা গিয়েছিলাম: আমি একটি বিচ্ছিন্ন মাথায় আছি, কিন্তু আমি মাস্টার হতে চাই। আমার বিচ্ছিন্ন রাষ্ট্র অনুমান করা মাস্টার থেকে খুব আলাদা নয়, যদি আমি মাস্টারকে আমার প্রতিবেদনে আবেদন করতে পারি তবে আমি সেট করব। এই চেরি-পিক কি ঠিক কি।


আপনি যদি মাস্টারের শীর্ষে কিছু করেন এবং কেবল মাস্টারের "পিছনে মার্জ" করতে চান (অর্থাত আপনি master HEAD নির্দেশ করতে চান), এক-মাছ ধরার যন্ত্রটি হবে:

git checkout -B master HEAD
  1. এটি master নামে একটি নতুন শাখা তৈরি করে, এমনকি যদি এটি ইতিমধ্যে বিদ্যমান থাকে (যা চলমান master মত এবং আমরা যা চাই তা)।
  2. নতুন তৈরি শাখা HEAD নির্দেশ করতে সেট করা হয়, যেখানে আপনি হয়।
  3. নতুন শাখা চেক আউট হয়, তাই আপনি পরে master হয়।

আমি এই উপ-সংগ্রহস্থল ক্ষেত্রে বিশেষত দরকারী পাওয়া যায়, যা প্রায়ই একটি পৃথক রাষ্ট্রে ঘটতে পারে।


আপনি যদি আপনার বর্তমান বিচ্ছিন্ন HEAD ধাক্কা দিতে চান (আগে git log চেক করুন), চেষ্টা করুন:

git push origin HEAD:master

মূলত মাস্টার শাখায় আপনার বিচ্ছিন্ন HEAD পাঠাতে। আপনার ধাক্কা প্রত্যাখ্যাত না হলে, git pull origin master থেকে পরিবর্তন পেতে প্রথম git pull origin master চেষ্টা করুন। যদি আপনি মূল থেকে পরিবর্তনগুলি সম্পর্কে চিন্তা না করেন এবং এটি প্রত্যাখ্যাত হয়, কারণ আপনি কিছু ইচ্ছাকৃত রিবেস করেছেন এবং আপনি আপনার বর্তমান বিচ্ছিন্ন শাখা দিয়ে মূল / মাস্টারকে প্রতিস্থাপন করতে চান তবে - আপনি এটি ( -f ) প্রয়োগ করতে পারেন। আপনি পূর্ববর্তী git reflog কিছু এক্সেস হারিয়ে git reflog , আপনি সব শাখা থেকে ইতিহাস দেখতে git reflog সর্বদা চালাতে পারেন।

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

git rebase HEAD master
git checkout master

দেখুন: গিট: "কোনও শাখায় বর্তমানে নেই।" পরিবর্তনের সময়, একটি শাখা ফিরে পেতে একটি সহজ উপায় আছে কি?


আমারও একই সমস্যা ছিল এবং আমি নিম্নলিখিত ধাপগুলি দিয়ে এটি সমাধান করেছি।

আপনি আপনার পরিবর্তন রাখা প্রয়োজন

  1. প্রথম আপনি মাস্টার শাখা ফিরে আপনি git checkout master কমান্ড চালানোর প্রয়োজন।
  2. আপনি আপনার পরিবর্তন রাখা প্রয়োজন শুধু git checkout -b changes এবং git checkout -B master changes

আপনি যদি আপনার পরিবর্তন প্রয়োজন হয় না

  1. আপনার শাখা রান git clean -df থেকে সব untracked ফাইল মুছে git clean -df

  2. তারপরে আপনার রিপোজিটোরির মধ্যে সমস্ত অসংরক্ষিত পরিবর্তনগুলি সাফ করতে হবে। যাতে আপনি git checkout -- চালাতে হবে git checkout --

  3. অবশেষে আপনাকে git checkout master কমান্ড ব্যবহার করে আপনার শাখাকে মাস্টার শাখায় ফিরিয়ে দিতে হবে।


আমি এই সমস্যা মধ্যে দৌড়ে এবং আমি উপরের ভোট উত্তর পড়তে যখন:

HEAD বর্তমানে চেক আউট কমিটির জন্য প্রতীকী নাম।

আমি ভাবলামঃ আহা! যদি HEAD ক্রেনলিটি চেকআউট কমিটির জন্য প্রতীকী নাম হয়, তবে আমি master বিরুদ্ধে এটি পুনরায় পেশ করে master বিরুদ্ধে এটি পুনর্মিলন করতে পারি:

git rebase HEAD master

এই কমান্ডটি:

  1. master চেক আউট
  2. master থেকে HEAD বিন্দু ফিরে HEAD ফিরে পিতা বা মাতা কৃতিত্ব সনাক্ত করে
  3. master উপরে যারা commits খেলে

শেষ ফলাফল হ'ল প্রধান শিক্ষকরা হ'ল master HEAD ছিলেন না। master চেক আউট রয়ে যায়।

রিমোট সম্পর্কিত:

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

দূরবর্তী ইতিহাস আর আপনার স্থানীয় ইতিহাস ব্যবহার করে দ্রুত ফরোয়ার্ড করা যাবে না। রিমোট ইতিহাসকে ওভাররাইট করার জন্য আপনাকে git push -f ( git push -f ) করতে হবে। যদি আপনার কোন সহযোগী থাকে, তবে এটি সাধারণত তাদের সাথে সমন্বয় সাধন করতে পারে যাতে সবাই একই পৃষ্ঠায় থাকে।

আপনি দূরবর্তী origin থেকে master ধাক্কা দেওয়ার পরে, আপনার রিমোট ট্র্যাকিং শাখার origin/master master হিসাবে একই অঙ্গীকারের দিকে নির্দেশ করার জন্য আপডেট করা হবে।


ক্রিস দ্বারা নির্দেশিত হিসাবে, আমি নিম্নলিখিত পরিস্থিতি ছিল

git symbolic-ref HEAD fatal: ref HEAD is not a symbolic ref সঙ্গে ব্যর্থ হয় fatal: ref HEAD is not a symbolic ref

তবে git rev-parse refs/heads/master আমি যেখানে পুনরুদ্ধার করতে পারি সেখান থেকে একটি ভাল git rev-parse refs/heads/master দিকে নির্দেশ দিচ্ছিল (আমার ক্ষেত্রে সর্বশেষ কমিটিতে এবং আপনি git show [SHA] ব্যবহার করে যে git show [SHA] দেখতে পারেন git show [SHA]

আমি যে পরে অনেক নোংরা জিনিস করেনি, কিন্তু ঠিক আছে ঠিক কি মনে হচ্ছে,

git symbolic-ref HEAD refs/heads/master

এবং মাথা সংযুক্ত করা হয়!


নিম্নলিখিত আমার জন্য কাজ করে (শুধুমাত্র শাখা মাস্টার ব্যবহার করে):

git push origin HEAD:master
git checkout master        
git pull

প্রথমটি দূরবর্তী উত্স থেকে বিচ্ছিন্ন HEAD push করে।

দ্বিতীয় এক শাখা মাস্টার সরানো।

তৃতীয় ব্যক্তি শাখার মাস্টারের সাথে সংযুক্ত হয়ে যাওয়া মাথাটি পুনরুদ্ধার করে।

ধাক্কা যদি প্রত্যাখ্যাত হয় প্রথম সমস্যা এ সমস্যা হতে পারে। কিন্তু এটি আর বিচ্ছিন্ন মাথার সমস্যা হতে পারে না, তবে বিচ্ছিন্ন হেড কিছু দূরবর্তী পরিবর্তন সম্পর্কে সচেতন নয়।


প্রথমত, HEAD কী এবং এটি বিচ্ছিন্ন হওয়ার অর্থ কী তা স্পষ্ট করে।

HEAD বর্তমানে চেক আউট কমিটির জন্য প্রতীকী নাম। HEAD বিচ্ছিন্ন না হলে ("স্বাভাবিক" 1 পরিস্থিতি: আপনার একটি শাখা চেক আউট আছে), HEAD আসলে একটি শাখার "রেফারেন্স" নির্দেশ করে এবং শাখাটি কমিটিকে নির্দেশ করে। HEAD এভাবে একটি শাখা "সংযুক্ত" হয়। যখন আপনি একটি নতুন কমিটি করেন, HEAD নির্দেশ করে এমন শাখাটি নতুন কমিটিতে নির্দেশ করার জন্য আপডেট করা হয়। এটি কেবল শাখা নির্দেশ করে পরে HEAD স্বয়ংক্রিয়ভাবে অনুসরণ করে।

  • git symbolic-ref HEAD ফলন refs/heads/master
    "মাস্টার" নামে শাখা চেক আউট হয়।
  • git rev-parse refs/heads/master yield 17a02998078923f2d62811326d130de991d1a95a
    যে কমিটি প্রধান শাখা বর্তমান টিপ বা "মাথা" হয়।
  • git rev-parse HEAD এছাড়াও 17a02998078923f2d62811326d130de991d1a95a ফলন 17a02998078923f2d62811326d130de991d1a95a
    এটি একটি "প্রতীকী রেফারেন্স" মানে কি। এটি অন্য কোন রেফারেন্সের মাধ্যমে একটি বস্তুর দিকে নির্দেশ করে।
    (সিম্বলিক রেফারেন্সগুলি মূলত সিম্বলিক লিংক হিসাবে প্রয়োগ করা হয়েছিল, তবে পরে অতিরিক্ত ব্যাখ্যা দিয়ে প্লেইন ফাইলগুলিতে পরিবর্তিত হয় যাতে তারা এমন প্ল্যাটফর্মগুলিতে ব্যবহার করতে পারে যা সিমলিংক না থাকে।)

আমরা HEADrefs/heads/master 17a02998078923f2d62811326d130de991d1a95a refs/heads/master17a02998078923f2d62811326d130de991d1a95a

যখন HEAD বিচ্ছিন্ন হয়, তখন সরাসরি এটি একটি শাখার মাধ্যমে নির্দেশ করে - পরোক্ষভাবে পরস্পরকে নির্দেশ করে। আপনি একটি নামহীন শাখা হচ্ছে একটি পৃথক হেড মনে করতে পারেন।

  • git symbolic-ref HEAD fatal: ref HEAD is not a symbolic ref সঙ্গে ব্যর্থ হয় fatal: ref HEAD is not a symbolic ref
  • 17a02998078923f2d62811326d130de991d1a95a git rev-parse HEAD ফলন 17a02998078923f2d62811326d130de991d1a95a
    যেহেতু এটি একটি প্রতীকী রেফারেন্স নয়, তাই এটি অবশ্যই নিজেই কমিটির কাছে নির্দেশ করতে হবে।

আমরা HEAD17a02998078923f2d62811326d130de991d1a95a

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

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

একটি ইন্টারেক্টিভ রিবেস এর মধ্যবর্তী পদক্ষেপ একটি বিচ্ছিন্ন HEAD (আংশিকভাবে সক্রিয় শাখার রিফ্লগ দূষণ এড়াতে) সঙ্গে সম্পন্ন করা হয়। আপনি সম্পূর্ণ রিবেস অপারেশন শেষ করলে, এটি আপনার মূল শাখাটিকে রিবেস ক্রিয়াকলাপের ক্রমবর্ধমান ফলাফল সহ আপডেট করবে এবং মূল শাখায় HEAD পুনরায় সংযুক্ত করবে। আমার অনুমান আপনি সম্পূর্ণরূপে রিবেস প্রক্রিয়া সম্পূর্ণ না; এটি আপনাকে রিবেস অপারেশন দ্বারা সম্প্রতি প্রক্রিয়া করা প্রতিশ্রুতি নির্দেশ করে একটি বিচ্ছিন্ন HEAD দিয়ে ছেড়ে দেবে।

আপনার পরিস্থিতি থেকে পুনরুদ্ধার করতে, আপনাকে এমন একটি শাখা তৈরি করতে হবে যা বর্তমানে আপনার পৃথক ডায়েড দ্বারা নির্দেশিত কৃতিত্বকে নির্দেশ করে:

git branch temp
git checkout temp

(এই দুটি কমান্ডকে git checkout -b temp হিসাবে সংক্ষিপ্ত করা যেতে পারে)

এই নতুন temp শাখায় আপনার মাথা reattach হবে।

পরবর্তী, আপনি বর্তমান কমিটির (এবং এর ইতিহাস) সাধারণ শাখার সাথে তুলনা করুন যা আপনি কাজ করার প্রত্যাশায় ছিলেন:

git log --graph --decorate --pretty=oneline --abbrev-commit master origin/master temp
git diff master temp
git diff origin/master temp

(সম্ভবত আপনি লগ বিকল্পগুলির সাথে পরীক্ষা করতে চান: add -p , ছেড়ে -p --pretty=… সম্পূর্ণ লগ বার্তা ইত্যাদি দেখতে)

আপনার নতুন temp শাখা ভাল দেখলে, আপনি এটি আপডেট করতে (উদাহরণস্বরূপ) master আপডেট করতে চাইতে পারেন:

git branch -f master temp
git checkout master

(এই দুটি কমান্ডটি git checkout -B master temp হিসাবে সংক্ষিপ্ত করা যেতে পারে)

তারপর আপনি অস্থায়ী শাখা মুছে ফেলতে পারেন:

git branch -d temp

অবশেষে, সম্ভবত আপনি পুনঃস্থাপিত ইতিহাস ধাক্কা দিতে চান:

git push origin master

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

আপনি একটি রিবেস অপারেশন মাঝখানে ছিল যদি আপনি সম্ভবত এটি পরিষ্কার করা উচিত। ডিরেক্টরিটি .git/rebase-merge/ করে কোন রিবেস প্রক্রিয়া চলছে কিনা তা আপনি পরীক্ষা করতে পারেন। .git/rebase-merge/ । আপনি কেবল সেই ডিরেক্টরিটি মুছে ফেলার মাধ্যমে ইনগ্রেইন রিবেস ম্যানুয়ালি পরিষ্কার করতে পারেন (উদাহরণস্বরূপ, যদি আপনি আর সক্রিয় রিবেস ক্রিয়াকলাপের উদ্দেশ্য এবং প্রসঙ্গটি মনে করেন না)। সাধারণত আপনি git rebase --abort ব্যবহার করবেন তবে এটি অতিরিক্ত কিছু git rebase --abort যা আপনি সম্ভবত এড়াতে চান (এটি মূল শাখার দিকে ফিরিয়ে আনা হয় এবং এটি মূল কমিটিতে ফিরিয়ে দেয় যা আমাদের উপরে দেওয়া কিছু কাজ পূর্বাবস্থায় ফিরিয়ে আনবে। )।


বিচ্ছিন্ন মাথা মৌলিক ব্যাখ্যা জন্য এখানে দেখুন:

http://git-scm.com/docs/git-checkout

কমান্ড লাইন এটি কল্পনা করা:

git branch

অথবা

git branch -a

আপনি নীচের মত আউটপুট পাবেন:

* (no branch)
master
branch1

* (no branch) দেখায় না যে আপনি বিচ্ছিন্ন মাথায় আছেন।

আপনি কিছুটা git checkout somecommit ইত্যাদি একটি git checkout somecommit করে এই অবস্থায় আসতে পারেন এবং এটি আপনাকে নিম্নলিখিতগুলির সাথে সতর্ক করে দিয়েছিল:

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

যদি আপনি তৈরি করতে সম্মতি রাখতে একটি নতুন শাখা তৈরি করতে চান তবে আপনি আবার চেকআউট কমান্ডটি দিয়ে -b ব্যবহার করে (এখন বা পরে) করতে পারেন। উদাহরণ:

জিট চেকআউট-বি new_branch_name

এখন, তাদের মাস্টার সম্মুখের পেতে:

একটি git reflog বা এমনকি git log এবং আপনার commits নোট করুন। এখন git checkout master এবং git merge commits git merge

git merge [email protected]{1}

সম্পাদনা:

যোগ করার জন্য, git rebase -i ব্যবহার করুন যা আপনার প্রয়োজন নেই এমন হিট / হত্যাকাণ্ডের জন্য নয়, তবে এগুলি সম্পাদনা করার জন্যও। শুধু git rebase --continue তালিকাতে "সম্পাদনা করুন" উল্লেখ করুন এবং আপনি আপনার git rebase --continue সংশোধন করতে সক্ষম হবেন এবং তারপরে এগিয়ে git rebase --continue জন্য একটি git rebase --continue । এটি নিশ্চিত হতো যে আপনি কোনও পৃথক হেডটিতে আসেন নি।


যদি আপনার কেবলমাত্র মাস্টার শাখা থাকে এবং "বিকাশ" বা বৈশিষ্ট্যটিতে ফিরে যেতে চান তবে এটি করুন:

git checkout origin/develop

দ্রষ্টব্য: মূল পরীক্ষা / বিকাশ

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

তারপর

git checkout -b develop

এটা কাজ করে :)


যদি আপনি সম্পূর্ণরূপে নিশ্চিত হন যে HEAD ভাল অবস্থা হয়:

git branch -f master HEAD
git checkout master

আপনি সম্ভবত উত্স থেকে ধাক্কা না, আপনার মাস্টার মূল থেকে বিভাজিত হয়েছে। আপনি যদি নিশ্চিত হন যে অন্য কেউ রেপো ব্যবহার করছে না, তবে আপনি জোরপূর্বক push করতে পারেন:

git push -f

আপনি যদি বৈশিষ্ট্য শাখাটিতে থাকেন তবে সর্বাধিক দরকারী অন্য কেউ ব্যবহার করছেন না।


সহজ ভাষায়, বিচ্ছিন্ন HEAD রাষ্ট্র মানে আপনি কোন শাখা HEAD (বা টিপ) চেক আউট হয় না

একটি উদাহরণ সঙ্গে বুঝতে

বেশীরভাগ ক্ষেত্রে একটি শাখা একাধিক অভিন্ন ক্রম যেমন:

Commit 1: মাস্টার -> শাখা_HEAD (123be6a76168aca712aea16076e971c23835f8ca)

Commit 2: মাস্টার -> 123be6a76168aca712aea16076e971c23835f8ca -> branch_HEAD (100644a76168aca712aea16076e971c23835f8ca)

আপনি ক্রম ক্রম ক্ষেত্রে উপরে দেখতে পারেন, আপনার শাখা আপনার সর্বশেষ কমিট নির্দেশ করে। সুতরাং সেই ক্ষেত্রে যদি আপনি 123be6a76168aca712aea16076e971c23835f8ca করতে চেকআউট করেন তবে আপনার শাখা পয়েন্টের HEAD 100644a76168aca712aea16076e971c23835f8ca এবং টেকনিক্যালি আপনার কোনও শাখার HEAD এ চেক আউট হয়ে যাওয়ার পরে আপনি ডিট্যাড হেড স্টেটে থাকবেন । অতএব, আপনি আলাদা মাথা রাষ্ট্র আছে।

তাত্ত্বিক ব্যাখ্যা

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


আমি অনুসন্ধান করার সময় এই প্রশ্ন খুঁজে পাওয়া যায় নি You are in 'detached HEAD' state.

আমি এখানে যা করতে এসেছি তা বিশ্লেষণ করার পর, অতীতে যা করেছি তা তুলনায় আমি আবিষ্কার করেছি যে আমি ভুল করেছি।

আমার স্বাভাবিক প্রবাহ হল:

git checkout master
git fetch
git checkout my-cool-branch
git pull

এই সময় আমি করেছি:

git checkout master
git fetch
git checkout origin/my-cool-branch
# You are in 'detached HEAD' state.

সমস্যাটি আমি ভুলভাবে করেছি:

git checkout origin/my-cool-branch

বরং:

git checkout my-cool-branch

ফিক্স (আমার অবস্থানে) কেবল উপরের কমান্ড চালানোর জন্য এবং তারপর প্রবাহটি চালিয়ে যাওয়ার জন্য ছিল:

git checkout my-cool-branch
git pull

এই পুরোপুরি আমার জন্য কাজ করেছেন:

1. git stashআপনার স্থানীয় পরিবর্তন সংরক্ষণ করুন

আপনি যদি পরিবর্তন
git clean -df
git checkout -- .
গিট সাফ করতে চান তবে সমস্ত অট্যাক্টেড ফাইলগুলি সরান (সতর্কতা: এটি। জিটিগনরে সরাসরি উল্লিখিত ফাইলগুলিকে মুছে ফেলবে না তবে এটি ফোল্ডারগুলিতে থাকা অযত্ন ফাইলগুলি মুছে ফেলতে পারে) এবং গিট চেকআউট সমস্ত অসংযত পরিবর্তনগুলি সাফ করে।

2. git checkout masterপ্রধান শাখা (আপনি মাস্টার ব্যবহার করতে চান অনুমান)
3. সুইচ git pullমাস্টার শাখা থেকে শেষ কমিট টান
4. git statusসবকিছু দেখতে মহান দেখতে

On branch master
Your branch is up-to-date with 'origin/master'.

আপনি যদি Eclipse এ EGit ব্যবহার করেন EGit আপনার মাস্টারটি আপনার প্রধান বিকাশ শাখার অনুমান করুন

  • সাধারণত আপনি একটি শাখা পরিবর্তন, আপনি একটি নতুন এক
  • তারপর রিমোট থেকে টান
  • তারপর ডান প্রকল্প নোড ক্লিক করুন, টিম নির্বাচন করুন তারপর শো ইতিহাস নির্বাচন করুন
  • তারপর ডান মাস্টার ক্লিক করুন, চেক আউট নির্বাচন করুন
  • যদি Eclipse আপনাকে বলে, দুটি মাস্টার একটি স্থানীয় এক দূরবর্তী, দূরবর্তী নির্বাচন করুন

এর পরে আপনি মূল-মাস্টারকে পুনরায় সংযুক্ত করতে সক্ষম হবেন।


আমি একই সমস্যা ছিল। আমি আমার পরিবর্তনগুলি ছিন্ন করে দিয়েছি git stashএবং পূর্ববর্তী কমিটিতে স্থানীয় শাখাটিকে পুনঃস্থাপন করেছি (আমি মনে করি এটি যে কারণে ঘটেছে) তারপর এটি করা হয়েছে git pullএবং আমি এখন মাথাটি বিচ্ছিন্ন করছি না। git stash applyআবার আপনার পরিবর্তন আছে ভুলবেন না।


git checkout checksum  # You could use this to peek previous checkpoints
git status # You will see HEAD detached at checksum
git checkout master # This moves HEAD to master branch




git