গিটের বর্তমান কমিটের জন্য কীভাবে হ্যাশ পাবেন?


1930

আমি গিফ চেঞ্জসেটকে টিএফএসে সঞ্চিত ওয়ার্কাইটেমের সাথে লিঙ্ক করার ক্ষমতাটি (এখনই) ধরে রাখতে চাই।

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

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

গিটের বর্তমান কমিট থেকে আমি কীভাবে সহজেই হ্যাশটি পুনরুদ্ধার করতে পারি?

উত্তর:


2805

নির্বিচারে প্রসারিত অবজেক্ট রেফারেন্সটি SHA-1 এ রূপান্তর করতে , উদাহরণস্বরূপ কেবল গিট-রেভ-পার্স ব্যবহার করুন

git rev-parse HEAD

অথবা

git rev-parse --verify HEAD

সিডিনোট: আপনি যদি রেফারেন্সগুলি ( শাখা এবং ট্যাগগুলি ) SHA-1 এ রূপান্তরকরতে চানতবে রয়েছেgit show-refএবং আছেgit for-each-ref


81
--verifyইঙ্গিত দেয় যে:The parameter given must be usable as a single, valid object name. Otherwise barf and abort.
লিনাস আনব্যাক

647
git rev-parse --short HEADহ্যাশটির সংক্ষিপ্ত সংস্করণটি ফিরিয়ে দেয়, কেবল যদি কেউ ভাবছিল।
থান ব্রিমহল

54
থান যা বলেছিল তার সাথে যুক্ত করে আপনি হ্যাশ থেকে নির্দিষ্ট সংখ্যার সংখ্যা পেতে --shortযেমন একটি নির্দিষ্ট দৈর্ঘ্য যুক্ত করতে পারেন --short=12
টাইসন ফাল্প

31
@TysonPhalp: --short=Nসম্পর্কে ন্যূনতম সংখ্যার সংখ্যা; সংক্ষিপ্ত আকারটি সংক্ষিপ্ততর অন্যান্য কমিট থেকে অবিচ্ছিন্ন হবে যদি গিট বৃহত্তর সংখ্যার ব্যবহার করে। উদাহরণস্বরূপ চেষ্টা করুন git rev-parse --short=2 HEADবা git log --oneline --abbrev=2
জাকুব নরবস্কি

36
থান, টাইসন এবং জাকুব যা বলেছিলেন তার সাথে যুক্ত করে, আপনি সম্পূর্ণ হ্যাশটি মুদ্রণ করতে পারেন তবে কমিট নীলটি সনাক্ত করতে প্রয়োজনীয় হেক্সটগুলি হাইলাইট করুনgit rev-parse HEAD | GREP_COLORS='ms=34;1' grep $(git rev-parse --short=0 HEAD)
জাজ

423

আপনি যদি কেবল সংক্ষিপ্ত হ্যাশ চান:

git log --pretty=format:'%h' -n 1

আরও, দীর্ঘ হ্যাশ পাওয়ার জন্য% H ব্যবহার করা অন্য উপায়।


106
অথবা, দেখে মনে হচ্ছে, উপরের রেভ-পার্স কমান্ডে শর্ট যোগ করা কাজ করছে বলে মনে হচ্ছে।
আউটফালচার

15
আমি মনে করি git logচীনামাটির বাসন এবং git rev-parseনদীর গভীরতানির্ণয় হয়।
আমেদী ভ্যান গ্যাসে

এই পদ্ধতির সুবিধাগুলির মধ্যে একটি হ'ল এটি হ্যাশটির সংক্ষিপ্ত সংস্করণটি হ্যাশ সংঘর্ষের সাথে সামঞ্জস্য করা ডান দৈর্ঘ্যের সাথে ফিরিয়ে দেবে যা বৃহত্তর সংগ্রহগুলির জন্য ঘটে for অন্তত গিটের সাম্প্রতিক সংস্করণগুলিতে।
ইলিয়া সিডোরেনকো

4
এটি এটি করার একটি খারাপ / ভুল উপায় কারণ আপনার যদি মাথা আলাদা করে রাখেন তবে এই পদ্ধতিটি আপনাকে ভুল হ্যাশ দেবে। উদাহরণস্বরূপ যদি বর্তমান প্রতিশ্রুতি 12ab34 হয় ... এবং পূর্বের প্রতিশ্রুতিটি 33aa44 ছিল ... তবে আমি যদি 'গিট চেকআউট 33aa44' করি এবং তারপর আমি আপনার কমান্ডটি চালাই আমি তখনও 12ab34 ফিরে পাব ... আমার মাথাটি আসলে নির্দেশ করা সত্ত্বেও 33aa44 থেকে ...
কিউশনেশনম্যান

3
@TheQuetionMan আপনার বর্ণনার আচরণটি আমি অনুভব করি না; git checkout 33aa44; git log -n 1আমাকে দেয় 33aa44। আপনি গিটের কোন সংস্করণ ব্যবহার করছেন?
অফ কালচার

150

আর একটি, গিট লগ ব্যবহার করে:

git log -1 --format="%H"

এটি @ আউটফালচারের সাথে খুব সামান্য হলেও সামান্য।


এবং ফলাফল একক উদ্ধৃত হয় না।
ক্রোকসেক

5
এটি সঠিক উত্তর, যেহেতু এটির পরিবর্তে কোনও নির্দিষ্ট প্রতিশ্রুতি চেকআউট করা হলেও এটি কাজ করে HEAD
পার্সা

1
@ পারসা: নামকরণ করা ব্রাঞ্চের HEADচেয়ে এই প্রতিশ্রুতিটিতে একটি নির্দিষ্ট প্রতিশ্রুতিবদ্ধ পয়েন্টগুলি পরীক্ষা করার সময় আলাদা মাথা হিসাবে জানতে হবে ।
ক্রিস্টোফসেন 20

124

সম্পূর্ণ এসএএএ পেতে:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

সংক্ষিপ্ত সংস্করণটি পেতে:

$ git rev-parse --short HEAD
cbf1b9a

দুই তাহলে git commitহ্যাশ প্রয়োজন হয়, এই ধরনের থেকে এক হিসাবে branchআপনি বর্তমানে সাথে কাজ করেন, এবং একটি master branch, এছাড়াও আপনি ব্যবহার করতে পারে git rev-parse FETCH_HEADযদি আপনার জন্য হ্যাশ প্রয়োজন master commitআপনি যে mergeআপনার বর্তমান বা ঘ branch। উদাহরণস্বরূপ যদি আপনার branchএএস masterএবং feature/new-featureএকটি প্রদত্ত রেপো থাকে, আপনি যখন feature/new-featureব্যবহার করতে পারেন git fetch origin master && git merge FETCH_HEADএবং তারপরে আপনার git rev-parse --short FETCH_HEADযদি আপনার কোনও স্ক্রিপ্টের জন্য কেবলমাত্র আপনার commitহ্যাশটির প্রয়োজন হয় । mastermerge
ইভাল

72

সম্পূর্ণতার জন্য, যেহেতু কেউই এটি এখনও প্রস্তাব করেনি। .git/refs/heads/masterএমন একটি ফাইল যা কেবলমাত্র একটি লাইন থাকে: সর্বশেষ কমিটের হ্যাশmaster । সুতরাং আপনি কেবল সেখান থেকে এটি পড়তে পারেন।

বা কমান্ড হিসাবে:

cat .git/refs/heads/master

হালনাগাদ:

নোট করুন যে গিটটি এখন / রেফ / হেডস / ফোল্ডারে কোনও ফাইলের পরিবর্তে প্যাক-রেফ ফাইলে কিছু হেড রেফগুলি সঞ্চয় করতে সহায়তা করে। https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html


10
এটি ধরে নিয়েছে যে বর্তমান শাখাটি master, যা অগত্যা সত্য নয়।
গাভরি

12
প্রকৃতপক্ষে. সে কারণেই আমি স্পষ্টভাবে বলেছি এটি এর জন্য master
ডিস্টান

20
.git/HEADসাধারণত একটি রেফারেন্টকে নির্দেশ করে, আপনার যদি সেখানে কোনও SHA1 থাকে, তবে আপনি হেড মোডে বিচ্ছিন্ন।
উপস্থাপিত হয়েছে

8
এটি অন্যান্য পদ্ধতির তুলনায় খুব দৃ isn't় নয়, বিশেষত কারণ এটি ধরে নিয়েছে যে একটি .gitসাব-ডাইরেক্টরি রয়েছে, যা অগত্যা ক্ষেত্রে হয় না। ম্যান পৃষ্ঠাতে --separate-git-dirপতাকাটি দেখুন git init
jub0bs

16
+1 টি কারণ কখনও কখনও আপনি চাই না Git এক্সিকিউটেবল ইনস্টল করো (উদাঃ আপনার Dockerfile মধ্যে)
Wim

50

হ্যাশ প্রতিশ্রুতিবদ্ধ

git show -s --format=%H

সংক্ষিপ্ত প্রতিশ্রুতি হ্যাশ

git show -s --format=%h

আরও উদাহরণের জন্য এখানে ক্লিক করুনgit show


50

সবসময় আছে git describe। ডিফল্টরূপে এটি আপনাকে দেয় -

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75

18
গিটের বিবরণ কোনও প্রতিশ্রুতি থেকে প্রথম ট্যাগটি পৌঁছনীয় returns এটি কীভাবে আমাকে SHA পেতে সহায়তা করে?
সারদৌকার

42
আমি পছন্দ git describe --long --dirty --abbrev=10 --tagsকরি এটি আমার কাছে এমন কিছু দেবে 7.2.0.Final-447-g65bf4ef2d4যা .2.২.০ এর পরে ৪77 টি কমিট করে inal সংস্করণ স্ট্রিংয়ের জন্য এটি খুব ভাল। - লম্বা দিয়ে এটি সর্বদা গণনা (-0-) এবং হ্যাশ যুক্ত করবে, এমনকি যদি ট্যাগটি একেবারে মিলে যায়।
উপস্থাপিত হয়েছে

14
যদি কোনও ট্যাগ উপস্থিত না থাকে তবে git describe --always"ফ্যালব্যাক হিসাবে স্বতন্ত্র সংক্ষেপে প্রতিশ্রুতিবদ্ধ বস্তুটি দেখানো হবে"
রনি অ্যান্ডারসন

আমি ব্যবহার git describe --tags --first-parent --abbrev=11 --long --dirty --always--alwaysবিকল্পটি একবার ব্যবহার করেই ফলাফল (হ্যাশ) প্রদান করে এমনকি যদি কোন ট্যাগ নেই মানে। এর --first-parentঅর্থ এটি মার্জ কমিট দ্বারা বিভ্রান্ত হয় না এবং কেবল বর্তমান শাখায় আইটেম অনুসরণ করে। এটিও নোট করুন যে বর্তমান শাখায় আপত্তিহীন পরিবর্তনগুলি থাকলে ফলাফলটিতে --dirtyসংযোজন হবে -dirty

30

ব্যবহার git rev-list --max-count=1 HEAD


3
গিট-রেভ-তালিকাটি প্রতিশ্রুতিবদ্ধ অবজেক্টগুলির তালিকা তৈরির বিষয়ে; এটা Git-প্রকা-পার্স রয়েছে SHA-1 মধ্যে বস্তুর নাম (মাথা উদাঃ) অনুবাদ করতে হয়
Jakub Narębski

21

কোনও স্ক্রিপ্ট চলাকালীন আপনার যদি হ্যাশটি একটি চলকতে সঞ্চয় করতে হয় তবে আপনি এটি ব্যবহার করতে পারেন

last_commit=$(git rev-parse HEAD)

অথবা, যদি আপনি কেবল প্রথম 10 টি অক্ষর চান (যেমন github.com করে)

last_commit=$(git rev-parse HEAD | cut -c1-10) 

26
এছাড়াও --shortবা --short=numberপরামিতি আছে git rev-parse; একটি পাইপ এবং ব্যবহার করার প্রয়োজন নেই cut
জুলিয়ান ডি

15

আপনি যদি সুপার হ্যাকি উপায়টি করতে চান তবে:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

মূলত, গিটটি ফর্মের মধ্যে .Git / HEAD এ হেডের অবস্থান সঞ্চয় করে ref: {path from .git} । এই কমান্ডটি এটি পড়বে, "রেফ:" কেটে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো পড়তে হবে।

এটি অবশ্যই বিচ্ছিন্ন-হেড মোডে ব্যর্থ হবে, যেহেতু হেড "রেফ: ..." হবে না, তবে হ্যাশ নিজেই - তবে আপনি জানেন, আপনি মনে করেন না যে আপনি আপনার বাশের মধ্যে এত স্মার্ট আশা করেন -liners। আপনি যদি না ভাবেন যে সেমিকোলনগুলি প্রতারণা করছে, যদিও ...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

1
গিট ইনস্টল করার দরকার নেই, আমি এটি পছন্দ করি। (আমার ডকার বিল্ড ইমেজের গিট নেই)
হেলিন ওয়াং

এছাড়াও দরকারী কারণ আপনি গিট রেপোর বাইরে থেকে সহজেই এটি চালাতে পারেন
সামাস্পিন

আমি এটিকে আমার স্থানীয় মেশিনের স্ক্রিপ্টে আনুষ্ঠানিকভাবে দিয়েছি। তারপরে, আমি ভেবেছিলাম, আরে: আমি যে বাস্তবায়ন করেছি তা যথেষ্ট সহজ যে এটি একটি সম্পর্কিত সম্পর্ককে কীভাবে সমাধান করতে হবে তা বোঝায় (বাহ্যিক প্রোগ্রামগুলি ছাড়াই কাঁচা পসিক্স শেল স্ক্রিপ্টগুলিতে যুক্তিগুলি পার্সিং) তবে কিছুটা ভিন্নতা সরবরাহ করতে এবং বেশিরভাগটির শোষণ করার পক্ষে যথেষ্ট জটিল complex বৈশিষ্ট্য sh। ডকুমেন্টেশন আধা ঘন্টা পরে মন্তব্য, এবং এখানে এটি একটি সংক্ষিপ্ত বিবরণ: gist.github.com/Fordi/29b8d6d1ef1662b306bfc2bd99151b07
ফোর্ডি

এটি দেখে, আমি গিট এবং এসভিএন সনাক্তকরণ এবং গিট হ্যাশ / এসভিএন পুনর্বিবেচনাটি সনাক্ত করার জন্য আরও বিস্তৃত সংস্করণ তৈরি করেছি। এবার কোনও পরিষ্কার স্ট্রিং নয়, তবে সহজেই কমান্ড-লাইনটি পার্স করা হয়েছে এবং সংস্করণ ট্যাগ হিসাবে ব্যবহারযোগ্য: gist.github.com/Fordi/8f1828efd820181f24302b292670b14e
ফোর্ডি

14

আমি জানি সবচেয়ে সংক্ষিপ্ত উপায়:

git show --pretty=%h 

আপনি যদি হ্যাশের একটি নির্দিষ্ট সংখ্যা চান তবে আপনি যুক্ত করতে পারেন:

--abbrev=n

14
প্রযুক্তিগতভাবে এটি কাজ করার সময়, git showযা পোরস্লেইন কমান্ড হিসাবে পরিচিত (যেমন ব্যবহারকারী-মুখোমুখি), এবং তাই স্ক্রিপ্টগুলিতে ব্যবহার করা উচিত নয় কারণ এর আউটপুট পরিবর্তনের সাপেক্ষে। উপরের উত্তরটি ( git rev-parse --short HEAD) পরিবর্তে ব্যবহার করা উচিত।
jm3

4
@ জেএম 3 এটি পিছনের দিকে। "চীনামাটির বাসন" কমান্ডগুলির স্থিতিশীল আউটপুট রয়েছে যা স্ক্রিপ্টগুলির জন্য উদ্দিষ্ট। git help showজন্য অনুসন্ধান করুন porcelain
জন টাইরি

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

1
প্রিয় godশ্বর যিনি এই বিকল্পটির নাম রাখার সিদ্ধান্ত নিয়েছেন - চীনামাটির জিনিসগুলি আমি তাদের সন্ধান করতে চাই এবং ... ওহ অপেক্ষা করুন আমাকে কিছু মনে রাখার জন্য গিট ব্যবহার করার দরকার নেই
ব্রিটন কেরিন

14

সম্ভবত আপনি একটি উপনাম চান যাতে আপনাকে সমস্ত নিফটির বিবরণ মনে রাখবেন না। নীচের একটি পদক্ষেপের পরে, আপনি কেবল টাইপ করতে সক্ষম হবেন:

$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630

গৃহীত উত্তর অনুসরণ করা সেট আপ করার জন্য এখানে দুটি উপায়:

1) গ্লোবাল কনফিগারেশন (আমার আসল উত্তর) সম্পাদনা করে সুস্পষ্ট উপায়ে গিট পড়ান:

 # open the git config editor
 $ git config --global --edit
 # in the alias section, add
 ...
 [alias]
   lastcommit = rev-parse HEAD
 ...

2) অথবা আপনি যদি গিটকে শর্টকাট শেখাতে একটি শর্টকাট পছন্দ করেন, যেমনটি সম্প্রতি অ্যাড্রিয়েন মন্তব্য করেছেন:

$ git config --global alias.lastcommit "rev-parse HEAD"

এখান থেকে, git lastcommitসর্বশেষ কমিটের হ্যাশ প্রদর্শন করতে ব্যবহার করুন ।


3
অ্যাড্রিয়েন ডি সেন্তেনাক নোট করেছেন যে গিট কনফিগারেশন ফাইলটি ম্যানুয়ালি সম্পাদনা করার পরিবর্তে আপনি কেবল এটি করতে পারেন:git config --global alias.lastcommit "rev-parse HEAD"
সিজিবিএম

12

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

এখানে এক লাইনার রয়েছে যা
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
ফলাফল:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

ব্যাখ্যা: বর্তমান প্রতিশ্রুতি বর্ণনা করে (টিকেিত ট্যাগ ব্যবহার করে) তবে কেবল "নোট এ ট্যাগ নয়" ট্যাগ সহ। যেহেতু ট্যাগগুলির ফাঁকা স্থান থাকতে পারে না, এটি কখনই কোনও ট্যাগের সাথে মেলে না এবং যেহেতু আমরা ফলাফলটি দেখতে চাই --always, কমান্ডটি --abbrev=0কমিটের পূর্বে ( ) sha1 প্রদর্শন করে ফিরে আসে এবং যদি ওয়ার্কিং ডিরেক্টরি হয় তবে এটি একটি নক্ষত্র যুক্ত করে--dirty

আপনি যদি নক্ষত্র যুক্ত করতে চান না, এটি পূর্ববর্তী উত্তরে অন্যান্য সমস্ত কমান্ডের মতো কাজ করে:
git describe --always --abbrev=0 --match "NOT A TAG"
ফলাফল:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe


ধন্যবাদ, কেবল এটির জন্য হোঁচট খাচ্ছে এবং এটির জন্য এটি আমাকে এক বা অন্য প্রতিধ্বনি রক্ষা করে :)
হ্যাক্রে

1
এটা ছাড়া আমার জন্য কাজ করে --match "NOT A TAG"। গিট 2.18.0 পাশাপাশি পরীক্ষা করেছেন 2.7.4। এই যুক্তির প্রয়োজন আছে এমন কোনও পরিস্থিতি কি আছে?
টমাস

@ থমাস বর্তমান প্রতিশ্রুতিবদ্ধতার ইতিহাসে কোথাও একটি টীকাযুক্ত ট্যাগ থাকলে এটি কাজ করবে না। ভুয়া ট্যাগটি নিশ্চিত করে যে বিবরণী আদেশটি
কমিটের বিবরণ

8
git show-ref --head --hash head

আপনি যদিও গতিতে যাচ্ছেন, ডিস্টান দ্বারা উল্লিখিত পদ্ধতিটি

cat .git/refs/heads/<branch-name>

এখন পর্যন্ত এখানে তালিকাভুক্ত অন্য যে কোনও পদ্ধতির চেয়ে উল্লেখযোগ্যভাবে দ্রুত।


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

6

গিট ফাইলগুলি থেকে সরাসরি পঠন ব্যবহার করে বাশ শেলের এক-লাইনার এখানে দেওয়া হয়েছে:

(head=($(<.git/HEAD)); cat .git/${head[1]})

আপনার গিট রুট ফোল্ডারে আপনার উপরের কমান্ডটি চালানো দরকার।

এই পদ্ধতিটি কার্যকর যখন আপনি ফাইল সংগ্রহস্থল করতে পারেন, কিন্তু gitকমান্ড ইনস্টল করা হয়নি।

যদি কাজ না করে, আপনি .git/refs/headsকী ধরণের মাথা উপস্থিত আছেন তা ফোল্ডারে চেক করুন ।


5

আপনার হোম ডায়ারে ফাইল ".gitconfig" এ নিম্নলিখিতটি যুক্ত করুন

[alias]
sha = rev-parse HEAD

তাহলে আপনার মনে রাখার জন্য আরও সহজ আদেশ থাকবে:

$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600

3

গিট ব্যাশে, কেবল $ গিট লগ -1 চালান

আপনি দেখতে পাবেন, আপনার কমান্ড অনুসরণ করে এই লাইনগুলি।

commit d25c95d88a5e8b7e15ba6c925a1631a5357095db .. (info about your head)

d25c95d88a5e8b7e15ba6c925a1631a5357095db, is your SHA for last commit.

0

এখানে অন্য প্রত্যক্ষ অ্যাক্সেস বাস্তবায়ন:

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

এটি স্থানীয়ভাবে প্যাকেজ সংরক্ষণাগারগুলির জন্য দরকারী এমন HTTP- র উপরেও কাজ করে (আমি জানি: পাবলিক ওয়েব সাইটের জন্য .git ডিরেক্টরিটি অ্যাক্সেসযোগ্য করে তোলার প্রস্তাব দেওয়া হয় না):

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done


0
cat .git/HEAD

উদাহরণ আউটপুট:

ref: refs/heads/master

এটি পার্স করুন:

cat .git/HEAD | sed "s/^.\+ \(.\+\)$/\1/g"

আপনার যদি উইন্ডোজ থাকে তবে আপনি wsl.exe ব্যবহার বিবেচনা করতে পারেন:

wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g"

আউটপুট:

refs/heads/master

এই মানটি পরে গিট চেকআউট করার জন্য ব্যবহৃত হতে পারে তবে এটি তার এসএএএ'র দিকে নির্দেশ করে। এটির নামে প্রকৃত বর্তমান শাখার দিকে ইঙ্গিত করার জন্য এটি করুন:

wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g" | wsl sed "s/^refs\///g" | wsl sed "s/^heads\///g"

আউটপুট:

master

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