গিটে হেড কি?


1026

আপনি গিট ডকুমেন্টেশন দেখতে পছন্দ করেন

শাখাটি পুরোপুরি হেডে মার্জ করতে হবে।

তবে গিট HEADঠিক কী?



উত্তর:


774

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

আপনি কি করিয়া হেড ইঙ্গিত করিয়া দেখিতে পারেন:

cat .git/HEAD

আমার ক্ষেত্রে, আউটপুটটি হ'ল:

$ cat .git/HEAD
ref: refs/heads/master

হেডের পক্ষে কোনও নির্দিষ্ট সংশোধনী উল্লেখ করা সম্ভব যা কোনও শাখার নামের সাথে সম্পর্কিত নয়। এই পরিস্থিতিতে একটি বিচ্ছিন্ন হেড বলা হয় ।


52
সুতরাং গিট হেডটি কোন ব্রাঞ্চের উপর নির্ভর করে আপনি ঠিক আছেন? এমনকি আরও, আপনি একটি বিকাশকারী হিসাবে? আমার ধারণা আমি জিজ্ঞাসা করছি, গিট হেড কি কোনও ভান্ডার-প্রশস্ত বিশ্বব্যাপী জিনিস হতে চলেছে, বা প্রতিটি দেবের জন্য পৃথক?
bobobobo

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

16
@ মেনগ এই আমাকে সাহায্য করেছে, আশা করি এটি সাহায্য করবে: marklodato.github.com/visual-git-guide/index-en.html
রাফায়েল

53
@ 動靜 能量: শিরোনাম যে কোনও প্রতিশ্রুতিতে নির্দেশ করতে পারে , এটি কোনও শাখায় সর্বশেষ কমিট হওয়ার দরকার নেই। (যখন HEAD কোনও প্রতিশ্রুতিতে নির্দেশ করে যা কোনও শাখায় শেষ প্রতিশ্রুতি নয়, এটি "বিচ্ছিন্ন হেড" হয়)।
গ্রেগ হিউগিল

126
প্রধান না "বর্তমান শাখা"। কি সেই প্রতিশ্রুতিতে দেওয়া নাম যা থেকে কার্যত গাছের বর্তমান অবস্থা শুরু হয়েছিল? আরও ব্যবহারিক ক্ষেত্রে, এটি চেক-আউট কমিটের প্রতীকী রেফারেন্স হিসাবে ভাবা যেতে পারে।
বেন কলিন্স

184

অন্যান্য লোকের উদ্ধৃতি দিতে :

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

এই পার্থক্যটি নোট করুন: একটি "মাথা" (ছোট হাতের) সংরক্ষণাগারের মধ্যে নাম দেওয়া যে কোনও একটিকে বোঝায়; "হেড" (বড় হাতের) ব্যাক্তিগতভাবে সক্রিয় মাথাটিকে কেবলমাত্র বোঝায়। এই পার্থক্যটি গিট ডকুমেন্টেশনে প্রায়শই ব্যবহৃত হয়।

আরও একটি ভাল উত্স যা গিটের অভ্যন্তরীণ ক্রিয়াকলাপগুলি দ্রুত coversেকে দেয় (এবং এর জন্য মাথা / হেড সম্পর্কে আরও ভাল বোঝার জন্য) এখানে পাওয়া যাবে । রেফারেন্স (রেফ :) বা প্রধান বা শাখাগুলি প্রতিশ্রুতিবদ্ধ ইতিহাসের কমিটগুলিতে আটকে থাকা নোট-এর মতো বিবেচনা করা যেতে পারে। সাধারণত তারা ধারাবাহিক কমিটের ডগায় ইশারা করে তবে তাদের সাথে git checkoutবা git resetঅন্যত্র সরানো যেতে পারে etc.


এ থেকে: "প্রতিটি মাথার একটি নাম আছে"। এবং "একটি মাথা" বর্তমান প্রধান "হিসাবে নির্বাচিত হয়। এই মাথাটি হেডের সাথে যুক্ত হয় ased সুতরাং আমি এ থেকে এই সিদ্ধান্তে পৌঁছেছি যে "হেড" "" বিচ্ছিন্ন হেড "রাষ্ট্রের অবস্থার উল্লেখ করে না।
gxyd

1
@gxyd যদি এটি হয় যে হেড একটি 'মাথা' নির্দেশ করে না, এটি একটি বিচ্ছিন্ন হেড। এটি আপনার নির্দিষ্ট করা প্রতিশ্রুতিটির প্রতিশ্রুতিবদ্ধ আইডির দিকে ইঙ্গিত করছে (উদাহরণস্বরূপ, ব্যবহার করে git checkout HEAD~2), যা কোনও পরিচিত মাথার প্রতিশ্রুতি আইডি নয়। আরও পুঙ্খানুপুঙ্খ ব্যাখ্যার জন্য নিবন্ধটি eagain.net/articles/git-for- কম্পিউটার কম্পিউটার বিজ্ঞানীদের দেখুন।
শিলফেইড

1
@ সিলফিড: সাধারণত আমি মনে করি এই উত্তরটি গ্রহণযোগ্যটির চেয়ে ধারণাগতভাবে আরও বেশি দুর্দান্ত (যদিও একটি শাখার জন্য ছোট ছোট "মাথা" ব্যবহার করে অনেক লোককে বিভ্রান্ত করে)। তবে git revertডানাটি না থাকার জন্য একটি শাখা স্থানান্তরিত করার ভাল উদাহরণ নয়, কারণ git revertকিছু নতুন কমিট তৈরি করে এবং এখনও নতুন শাখাটি (নতুন) ডগায় ছেড়ে দেয়।
লার্শ

1
"যা কোনও পরিচিত মাথার প্রতিশ্রুতিবদ্ধ আইডি নয়" - আসলে, একটি বিচ্ছিন্ন হেড একটি কমিট আইডির দিকে ইঙ্গিত করতে পারে যা পরিচিত মাথা (বা বেশ কয়েকটি মাথা) এর কমিট আইডিও বটে । এটিকে কী আলাদা করে তোলে তা হ'ল হেড সরাসরি কমিট আইডির দিকে নির্দেশ করে, কোনও মাথা না। এই ভবিষ্যতে আচরণকে প্রভাবিত হবে commit, এস resetইত্যাদি গুলি,
LarsH

1
@ লার্শ: একটি পৃথক হেডের ভাল পয়েন্টটি একটি রেফারেন্সের পরিবর্তে কমিট আইডির দিকে ইঙ্গিত করছে। আপনি .git / HEAD দেখে এটি যাচাই করতে পারেন। যদি এটি আলাদা করা হয় তবে এটিতে একটি অঙ্গীকারের হ্যাশ থাকবে, যদিও এটি পরিচিত মাথা হিসাবে একই প্রতিশ্রুতিবদ্ধ। যদি এটি সংযুক্ত থাকে তবে এতে মাথার পথ থাকবে (যেমন 'রেফ: রেফ / হেডস / বব')। রিভার্ট কমান্ড হিসাবে, 8 বছর পরে আমি কখনই সেই টাইপটি ধরিনি। গিট রিসেট হ'ল যা আপনাকে কোনও নির্দিষ্ট মাথাটি নির্দিষ্ট প্রতিশ্রুতিতে নির্দেশ করার জন্য সামঞ্জস্য করতে দেয়।
শিলফেইড

62

আমি গিথুব বিকাশকারী স্কট চকন [ ভিডিও রেফারেন্স ] এর এই সংজ্ঞাটি প্রস্তাব করছি :

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

পুরো ভিডিওটি পুরো গিট সিস্টেমটির ন্যায্য পরিচয় দেবে তাই সময় দেওয়ার সাথে সাথে সমস্ত কিছু দেখার জন্য আমি আপনাকেও সুপারিশ করি।


34
সুতরাং আসল ডিএফ হ'ল "আপনার পরবর্তী প্রতিশ্রুতির পিতামাতা"
নিকোলাস

1
এবং "যে জিনিসটি পরের শাখায় স্থানান্তরিত হবে"
নিকোলাস

@নিকোলস - আমি মনে করি এটি সত্য নয়। শিরোনাম যে কোনও প্রতিশ্রুতিতে নির্দেশ করতে পারে, এটি কোনও শাখায় নির্দেশ করার প্রয়োজন হয় না - যখন এটি হয় না, আপনি "বিচ্ছিন্ন হেড" মোডে থাকেন।
স্কুবো

23
ভিডিওটি দুর্দান্ত, তবে দুর্ভাগ্যক্রমে, এটি স্ট্যাক ওভারফ্লোয়ের জন্য একটি উপযুক্ত-উত্তর তৈরি করে না। ভবিষ্যতে ভিডিওটি যদি কিছু সময় নামানো হয় তবে কী হবে? তারপরে আপনার লিঙ্কটি কিছুই নির্দেশ করবে না। স্কট কী বলে ভিডিওর মধ্যে কী বলে তার একটি উত্তরের উত্তরের অন্তর্ভুক্ত থাকবে।

2
স্কট বলেছেন হেড একটি শাখার পয়েন্টার। তবে হেড পুরানো কমিটগুলিকেও নির্দেশ করতে পারে। এটা খুব বিভ্রান্তিকর।
ফিক্সি

60

হেড হ'ল একটি বিশেষ পয়েন্টার যা আপনার বর্তমানে অবস্থিত স্থানীয় শাখায় নির্দেশ করে।

থেকে প্রো গীত বই, অধ্যায় 3.1 গীত শাখাবিন্যাস - সংক্ষেপে শাখা , বিভাগে একটি নতুন শাখা তৈরি করা হচ্ছে :

নতুন শাখা তৈরি করলে কী হবে? ঠিক আছে, এটি করা আপনার চারদিকে ঘোরাতে নতুন পয়েন্টার তৈরি করে। ধরা যাক আপনি টেস্টিং নামে একটি নতুন শাখা তৈরি করেছেন। আপনি গিট শাখা কমান্ড দিয়ে এটি করুন:

$ git branch testing 

আপনি বর্তমানে যে একই প্রতিশ্রুতি দিচ্ছেন এটি একটি নতুন পয়েন্টার তৈরি করে

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

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

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


4
ভাল, যদিও পৃথক হেড কেস দেখানো একটি ছবি ব্যবহার করতে পারে
ডন হ্যাচ

@DonHatch, বিচ্ছিন্ন মাথার ভালো ব্যাখ্যা stackoverflow.com/a/35301963/1074179
Alexandr

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

1
@sleepwalkerfx কিন্তু আপনি চেকআউট পারেন কমিট করে একটি শাখা লেবেল আছে এবং কারণ আপনার মাথা আর শাখা লেবেলে নির্দেশ করা হয় কিন্তু শাখা আইডি কমিট এখনও বিচু্যত মাথা রাষ্ট্র হতে
মার্ক

1
@ ঘুমওয়ালারফেক্স আমার মনে হয় আমরা এই মুহুর্তে শব্দার্থবিজ্ঞানের কথা বলছি। আপনি একটি শাখা লেবেল একটি নির্দিষ্ট অঙ্গীকারের একটি পাঠ্য রেফারেন্স সঠিক। এটি অবশ্য প্রতিশ্রুতিবদ্ধ নয়। তাই আপনি যদি একটি করেনি git logএবং ভালো কিছু পেয়েছিলাম commit ad0265... HEAD -> foo ...যে অর্থ হবে fooশাখা আইডি কমিট করার জন্য একটি রেফারেন্স ad0265। পাঠ্য রেফারেন্সের একটি চেকআউট করা fooকোনও বিচ্ছিন্ন মাথা নয়। কমিট আইডির একটি চেকআউট করার ad0265ফলে কোনও মাথা আলাদা হয়ে যায়। আপনি যে কথা বলছেন তার কিছু সূক্ষ্মতা আমি মিস করছি। আমি আশা করি পাঠ্যের এই প্রাচীরটি আমি কোথায় হারিয়েছি তা আবিষ্কার করতে সহায়তা করে।
মার্ক

40

ধরে নেওয়া, এটি "বিচ্ছিন্ন হেড" নামে একটি বিশেষ মামলা নয়, তারপরে ও'রিলি গিট বইতে বলা হয়েছে, দ্বিতীয় তৃতীয় সংস্করণ, পি .6,, এর HEADঅর্থ:

HEADসর্বদা বর্তমান শাখায় সাম্প্রতিকতম প্রতিশ্রুতি বোঝায়। আপনি যখন শাখা পরিবর্তন করেন, HEADনতুন শাখার সর্বশেষ প্রতিশ্রুতি উল্লেখ করার জন্য আপডেট করা হয়।

সুতরাং

HEADহয় বর্তমান শাখার "টিপ"

নোট করুন যে আমরা HEADঅতি সাম্প্রতিক প্রতিশ্রুতিগুলি উল্লেখ করতে এবং HEAD~টিপটির আগে প্রতিশ্রুতি হিসাবে ব্যবহার করতে পারি , HEAD~~বা HEAD~2আরও আগেও প্রতিশ্রুতি হিসাবে ব্যবহার করি।


26

এই উত্তরগুলির একটিতে সম্ভবত একটি সূক্ষ্ম, তবে গুরুত্বপূর্ণ ভুল ধারণা রয়েছে। আমি ভেবেছিলাম আমার উত্তরটি এটি সাফ করার জন্য যুক্ত করব।

কী HEAD?

মাথা আপনি

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

হেড কী সংযুক্ত করতে পারে?

HEADহ্যাঁ, একটি প্রতিশ্রুতিবদ্ধ নির্দেশ করতে পারেন, কিন্তু সাধারণত এটি না। আমাকে এটা আবার বলতে দাও। সাধারণত HEADকোন প্রতিশ্রুতি নির্দেশ করে না। এটি একটি শাখার রেফারেন্সকে নির্দেশ করে। এটি সেই শাখার সাথে সংযুক্ত থাকে এবং আপনি যখন কিছু নির্দিষ্ট কাজ করেন (যেমন, commitবা reset), তখন সংযুক্ত শাখাটি পাশাপাশি চলে যাবে HEAD। হুডের নীচে তাকিয়ে আপনি এটি কী নির্দেশ করছেন তা দেখতে পারেন।

cat .git/HEAD

সাধারণত আপনি এই জাতীয় কিছু পাবেন:

ref: refs/heads/master

কখনও কখনও আপনি এই জাতীয় কিছু পাবেন:

a3c485d9688e3c6bc14b06ca1529f0e78edd3f86

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

আপনি নিম্নলিখিত অনুশীলন চেষ্টা করে দেখলে আপনি এটিকে গ্রাফিকভাবে দেখতে পারেন। গিট সংগ্রহস্থল থেকে, এটি চালান। আপনি কিছুটা আলাদা পাবেন তবে সেগুলি কী কী হবে। কমিটিকে সরাসরি চেক আউট করার সময় হলে প্রথম আউটপুট থেকে আপনি যা সংক্ষেপিত হ্যাশ পাবেন কেবল তা ব্যবহার করুন (এটি এখানে a3c485d)।

git checkout master
git log --pretty=format:"%h:  %d" -1
# a3c485d:   (HEAD -> master)

git checkout a3c485d -q # (-q is for dramatic effect)
git log --pretty=format:"%h:  %d" -1   
# a3c485d:   (HEAD, master)

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

এখন চেষ্টা করুন:

git status
# HEAD detached at a3c485d

নাঃ। আমরা 'বিচ্ছিন্ন হেড' অবস্থায় আছি।

আপনি (HEAD -> branch)বনামের (HEAD, branch)সাথে একই উপস্থাপনা দেখতে পারেন git log -1

উপসংহারে

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


1
আমি এই উত্তরটি পছন্দ করি কারণ ডকুমেন্টেশন সত্যের বর্ণনা দেওয়ার সময়, সফ্টওয়্যারটি সত্যকে সংজ্ঞায়িত করে। .git/HEADসফ্টওয়্যার যা হেড হিসাবে বিবেচনা করে।
ডন ব্রানসন

2
একমাত্র এর ধারণাগত সংজ্ঞা জন্য, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
এটা

22

HEADবর্তমান প্রতিশ্রুতি বোঝায় যা আপনার কার্যকরী অনুলিপি নির্দেশ করে, অর্থাত্ আপনি যে প্রতিশ্রুতিটি বর্তমানে পরীক্ষা করেছেন। গিট সংশোধনগুলি নির্দিষ্ট করার বিষয়ে অফিসিয়াল লিনাক্স কার্নেল ডকুমেন্টেশন থেকে :

HEAD কার্যনির্বাহী গাছের পরিবর্তনগুলির ভিত্তিতে আপনি যে প্রতিশ্রুতিবদ্ধ সেটির নাম দিন।

তবে নোট করুন, আসন্ন সংস্করণে 1.8.4 গিট-এর @জন্যও শর্টহ্যান্ড হিসাবে ব্যবহার করা যেতে পারে HEAD, যেমন গিট অবদানকারী জুনিও সি হামানো তাঁর গিট ব্ল্লে ব্লগে উল্লেখ করেছেন :

"HEAD" টাইপ করার পরিবর্তে আপনি "@" বলতে পারেন, যেমন "গিট লগ @" @

ওভারফ্লো ব্যবহারকারী ভোনসি স্ট্যাক করুন আরও একটি প্রশ্নের উত্তরে শর্টহ্যান্ড হিসাবে কেন @বেছে নেওয়া হয়েছিল সে সম্পর্কে কিছু আকর্ষণীয় তথ্যও পেয়েছিলেন ।

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


17

শাখাগুলি তৈরি করা এবং খেলতে দেখুন

HEAD আসলে এমন একটি ফাইল যার বিষয়বস্তু নির্ধারণ করে যে কোথায় HEAD ভেরিয়েবলটি উল্লেখ করে:

$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed

এই সংগ্রহস্থলে, HEAD ফাইলের সামগ্রীগুলি রেফ / হেড / মাস্টার নামের একটি দ্বিতীয় ফাইলকে বোঝায় । ফাইল রেফ / হেড / মাস্টার মাস্টার শাখায় সাম্প্রতিক হ্যাশ রয়েছে।

ফলাফলটি .git / রেফস / হেড / মাস্টার ফাইল থেকে মাস্টার শাখা কমিটের জন্য প্রধান পয়েন্ট ।

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


1
যত্নশীল: gitguys.com লিঙ্কটি পার্ক করা ডোমেনের দিকে নির্দেশ করছে বলে মনে হচ্ছে।
এমকেস্টার

14

গ্রেগ হিউগিলের গৃহীত উত্তরের কয়েকটি বিষয় সম্পর্কে আমি কেবল বিবরণ দিতে চাই। গিট পকেট গাইড অনুসারে

শাখা:

শাখা নিজেই নামযুক্ত কমিট (শাখার "টিপ") থেকে কমিট গ্রাফের সমস্ত পয়েন্ট হিসাবে পৌঁছনীয় হিসাবে সংজ্ঞায়িত হয়।

মাথা: একটি বিশেষ ধরণের রেফ

বিশেষ রেফ হেড নির্ধারণ করে যে আপনি কোন শাখায় আছেন ...

refs

গিট দুটি ধরণের রেফারেন্স বা নামকরণ করা পয়েন্টার সংজ্ঞায়িত করে, যা এটি "রেফস" বলে:

  • একটি সাধারণ রেফ, যা সরাসরি কোনও অবজেক্ট আইডির দিকে নির্দেশ করে (সাধারণত কমিট বা ট্যাগ)
  • একটি প্রতীকী রেফ (বা সিমরেফ), যা অন্য রেফকে নির্দেশ করে (সরল বা প্রতীকী)

গ্রেগ যেমন উল্লেখ করেছেন, হেড একটি "বিচ্ছিন্ন অবস্থায়" থাকতে পারে। সুতরাং হেড হয় সাধারণ রেফ (কোনও বিচ্ছিন্ন হেডের জন্য) বা সিমরেফ হতে পারে।

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


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

7

আমি মনে করি যে 'হেড' বর্তমান চেক আউট কমিট। অন্য কথায় 'হেড' বর্তমানে প্রতিশ্রুতিবদ্ধ যে প্রতিশ্রুতিবদ্ধ।

আপনি যদি সবেমাত্র ক্লোন করেছেন এবং চেক আউট না করে থাকেন তবে আমি জানি না এটি কীসের দিকে লক্ষ্য করে, সম্ভবত কিছু অবৈধ অবস্থান।


হ্যাঁ, HEADআপনি বর্তমানে যা যা প্রতিশ্রুতিবদ্ধ করেছেন তা বিশেষ রেফারেন্স । বিশদগুলির জন্য ম্যানুয়ালটি দেখুন (প্রাসঙ্গিক অনুচ্ছেদটি তাত্ক্ষণিক চিত্র 3.4 অনুসরণ করে)।
ক্যালরিয়ন

1
আপনি যদি কোনও সংগ্রহস্থল ক্লোন করেন তবে গিটটি ডিফল্টরূপে masterশাখাটি পরীক্ষা করে দেখবে - সুতরাং হেড প্রধানকে নির্দেশ করবে।
sleske

1
@ স্লেসকে আপনি যদি কোনও বিশেষ বিকল্প গিট না দিয়ে কোনও সংগ্রহস্থল ক্লোন করেন তবে দূরবর্তী মাথাটি পরীক্ষা করে দেখাবে। এটি সাধারণত হয় master, তবে এটি সর্বদা হয় না। দেখুনremote set-head
দে নভো

আমার পূর্ববর্তী মন্তব্যটি রেফারেন্স ব্যতীত সঠিক ছিল remote set-head, যা কেবল স্থানীয় ডিফল্ট শাখাকেই প্রভাবিত করে এবং সার্ভারে ডিফল্টটি পরিবর্তন করবে না।
দে নভো

5

বর্তমানে সন্ধান করা শাখার ডগায় মাথা নির্দেশ করুন।

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

আপনার সংগ্রহস্থলে একটি .git ফোল্ডার রয়েছে। এই অবস্থানে ফাইলটি খুলুন: .git \ refs। মাথা। (SHA-1 হ্যাশ) যে ফাইল (বেশিরভাগ ক্ষেত্রেই মাস্টার) কোড কমান্ডের আউটপুট দেখা এক সাম্প্রতিকতম কমিট হবে, অর্থাত git log। .Git ফোল্ডারে আরও তথ্য: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html


1
এটি একটি সাধারণ ভুল ধারণা যা বর্তমান শাখার অগ্রভাগটি সাম্প্রতিক প্রতিশ্রুতিবদ্ধতার দিকে নির্দেশ করে। সাধারণত এটি সত্য, তবে এটি অস্বাভাবিকও নয় git reset HEAD^এবং তারপরে সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি (পূর্ববর্তী টিপ) আর শাখার ডগা দ্বারা চিহ্নিত করা হয় না।
লার্শ

4

সঠিক উত্তরগুলিতে তৈরি পয়েন্টটি বাড়ি চালানোর দুর্দান্ত উপায়টি হল চালানো git reflog HEAD, আপনি হেডের নির্দেশিত স্থানগুলির সমস্তটির একটি ইতিহাস পান।


4

পূর্ববর্তী সমস্ত উত্তর পড়ার পরেও আমি আরও স্পষ্টতা চেয়েছিলাম। অফিসিয়াল গিট ওয়েবসাইটে এই ব্লগটি http://git-scm.com/blog আমাকে যা চেয়েছিল তা দিয়েছে:

দ্য হেড: পয়েন্টার শেষ স্ন্যাপশট প্রতিশ্রুতি, পরবর্তী পিতামাতা

গিট-এ হেড হ'ল বর্তমান শাখা রেফারেন্সের পয়েন্টার , যা আপনার করা শেষ প্রতিশ্রুতি বা আপনার কার্যনির্বাহী ডিরেক্টরিতে যাচাই করা সর্বশেষ প্রতিশ্রুতি হিসাবে নির্দেশক a এর অর্থ হ'ল এটি আপনার পরবর্তী প্রতিশ্রুতির পিতা-মাতা হবেন। এটিকে হেড হিসাবে মনে করা আপনার পক্ষে সর্বশেষতম প্রতিশ্রুতির স্ন্যাপশট generally


1
হেড: শেষ প্রতিশ্রুতি স্ন্যাপশট, পরবর্তী অভিভাবক সঠিক নয়। HEADকোন অঙ্গীকার নয়; এটা স্থানটিকে করুন।
jub0bs

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

1
যদি আপনি পরবর্তী লাইন পড়ুন: গীত মধ্যে প্রধান পয়েন্টার বর্তমান শাখা রেফারেন্স, যা একটি পালাক্রমে হয় পয়েন্টার গত কমিট আপনার তৈরি অথবা শেষ কমিট আপনার কাজ ডিরেক্টরির মধ্যে চেক আউট হন। - দয়া করে সেখানে "পয়েন্টার" শব্দটির ব্যবহারটি লক্ষ্য করুন note
ব্যবহারকারী3751385

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

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

3

দেখে মনে HEADহচ্ছে এটি সর্বশেষ প্রতিশ্রুতির জন্য একটি ট্যাগ যা আপনি পরীক্ষা করে দেখেছেন।

এটি কোনও নির্দিষ্ট শাখার টিপ হতে পারে (যেমন "মাস্টার") বা কোনও শাখার অভ্যন্তরীণ প্রতিশ্রুতি ("বিচ্ছিন্ন মাথা")


1

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


0

এই দুজন আপনাকে বিভ্রান্ত করতে পারে:

মাথা

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

মস্তক

বর্তমান শাখা, বা আপনার কার্যকরী গাছ সাধারণত সেই গাছ থেকে উত্পন্ন হয় যা হেড নির্দেশ করে। হেডকে অবশ্যই একটি মাথার দিকে নির্দেশ করতে হবে, আপনি পৃথক হেড ব্যবহার না করেই।


0

Http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is এ একবার দেখুন

চিত্র 3-5। আপনি যে শাখায় আছেন সেদিকে নির্দেশ করে হেড ফাইল।


4
কেবলমাত্র লিঙ্কের উত্তরগুলি সাধারণত স্ট্যাকওভারফ্লোতে নকল করা হয়, দয়া করে আপনার উত্তরে প্রাসঙ্গিক তথ্যটিকে ইনলাইন করুন।
হাস্কেলএলেফ্যান্ট

2
এটি সম্পূর্ণ সঠিক নয়। যা HEADবোঝায় তা নির্ভর করে আপনি খালি বনাম একটি নন-বেয়ার রেপোর কথা বলছেন কিনা তার উপর। নন-বেয়ার রেপোর প্রসঙ্গে এটি কার্যকরভাবে বর্তমানে যাচাই করা প্রতিশ্রুতি বোঝায়, যার সাথে এটির সাথে কোনও শাখা থাকার প্রয়োজন নেই (যেমন বিচ্ছিন্ন HEADঅবস্থায় থাকা অবস্থায়))

0

একটি শাখা আসলে একটি পয়েন্টার যা প্রতিশ্রুতি আইডি যেমন 17a5 ধারণ করে । ব্যবহারকারী বর্তমানে যে শাখায় কাজ করছে সেগুলির জন্য শিরোনাম একটি পয়েন্টার।

মস্তক একটি রেফারেন্স filw ভালো দেখায় যা আছে:

সুত্র:

আপনি .git/HEAD .git/refsযে ভাণ্ডারে কাজ করছেন সেগুলিতে প্রবেশ করে আপনি এই ফাইলগুলি পরীক্ষা করতে পারেন ।


0

Gitসব কমিট সম্পর্কে।
এবং Headআপনি বর্তমানে যে প্রতিশ্রুতিটি পরীক্ষা করে দেখেছেন তা নির্দেশ করে।

$ git cat-file -t HEAD
commit

যখনই আপনি একটি শাখা চেকআউট করেন, হেডটি সেই শাখায় সর্বশেষ প্রতিশ্রুতি দেয় points হেডের বিষয়বস্তু নীচে হিসাবে (মাস্টার শাখার জন্য) পরীক্ষা করতে পারবেন:

$ cat .git/refs/heads/master
  b089141cc8a7d89d606b2f7c15bfdc48640a8e25

-5

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

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

এটি মার্চুরিয়ালের ক্ষেত্রেও সত্য ।


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