मेरे पास एक परियोजना है जिसका लंबा इतिहास है। मैं git पर पहला कमिटमेंट दिखाना चाहता हूं।
मैं यह कैसे करु?
मेरे पास एक परियोजना है जिसका लंबा इतिहास है। मैं git पर पहला कमिटमेंट दिखाना चाहता हूं।
मैं यह कैसे करु?
जवाबों:
git rev-list --max-parents=0 HEAD
(से tiho की टिप्पणी । के रूप में क्रिस Johnsen नोटिस , --max-parents
के बाद इस उत्तर पोस्ट किया गया था पेश किया गया था।)
तकनीकी रूप से, एक से अधिक रूट कमिट हो सकते हैं। ऐसा तब होता है जब कई पहले के स्वतंत्र इतिहास एक साथ विलीन हो जाते हैं। जब कोई परियोजना एक सबट्री मर्ज के माध्यम से एकीकृत होती है तो यह आम है ।
git.git
भंडार अपने इतिहास ग्राफ में छह जड़ करता है (के लिए एक-एक लीनुस की प्रारंभिक प्रतिबद्ध, gitk , कुछ शुरू में अलग उपकरण, Git-जीयूआई , gitweb , और Git-पी 4 )। इस मामले में, हम जानते हैं कि वह e83c516
है जिसमें हम शायद रुचि रखते हैं। यह जल्द से जल्द प्रतिबद्ध और जड़ प्रतिबद्ध दोनों है।
यह सामान्य मामले में इतना सरल नहीं है।
कल्पना कीजिए कि लिबफू थोड़ी देर के लिए विकास में रहा है और एक जीआईटी भंडार ( libfoo.git
) में अपना इतिहास रखता है । स्वतंत्र रूप से, "बार" परियोजना भी विकास के तहत (में bar.git
) रही है, लेकिन लंबे समय तक काम करने के लिए नहीं (जल्द से जल्द तारीख के साथ प्रतिबद्ध libfoo.git
एक तारीख है कि कम से कम तारीख के साथ प्रतिबद्ध है bar.git
)। कुछ बिंदु पर "बार" के डेवलपर्स एक उप-मर्ज का उपयोग करके अपनी परियोजना में लिबफू को शामिल करने का निर्णय लेते हैं । इस मर्ज से पहले "प्रथम" कमिट को निर्धारित करने के लिए यह तुच्छ हो सकता है bar.git
(शायद एक रूट कमिट था)। मर्ज के बाद, हालांकि, कई रूट कमिट हैं और जल्द से जल्द रूट कमिटमेंट लिबफू के इतिहास से आता है, "बार" नहीं।
आप इस तरह से इतिहास के सभी रूट कमिट पा सकते हैं:
git rev-list --max-parents=0 HEAD
रिकॉर्ड के लिए, यदि --max-parents
उपलब्ध नहीं थे , तो यह भी काम करता है:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
यदि आपके पास उपयोगी टैग हैं, तो git name-rev
आप इतिहास का त्वरित अवलोकन कर सकते हैं:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
यह अक्सर उपयोग करें? याद रखना मुश्किल है? त्वरित पहुँच के लिए एक git उपनाम जोड़ें
git config --global alias.first "rev-list --max-parents=0 HEAD"
अब आप बस कर सकते हैं
git first
git rev-list --max-parents=0 HEAD
है कि वही करेंगे, और थोड़ा सरल है।
मैने पाया कि:
git log --reverse
शुरू से दिखाता है।
git log --reverse -5
से इसे --reverse
किसी कारण से अनदेखा करता है
आप केवल अपने लॉग को उल्टा कर सकते हैं और पहले परिणाम के लिए इसे हेड कर सकते हैं।
git log --pretty=oneline --reverse | head -1
git log --reverse
इतिहास को उलट देता है, इसलिए आपको पहले प्रतिबद्ध होने के head -1
बजाय उपयोग करना होगा tail -1
।
-n
ध्वज को अनदेखा नहीं किया है जब --reverse
दिया जाता है।
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1
आपको प्रतिबद्ध हैश (यानी 0dd89fb
) देता है, जिसे आप अन्य कमांड में फीड कर सकते हैं, जैसे कुछ करके
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD
अंतिम दिन में सभी आवागमन देखने के लिए।
git log -1
।