গিট ট্যাগ চেক করার ফলে "বিচ্ছিন্ন হেডের অবস্থা" বাড়ে


166

আমি আমার গিট প্রকল্পের জন্য একটি ডিপ্লোয়মেন্ট স্ক্রিপ্ট বিকাশ করছি এবং আমি সবে ট্যাগ ব্যবহার শুরু করেছি। আমি একটি নতুন ট্যাগ যুক্ত করেছি v2.0:

git tag -a v2.0 -m "Launching version 2.0"

এবং আমি এই ট্যাগটি দূরবর্তী সংগ্রহস্থলে ঠেলে দিয়েছি

git push --tags

আমি যখন ডিপ্লোয়মেন্ট স্ক্রিপ্টটি কার্যকর করার চেষ্টা করি এবং v2.0ট্যাগটি পরীক্ষা করে দেখি আমি এই বার্তাটি পাই:

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

এটা কি স্বাভাবিক? ভান্ডারটি লম্বা হয় কারণ যদি আমি এটি করি:

git branch

আমি এই আউটপুট পেতে:

* (no branch)
  master

দুঃখিত যদি এটি সুস্পষ্ট হয় তবে আমি এটি বের করতে পারি না।


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

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

ভাল, হ্যাঁ আপনাকে আগে --tags আনতে হবে (বা গিট আনতে হবে যা দূর থেকে সমস্ত টানবে) যাতে গিট ট্যাগটি চেকআউট করতে পারে। দুঃখিত আমি আজ আপনার মন্তব্যটি দেখেছি।
খ্রিজ

উত্তর:


429

ঠিক আছে, প্রথমে কয়েকটি পদ সামান্য ওভারস্প্লিপ্লাইড।

ইন git, একটি tag(অন্যান্য অনেক কিছুর মতো) যাকে বলা হয় বৃক্ষবহুল । এটি প্রকল্পের ইতিহাসের পয়েন্টগুলিকে উল্লেখ করার একটি উপায়। ট্রিগুলি একটি ট্যাগ, প্রতিশ্রুতিবদ্ধ, একটি তারিখ নির্দিষ্টকরণকারী, অর্ডিনাল স্পেসিফায়ার বা অন্যান্য অনেকগুলি জিনিস হতে পারে।

এখন একটি branchঠিক ট্যাগের মতো তবে অস্থাবর। আপনি যখন একটি শাখায় "চালু" থাকেন এবং প্রতিশ্রুতিবদ্ধ হন, তখন শাখাটি আপনার বর্তমান প্রতিশ্রুতিটি নির্দেশ করে তৈরি করা নতুন প্রতিশ্রুতিতে স্থানান্তরিত হবে।

আপনার HEADএকটি শাখার দিকে নির্দেশক যা "বর্তমান" হিসাবে বিবেচিত হয়। সাধারণত আপনি যখন কোনও সংগ্রহস্থল ক্লোন করেন, তখন প্রতিশ্রুতিবদ্ধ কোনটিকে HEADনির্দেশ masterকরবে। আপনি যখন এর মতো কিছু করেন git checkout experimental, আপনি HEADসেই experimentalশাখায় পয়েন্টটি স্যুইচ করেন যা কোনও ভিন্ন কমিটকে নির্দেশ করতে পারে।

এখন ব্যাখ্যা।

আপনি যখন একটি করেন git checkout v2.0, আপনি এমন প্রতিশ্রুতিতে স্যুইচ করছেন যা ক দ্বারা নির্দেশিত নয় branchHEADএখন "বিচ্ছিন্ন" হয় এবং একটি শাখা নির্দেশিত নয়। আপনি যদি এখনই একটি প্রতিশ্রুতিবদ্ধতা স্থির করার সিদ্ধান্ত নেন (আপনি যেমন পারেন) তবে এই প্রতিশ্রুতি ট্র্যাক করার জন্য আপডেট করার মতো কোনও শাখা পয়েন্টার নেই। অন্য প্রতিশ্রুতিতে ফিরে যাওয়া আপনাকে তৈরি করা এই নতুন প্রতিশ্রুতি হারাতে বাধ্য করবে। বার্তাটি আপনাকে এটাই বলছে।

সাধারণত, আপনি যা করতে পারেন তা বলতে হয় git checkout -b v2.0-fixes v2.0। এটি গাছপালা দ্বারা চিহ্নিত প্রতিশ্রুতিতে একটি নতুন শাখা পয়েন্টার তৈরি করবে v2.0(এই ক্ষেত্রে একটি ট্যাগ) এবং তারপরে আপনার HEADপয়েন্টটি স্থানান্তর করবে। এখন, আপনি যদি কমিট করেন তবে তাদের ট্র্যাক করা সম্ভব ( v2.0-fixesশাখা ব্যবহার করে ) এবং আপনি সাধারণত আপনার মতো কাজ করতে পারেন। আপনি যা করেছেন তার সাথে "ভুল" কিছুই নেই বিশেষত যদি আপনি কেবল v2.0কোডটি একবার দেখতে চান । তবে, আপনি যেখানে ট্র্যাক করতে চান সেখানে কোনও পরিবর্তন করতে চান, আপনার একটি শাখা দরকার।

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


ঠিক আছে ধন্যবাদ, কোডে আমার কোনও পরিবর্তন করার দরকার নেই তাই আমি মনে করি এটি ঠিক আছে। আমার একটি শাখা তৈরি করার দরকার নেই। অনেক ধন্যবাদ!
খ্রিজ

1
আমি প্রথমবার এই উত্তরটি সন্ধান করায় হারিয়েছিলাম তবে আমি গিট শাখার ডকুমেন্টেশন পড়ার পরে: http://git-scm.com/book/en/Git-Branching-What-a- ব্র্যাঞ্চ- এটা অনেক পরিষ্কার ছিল ।
চিহ্ন

3
দুর্দান্ত উত্তর, তবে আমি এই সম্পর্কিত যোগ করতে পারি: "অন্য প্রতিশ্রুতিতে ফিরে যাওয়া আপনাকে তৈরি করা এই নতুন প্রতিশ্রুতি হারাতে বাধ্য করবে!" - আপনি এখনও প্রতিশ্রুতিটি খুঁজে পেতে পারেন git reflogযা সম্পর্কে জানার জন্য একটি দুর্দান্ত আদেশ! আবর্জনা সংগ্রহের ঘটনা না ঘটলে অঙ্গীকার হারানো আপাতদৃষ্টিতে "অসম্ভব"।
দিমিত্রি মিনকভস্কি

কোনও আবর্জনা সংগ্রহের ক্রিয়াকলাপের ভিত্তিতে অবাস্তব কমিটগুলি হারিয়ে যেতে পারে।
নওফাল ইব্রাহিম

1
ইউআরএলটি ভুল কারণ তারা পৃষ্ঠার বিন্যাস পরিবর্তন করেছে।
jcubic

12

হ্যাঁ, এটি স্বাভাবিক। এটি কারণ আপনি একটি একক প্রতিশ্রুতি চেকআউট, এটি একটি মাথা আছে। বিশেষত এটি (তাড়াতাড়ি বা পরে) কোনও শাখার প্রধান নয়।

তবে সেই রাজ্যে সাধারণত কোনও সমস্যা হয় না। আপনি ট্যাগটি থেকে একটি নতুন শাখা তৈরি করতে পারেন, যদি এটি আপনাকে নিরাপদ মনে করে :)


1
ঠিক আছে, আমি এটি সেভাবেই রাখব ... যাইহোক নিরাপত্তা ওভাররেটেড করা যায়;)
খ্রিজ

যেমন আপনি নওফালসের উত্তরে মন্তব্য করা হয়েছে (এটি সর্বোত্তম, আমি অবশ্যই বলব;)): যতক্ষণ না আপনি কোনও কিছু পরিবর্তন করেন না, ততক্ষণ আপনার উদ্বিগ্ন হওয়ার কিছু নেই। তবে, যদি আপনি ধরে নেন, যে আপনি কোনও কিছু পরিবর্তন করতে পারেন তবে আপনি কেবল একটি শাখা তৈরি করতে পারেন, কারণ এগুলি গিটের তুলনায় সস্তা এবং আপনি এটি মুছতে পারেন (এবং পরে আবার তৈরি করুন)।
কিংক্রাঞ্চ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.