क्या यह निर्धारित करने का कोई तरीका है कि एक गिट शाखा कब बनाई गई थी? मेरे रेपो में एक शाखा है और मुझे यह बनाने की याद नहीं है और शायद यह सोचकर कि सृजन टाइमस्टैम्प को देखकर मेरी याददाश्त जाग जाएगी।
क्या यह निर्धारित करने का कोई तरीका है कि एक गिट शाखा कब बनाई गई थी? मेरे रेपो में एक शाखा है और मुझे यह बनाने की याद नहीं है और शायद यह सोचकर कि सृजन टाइमस्टैम्प को देखकर मेरी याददाश्त जाग जाएगी।
जवाबों:
उपयोग
git show --summary `git मर्ज-बेस फू मास्टर`
यदि आप इसे गिट के उपयोग के संदर्भ में देखेंगे, तो उपयोग करें
gitk --all --select-प्रतिबद्ध = `git मर्ज-बेस फू मास्टर '
(जहां फू उस शाखा का नाम है जिसे आप ढूंढ रहे हैं।)
जैसा कि टिप्पणियों में और जैकब के उत्तर में बताया गया है , जब तक कि आपकी शाखा विन्यास सेटिंग में निर्धारित दिनों की संख्या से कम है gc.reflogexpire
(डिफ़ॉल्ट 90 दिन है), तब आप यह पता लगाने के लिए अपने खंडन का उपयोग कर सकते हैं कि शाखा संदर्भ कब था पहली बार बनाया गया।
ध्यान दें कि git reflog
अधिकांश git log
झंडे ले सकते हैं । आगे ध्यान दें कि HEAD@{0}
स्टाइल चयनकर्ता प्रभावी रूप से समय की धारणा हैं और वास्तव में, तारीख के तार के रूप में (हैक किए गए तरीके से) संभाला जाता है। इसका मतलब है कि आप ध्वज का उपयोग कर सकते हैं --date=local
और इस तरह से आउटपुट प्राप्त कर सकते हैं :
$ गिट रिफ्लड - स्थानीय = 763008c HEAD @ {शुक्र अगस्त 20 10:09:18 2010}: पुल: फास्ट-फॉरवर्ड f6cec0a HEAD @ {Tue Aug 10 09:37:55 2010}: पुल: फास्ट-फॉरवर्ड e9e70bc HEAD @ {थू फ़रवरी 4 02:51:10 2010}: पुल: फास्ट फॉरवर्ड 836f48c HEAD @ {थू जन 21 14:08:14 2010}: चेकआउट: मास्टर से मास्टर तक बढ़ रहा है 836f48c HEAD @ {थू जन 21 14:08:10 2010}: पुल: फास्ट फॉरवर्ड 24bc734 HEAD @ {बुध जनवरी 20 12:05:45 2010}: चेकआउट: 74fca6a42863ffacaf7ba6f1936a9f228950f657 से आगे बढ़ रहा है 74fca6a HEAD @ {बुध जनवरी 20 11:55:43 2010}: चेकआउट: मास्टर से v2.6.31 पर जा रहा है 24bc734 HEAD @ {बुध जनवरी 20 11:44:42 2010}: पुल: फास्ट फॉरवर्ड 964fe08 HEAD @ {Mon Oct 26 15:29:29 2009}: चेकआउट: 4a6908a3a0aa50cac9c3a2f36b276b46c0629ad91 से आगे बढ़ रहा है 4a6908a HEAD @ {मोन ऑक्ट 26 14:52:12 2009}: चेकआउट: मास्टर से v2.6.28 पर जा रहा है
यह भी उपयोग करने के लिए कई बार उपयोगी हो सकता है --date=relative
:
$ गिट रिफ्लड --डेट = रिश्तेदार 763008c HEAD @ {4 सप्ताह पहले}: पुल: फास्ट-फ़ॉरवर्ड f6cec0a HEAD @ {6 सप्ताह पहले}: पुल: फास्ट-फ़ॉरवर्ड e9e70bc HEAD @ {8 महीने पहले}: पुल: फास्ट फॉरवर्ड 836f48c HEAD @ {8 महीने पहले}: चेकआउट: मास्टर से मास्टर की ओर बढ़ रहा है 836f48c HEAD @ {8 महीने पहले}: पुल: फास्ट फॉरवर्ड 24bc734 HEAD @ {8 महीने पहले}: चेकआउट: 74fca6a42863ffacaf7ba6f1936a9f228950f657 से मास्टर में जाना 74fca6a HEAD @ {8 महीने पहले}: चेकआउट: मास्टर से v2.6.31 पर जाना 24bc734 HEAD @ {8 महीने पहले}: पुल: फास्ट फॉरवर्ड 964fe08 HEAD @ {11 महीने पहले}: चेकआउट: 4a6908a3a0aa50cac9c3a2f36b276b46c0629ad91 से मास्टर में जाना 4a6908a HEAD @ {11 महीने पहले}: चेकआउट: मास्टर से v2.6.28 पर जा रहा है
एक अंतिम नोट: --all
झंडा (जो वास्तव में गिट-लॉग फ्लैग है जिसे गिट-रिफ्लॉग द्वारा समझा जाता है) सभी ज्ञात रेफ के लिए रिफ्लेक्स दिखाएगा refs/
(बस के बजाय HEAD
) , जो आपको शाखा घटनाओं को स्पष्ट रूप से दिखाएगा:
git reflog --date = स्थानीय --all 860e4e4 refs / heads / master @ {Sun Sep 19 23:00:30 2010}: प्रतिबद्ध: दूसरा। 17695bc refs / heads / example_branch @ {Mon Sep 20 00:31:06 2010}: शाखा: से बनाया गया
gc.reflogexpire
दिनों के भीतर हो ।
प्रो गिट G 3.1 गिट ब्रांचिंग - एक शाखा क्या है एक गिट शाखा वास्तव में क्या है की एक अच्छी व्याख्या है
Git में एक शाखा बस एक लाइटवेट मूवेबल पॉइंटर [a] कमिट है।
चूंकि एक शाखा सिर्फ एक हल्का संकेतक है, इसलिए git के पास इसके इतिहास या निर्माण तिथि की कोई स्पष्ट धारणा नहीं है। "लेकिन रुको," मैंने सुना है आप कहते हैं, "निश्चित रूप से गिट मेरी शाखा इतिहास जानता है!" अच्छी तरह की।
यदि आप निम्नलिखित में से किसी एक को चलाते हैं:
git log <branch> --not master
gitk <branch> --not master
आप देखेंगे कि "आपकी शाखा का इतिहास" कैसा दिखता है, लेकिन वास्तव में 'शाखा' से आने वाले कमिट की एक सूची है जो मास्टर से उपलब्ध नहीं हैं। यह आपको वह जानकारी प्रदान करता है जो आप चाहते हैं, लेकिन अगर और केवल अगर आपने 'शाखा' को वापस मास्टर में विलय नहीं किया है, और आपने इसे बनाने के बाद कभी भी मास्टर को 'शाखा' में विलय नहीं किया है। यदि आप विलय कर चुके हैं , तो मतभेदों का यह इतिहास ढह जाएगा।
सौभाग्य से रिफ्लग में अक्सर वह जानकारी होती है जो आप चाहते हैं, जैसा कि यहां विभिन्न अन्य उत्तरों में बताया गया है। इसे इस्तेमाल करो:
git reflog --date=local <branch>
शाखा का इतिहास दिखाने के लिए। इस सूची में अंतिम प्रविष्टि (शायद) वह बिंदु है जिस पर आपने शाखा बनाई थी।
यदि शाखा को हटा दिया गया है, तो 'शाखा' अब एक वैध पहचानकर्ता नहीं है, लेकिन आप इसके बजाय इसका उपयोग कर सकते हैं, जो आपको वह मिल सकता है जो आप चाहते हैं:
git reflog --date=local | grep <branch>
या Windows cmd शेल में:
git reflog --date=local | find "<branch>"
ध्यान दें कि रीफ़्लॉग दूरस्थ शाखाओं पर प्रभावी रूप से काम नहीं करेगा, केवल वही जो आपने स्थानीय स्तर पर काम किया है।
gc.reflogexpire
दिनों से पुरानी न हो , जैसा कि इस उत्तर और इस उत्तर में बताया गया है ।
git reflog --date=local <branch>
सबसे पहले, अगर आप शाखा gc.reflogexpire
दिनों के भीतर बनाई गई थी (डिफ़ॉल्ट 90 दिन, यानी लगभग 3 महीने), तो आप उपयोग कर सकते हैं git log -g <branch>
या git reflog show <branch>
पहली प्रविष्टि को रिफ्लॉग में ढूंढ सकते हैं , जो कि सृजन की घटना होगी, और नीचे (जैसे git log -g
) कुछ दिखता है :
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
आपको लगता है कि किसने एक शाखा बनाई, कितने ऑपरेशन पहले, और किस शाखा से (ठीक है, यह सिर्फ "हेड से बनाया गया" हो सकता है, जो बहुत मदद नहीं करता है)।
यही बात माइकसैप ने अपने जवाब में कही ।
दूसरा, यदि आपके पास इससे अधिक समय के लिए शाखा है gc.reflogexpire
और आपने चलाया है git gc
(या यह स्वचालित रूप से चलाया गया था), तो आपको उस शाखा से सामान्य पूर्वज को ढूंढना होगा, जिस शाखा से इसे बनाया गया था। कॉन्फ़िगर फ़ाइल पर एक नज़र डालें, शायद branch.<branchname>.merge
प्रविष्टि है, जो आपको बताएगी कि यह किस शाखा पर आधारित है।
यदि आप जानते हैं कि विचाराधीन शाखा को मास्टर शाखा (मास्टर शाखा से forking) से बनाया गया था, उदाहरण के लिए, आप सामान्य पूर्वज को देखने के लिए निम्न आदेश का उपयोग कर सकते हैं:
git show $(git merge-base <branch> master)
आप git show-branch <branch> master
विकल्प के रूप में भी कोशिश कर सकते हैं ।
यह वही है जो gbacon ने अपनी प्रतिक्रिया में कहा था ।
मैं अभी तक इसके लिए git कमांड के बारे में निश्चित नहीं हूं, लेकिन मुझे लगता है कि आप उन्हें रिफ्लॉग्स में पा सकते हैं।
.git/logs/refs/heads/<yourbranch>
मेरी फाइलें उनमें एक यूनिक्स टाइमस्टैम्प है।
अद्यतन: लॉग प्रिंट करते समय कमिट इतिहास के बजाय रिफ्लॉग इतिहास का उपयोग करने का विकल्प प्रतीत होता है:
git log -g
इस लॉग को आप तब भी फॉलो कर सकते हैं, जब आपने ब्रांच बनाया था। git log
हालाँकि, जब आप कार्रवाई करते हैं, तो उस तारीख का दिनांक दिखा रहा है, जब आपने रिफ्लॉग में प्रविष्टि की थी। मुझे वह अभी तक नहीं मिला है, सिवाय ऊपर के रास्ते में वास्तविक रिफ्लॉग को देखकर।
इसे इस्तेमाल करे
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
पहले की आवश्यकता होगी(refname)
| cut -c 5- | sort -r |
महीने के लिए grep के माध्यम से पाइप किया और फिर मुझे एक सूची लिन रिवर्स कालानुक्रमिक आदेश दिया, अधिक या कम।
--sort='-committerdate'
(उल्टे कालानुक्रमिक क्रम के लिए कमिटेटर से पहले '-' पर ध्यान दें)।
उपयोग:
git reflog
वर्तमान फ़ोल्डर में अपने भंडार के सभी जीवित चक्र को दिखाने के लिए। शाखा नाम जो पहले दिखाई देता है (नीचे से ऊपर तक) वह स्रोत है जिसे बनाया गया था।
855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development
855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development
535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce HEAD@{7}: checkout: moving from development to feature-jira35
855a3ce HEAD@{8}: checkout: moving from master to development
याने कि:
शाखा विकास मास्टर से (चेकआउट-बी) बनाया जाता है
शाखा सुविधा- jira35 विकास से (चेकआउट-बी) बनाया गया है
शाखा सुविधा-जीरा-सुत -46 विकास से (चेकआउट-बी) बनाई गई है
यह कुछ ऐसा है जो मुझे यह धागा मिलने से पहले आया था।
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'
यह आदेश से शाखा की बनाई गई तिथि दिखाता dev
हैmain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
यदि आप सभी शाखाओं का विवरण प्राप्त करना चाहते हैं
for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
मुझे सबसे अच्छा तरीका मिला: मैं हमेशा इस तरह से बनाई गई नवीनतम शाखा की जांच करता हूं
git for-each-ref --sort=-committerdate refs/heads/
एंड्रयू सोहन ( https://stackoverflow.com/a/14265207/1929406 ) के उत्तर के साथ संयुक्त
branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
यह मेरे लिए यह किया है: (10 साल बाद)
git log [--remotes] --no-walk --decorate
चूंकि शाखा निर्माण समय पर कोई संग्रहीत जानकारी नहीं होती है, इसलिए यह ऐसा होता है जो प्रत्येक शाखा के पहले कमिट को प्रदर्शित करता है ( --no-walk
), जिसमें कमिट की तारीख भी शामिल होती है। उपयोग--remotes
दूरस्थ शाखाओं के लिए , या स्थानीय शाखाओं के लिए इसे छोड़ दें।
चूँकि मैं किसी अन्य को बनाने से पहले एक शाखा में कम से कम एक प्रतिबद्ध करता हूं, इसने मुझे दस्तावेज़ीकरण के उद्देश्यों के लिए कुछ महीनों की शाखा रचनाओं (और देव-आरंभ) की अनुमति दी।