Git reflog

एडवांस्ड Git

Amanda Crawford-Adamo

Software and Data Engineer

Git Reflog क्या है?

  1. हमारे रिपोजिटरी में संदर्भ अपडेट्स का स्थानीय रिकॉर्ड, ALL
  2. Reflog हमारे लोकल सिस्टम में .git/logs/refs/heads/ डायरेक्टरी में सेव होता है
  3. ब्रांच टिप्स और HEAD की पोजिशन में बदलाव रिकॉर्ड करता है
  4. Git ऑपरेशंस के लिए सुरक्षा कवच जैसा काम करता है
  5. गलती से किए गए बदलाव या डिलीशन रिकवर करने में मदद करता है

git इतिहास परिवर्तनों का एक उदाहरण ग्राफ

एडवांस्ड Git

Git Reflog बनाम Git Log

Feature Git Reflog Git Log
Purpose लोकल repo में संदर्भ अपडेट्स और री-राइट्स दिखाता है सिर्फ commit इतिहास दिखाता है
Scope केवल लोकल रिपोजिटरी लोकल और रिमोट रिपोजिटरी
Content सभी ref अपडेट्स (commits, resets, merges, आदि) केवल commits
Persistence अस्थायी (आमतौर पर 90 दिन) स्थायी (रिपोजिटरी इतिहास का हिस्सा)
Use Case खोए हुए commits रिकवर करना, हाल की क्रियाएँ समझना प्रोजेक्ट इतिहास देखना, फीचर डेवलपमेंट समझना
एडवांस्ड Git

Reflog कमांड्स

  • लॉग डेटा और HEAD गतिविधि दिखाता है
    git reflog
    git reflog show
    
  • पुराने लॉग या अप्राप्य एंट्रीज़ साफ करें
    git reflog expire
    
एडवांस्ड Git

Reflog आउटपुट संरचना

reflog आउटपुट टेक्स्ट संरचना का ब्रेकडाउन

टर्मिनल में reflog आउटपुट का उदाहरण

Component Description
short-hash संक्षिप्त commit hash
ref आमतौर पर HEAD, पर ब्रांच नाम भी हो सकते हैं
index Reflog में स्थिति (0 सबसे नया)
action क्रिया का प्रकार (commit, reset, merge, आदि)
descriptions क्रिया के बारे में विवरण
1 https://hackernoon.com/time-to-rewrite-your-git-history-effectively-with-git-reflog
एडवांस्ड Git

Filtering: Since और Until

  • since = इस समय से एंट्रीज़ दिखाएँ

    git reflog --since "time-qualifer"
    
  • until = इस समय तक की एंट्रीज़ दिखाएँ

    git reflog --until "time-qualifer"
    
Usage
git reflog --since="1 week ago"
git reflog --until="yesterday"
git reflog --until="2024-01-01"
एडवांस्ड Git

डिलीटेड ब्रांच रिकवर करना

परिदृश्य

  • etl-feature नाम की ब्रांच बनाई
  • इस ब्रांच में ETL फीचर बदलाव commit किए
  • हमने गलती से यह ब्रांच डिलीट कर दी
  • सारा कोड खो गया

हम etl-feature ब्रांच कैसे बहाल करें?

समाधान

  1. git reflog से डिलीटेड ब्रांच के टिप वाले commit का hash पहचानें
  2. git checkout से HEAD को उस commit hash पर ले जाएँ
  3. जहाँ HEAD पॉइंट कर रहा है, वहाँ से नई ब्रांच बनाएँ
git reflog
git checkout <hash>
git checkout -b <branch-name>
1 https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git
एडवांस्ड Git

Git Reset

  • HEAD को दिए गए commit ऑब्जेक्ट पर ले जाता है.
  • reset टाइप के अनुसार working और staging एरिया अपडेट होते हैं.
Reset Type Command Effect on Working Directory Effect on Staging Area
Soft git reset --soft <commit> कोई बदलाव नहीं बदलाव staged रहते हैं
Mixed (Default) git reset --mixed <commit> कोई बदलाव नहीं बदलाव unstaged हो जाते हैं
Hard git reset --hard <commit> बदलाव discard हो जाते हैं बदलाव discard हो जाते हैं
एडवांस्ड Git

खोया हुआ Commit ढूँढना

परिदृश्य

  • commits और rebases के बाद tests फेल होने लगे
  • किस commit से फेल हुआ, पता नहीं
  • पासिंग स्टेट पर लौटना है

हम पिछले ETL स्क्रिप्ट बदलावों पर कैसे लौटें?

समाधान

  1. Git Reflog से डिलीटेड commit का hash ढूँढें
  2. git reset से उस commit पर लौटें जहाँ tests पास थे
git reflog
git reset --soft HEAD@{1}
एडवांस्ड Git

Best Practices

  • खोए कोड और commits रिकवर करने में शक्तिशाली
  • वर्णनात्मक commit मैसेज लिखें
  • नियमित रूप से remote पर push करें
  • force push करते समय सावधानी रखें

Reflog गलतियों पर हमारा लोकल टाइम मशीन है

एक घड़ी की छवि जो समय में पीछे जाती है

एडवांस्ड Git

अभ्यास करते हैं!

एडवांस्ड Git

Preparing Video For Download...