Advanced Branch Integration: Git Rebasing

एडवांस्ड Git

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • बदलाव इंटीग्रेट करने की विधि
  • merge से अलग
  • merge commits हटकर इतिहास साफ रहता है
  • स्पष्टता के लिए linear commit ग्राफ बनाए रखता है

Git Rebase Command:

git rebase <branch_name>
एडवांस्ड Git

Rebase उदाहरण - पहले

डेटा cleanup फीचर ब्रांच और main ब्रांच की इमेज। फीचर ब्रांच main के दूसरे commit के बाद अलग होती है। data-cleanup ब्रांच बनने के बाद main में दो और commits हैं.

एडवांस्ड Git

Rebase प्रक्रिया

  1. अपनी data-cleanup फीचर ब्रांच checkout करें.
git checkout data-cleanup
  1. main ब्रांच को data-cleanup पर rebase करें.
git rebase main
  • data-cleanup के commits, main के नवीनतम commit के बाद दोबारा बनाए जाते हैं
  • Rebased data-cleanup commits के नए hashes बनते हैं

Note: यदि कोई conflicts हों, तो उन्हें मैन्युअली resolve करना होगा.

एडवांस्ड Git

Rebase उदाहरण - बाद में

data-cleanup ब्रांच को main पर rebase किया गया दिखाने वाली इमेज। data-cleanup में अब main के सभी commits हैं और इसके commits अब main के बाद शुरू होते हैं। main ब्रांच नहीं बदली है.

एडवांस्ड Git

Interactive rebase

git rebase -i <commit_hash> 

Functionality

  • डेवलपर को कई commits में सूक्ष्म बदलाव करने देता है
  • एक editor खोलता है

Warning!

  • public branches पर rebase workflows बिगाड़ सकता है
    • main जैसी public branches पर rebase न करें
  • rebase कब उपयोग करें, इस पर टीम नियम तय करें
एडवांस्ड Git

Interactive rebase - पहले

$$

यहाँ commit history एडिट करने से पहले का data-validation ब्रांच history है.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
एडवांस्ड Git

Interactive rebase editor

खुले editor में pick और fixup कमांड्स से commit history ऐसे एडिट करते हैं.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
एडवांस्ड Git

Interactive rebase - बाद में

Before

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

After

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

निम्न commits एक में combine हो गए हैं

  • abc1234
  • def5678
  • ghi9101
एडवांस्ड Git

Merge बनाम rebase

तीन ग्राफ दिखाने वाली इमेज: एक diverged ब्रांच ग्राफ, merge के बाद का ग्राफ, और rebase के बाद का ग्राफ

Merge

  • पूरा history और ब्रांच संरचना सुरक्षित रखता है
  • समानांतर development का context बनाए रखता है

Rebase

  • commits को target ब्रांच के ऊपर दोहराता है
  • linear history बनाता है
  • कुछ संदर्भीय जानकारी खो सकती है
एडवांस्ड Git

Merge और rebase कब उपयोग करें

Merge

पूरी हुई फीचर्स इंटीग्रेट करने और development context सुरक्षित रखने के लिए

Rebase

फीचर ब्रांचेज़ को main से अपडेट रखने या merge से पहले cleanup के लिए

Remember

  • Rebase history बदलता है - सावधानी से उपयोग करें
एडवांस्ड Git

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

एडवांस्ड Git

Preparing Video For Download...