[{"data":1,"prerenderedAt":3040},["ShallowReactive",2],{"/en/articles/git-commands-every-junior-developer-should-master":3,"seo-stack":2879,"seo-faq-data-en":2970},{"id":4,"title":5,"body":6,"date":2862,"description":2863,"extension":2864,"head":2865,"image":2866,"meta":2867,"navigation":139,"ogImage":2865,"path":2868,"readingTime":2869,"robots":2865,"schemaOrg":2865,"seo":2870,"sitemap":2871,"stem":2872,"tags":2873,"__hash__":2878},"articles_en/en/articles/git-commands-every-junior-developer-should-master.md","Git Commands Every Junior Developer Should Master",{"type":7,"value":8,"toc":2825},"minimark",[9,14,31,34,38,43,49,109,114,217,222,230,234,239,329,339,343,347,352,440,444,568,573,634,638,642,723,728,750,754,829,833,837,900,904,959,963,1042,1047,1121,1125,1186,1191,1205,1209,1213,1219,1388,1393,1490,1494,1540,1545,1580,1585,1672,1676,1733,1738,1777,1781,1785,1966,1971,2016,2020,2082,2086,2143,2147,2154,2351,2355,2360,2410,2415,2491,2496,2551,2555,2600,2604,2607,2612,2615,2618,2622,2821],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17,18,22,23,26,27,30],"p",{},"When I started as a developer, I thought I knew Git. I could ",[19,20,21],"code",{},"git add",", ",[19,24,25],{},"git commit",", and ",[19,28,29],{},"git push",". But then came my first merge conflict, my first accidental commit to main, and my first \"oh no, I need to undo that.\" Suddenly, basic Git wasn't enough.",[15,32,33],{},"This guide covers the Git commands that transformed me from a nervous beginner to a confident contributor. No fluff—just the commands you'll actually use in real projects.",[10,35,37],{"id":36},"level-1-beyond-the-basics","Level 1: Beyond the Basics",[39,40,42],"h3",{"id":41},"the-commit-message-that-matters","The Commit Message That Matters",[15,44,45],{},[46,47,48],"strong",{},"Bad habits I had to break:",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-bash shiki shiki-themes github-light github-dark github-dark","# ❌ Don't do this\ngit commit -m \"fixed stuff\"\ngit commit -m \"updates\"\ngit commit -m \"asdf\"\n","bash","",[19,57,58,67,85,97],{"__ignoreMap":55},[59,60,63],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sCsY4","# ❌ Don't do this\n",[59,68,70,74,78,82],{"class":61,"line":69},2,[59,71,73],{"class":72},"shcOC","git",[59,75,77],{"class":76},"sfrk1"," commit",[59,79,81],{"class":80},"suiK_"," -m",[59,83,84],{"class":76}," \"fixed stuff\"\n",[59,86,88,90,92,94],{"class":61,"line":87},3,[59,89,73],{"class":72},[59,91,77],{"class":76},[59,93,81],{"class":80},[59,95,96],{"class":76}," \"updates\"\n",[59,98,100,102,104,106],{"class":61,"line":99},4,[59,101,73],{"class":72},[59,103,77],{"class":76},[59,105,81],{"class":80},[59,107,108],{"class":76}," \"asdf\"\n",[15,110,111],{},[46,112,113],{},"What I learned to do:",[50,115,117],{"className":52,"code":116,"language":54,"meta":55,"style":55},"# ✅ Good commit messages\ngit commit -m \"fix: resolve null pointer in user login\n\n- Add null check before accessing user.email property\n- Add test case for login with missing email\n- Fixes #247\"\n\n# Follow conventional commits\ngit commit -m \"feat: add dark mode toggle to navigation\"\ngit commit -m \"refactor: simplify authentication logic\"\ngit commit -m \"docs: update API documentation for v2 endpoints\"\ngit commit -m \"test: add unit tests for payment validation\"\n",[19,118,119,124,135,141,146,152,158,163,169,181,193,205],{"__ignoreMap":55},[59,120,121],{"class":61,"line":62},[59,122,123],{"class":65},"# ✅ Good commit messages\n",[59,125,126,128,130,132],{"class":61,"line":69},[59,127,73],{"class":72},[59,129,77],{"class":76},[59,131,81],{"class":80},[59,133,134],{"class":76}," \"fix: resolve null pointer in user login\n",[59,136,137],{"class":61,"line":87},[59,138,140],{"emptyLinePlaceholder":139},true,"\n",[59,142,143],{"class":61,"line":99},[59,144,145],{"class":76},"- Add null check before accessing user.email property\n",[59,147,149],{"class":61,"line":148},5,[59,150,151],{"class":76},"- Add test case for login with missing email\n",[59,153,155],{"class":61,"line":154},6,[59,156,157],{"class":76},"- Fixes #247\"\n",[59,159,161],{"class":61,"line":160},7,[59,162,140],{"emptyLinePlaceholder":139},[59,164,166],{"class":61,"line":165},8,[59,167,168],{"class":65},"# Follow conventional commits\n",[59,170,172,174,176,178],{"class":61,"line":171},9,[59,173,73],{"class":72},[59,175,77],{"class":76},[59,177,81],{"class":80},[59,179,180],{"class":76}," \"feat: add dark mode toggle to navigation\"\n",[59,182,184,186,188,190],{"class":61,"line":183},10,[59,185,73],{"class":72},[59,187,77],{"class":76},[59,189,81],{"class":80},[59,191,192],{"class":76}," \"refactor: simplify authentication logic\"\n",[59,194,196,198,200,202],{"class":61,"line":195},11,[59,197,73],{"class":72},[59,199,77],{"class":76},[59,201,81],{"class":80},[59,203,204],{"class":76}," \"docs: update API documentation for v2 endpoints\"\n",[59,206,208,210,212,214],{"class":61,"line":207},12,[59,209,73],{"class":72},[59,211,77],{"class":76},[59,213,81],{"class":80},[59,215,216],{"class":76}," \"test: add unit tests for payment validation\"\n",[15,218,219],{},[46,220,221],{},"Commit Message Template:",[50,223,228],{"className":224,"code":226,"language":227},[225],"language-text","\u003Ctype>: \u003Cshort summary>\n\n\u003Coptional body>\n- Bullet point changes\n- Be specific about what changed\n\n\u003Coptional footer>\nFixes #issue-number\n","text",[19,229,226],{"__ignoreMap":55},[39,231,233],{"id":232},"checking-status-and-differences","Checking Status and Differences",[15,235,236],{},[46,237,238],{},"Commands I use every day:",[50,240,242],{"className":52,"code":241,"language":54,"meta":55,"style":55},"# See what's changed\ngit status\n\n# See what's different (before staging)\ngit diff\n\n# See what's staged for commit\ngit diff --staged\n\n# Compare branches\ngit diff main..feature-branch\n\n# See changes in a specific file\ngit diff path/to/file.ts\n",[19,243,244,249,256,260,265,272,276,281,291,295,300,309,313,319],{"__ignoreMap":55},[59,245,246],{"class":61,"line":62},[59,247,248],{"class":65},"# See what's changed\n",[59,250,251,253],{"class":61,"line":69},[59,252,73],{"class":72},[59,254,255],{"class":76}," status\n",[59,257,258],{"class":61,"line":87},[59,259,140],{"emptyLinePlaceholder":139},[59,261,262],{"class":61,"line":99},[59,263,264],{"class":65},"# See what's different (before staging)\n",[59,266,267,269],{"class":61,"line":148},[59,268,73],{"class":72},[59,270,271],{"class":76}," diff\n",[59,273,274],{"class":61,"line":154},[59,275,140],{"emptyLinePlaceholder":139},[59,277,278],{"class":61,"line":160},[59,279,280],{"class":65},"# See what's staged for commit\n",[59,282,283,285,288],{"class":61,"line":165},[59,284,73],{"class":72},[59,286,287],{"class":76}," diff",[59,289,290],{"class":80}," --staged\n",[59,292,293],{"class":61,"line":171},[59,294,140],{"emptyLinePlaceholder":139},[59,296,297],{"class":61,"line":183},[59,298,299],{"class":65},"# Compare branches\n",[59,301,302,304,306],{"class":61,"line":195},[59,303,73],{"class":72},[59,305,287],{"class":76},[59,307,308],{"class":76}," main..feature-branch\n",[59,310,311],{"class":61,"line":207},[59,312,140],{"emptyLinePlaceholder":139},[59,314,316],{"class":61,"line":315},13,[59,317,318],{"class":65},"# See changes in a specific file\n",[59,320,322,324,326],{"class":61,"line":321},14,[59,323,73],{"class":72},[59,325,287],{"class":76},[59,327,328],{"class":76}," path/to/file.ts\n",[15,330,331,334,335,338],{},[46,332,333],{},"Pro tip:"," Use ",[19,336,337],{},"git status -s"," for a cleaner, shorter output.",[10,340,342],{"id":341},"level-2-branching-like-a-pro","Level 2: Branching Like a Pro",[39,344,346],{"id":345},"creating-and-switching-branches","Creating and Switching Branches",[15,348,349],{},[46,350,351],{},"The evolution of my workflow:",[50,353,355],{"className":52,"code":354,"language":54,"meta":55,"style":55},"# Old way (still works)\ngit branch feature-login\ngit checkout feature-login\n\n# Better way\ngit checkout -b feature-login\n\n# Modern way (Git 2.23+)\ngit switch -c feature-login\n\n# Switch to existing branch\ngit switch main\n",[19,356,357,362,372,381,385,390,401,405,410,422,426,431],{"__ignoreMap":55},[59,358,359],{"class":61,"line":62},[59,360,361],{"class":65},"# Old way (still works)\n",[59,363,364,366,369],{"class":61,"line":69},[59,365,73],{"class":72},[59,367,368],{"class":76}," branch",[59,370,371],{"class":76}," feature-login\n",[59,373,374,376,379],{"class":61,"line":87},[59,375,73],{"class":72},[59,377,378],{"class":76}," checkout",[59,380,371],{"class":76},[59,382,383],{"class":61,"line":99},[59,384,140],{"emptyLinePlaceholder":139},[59,386,387],{"class":61,"line":148},[59,388,389],{"class":65},"# Better way\n",[59,391,392,394,396,399],{"class":61,"line":154},[59,393,73],{"class":72},[59,395,378],{"class":76},[59,397,398],{"class":80}," -b",[59,400,371],{"class":76},[59,402,403],{"class":61,"line":160},[59,404,140],{"emptyLinePlaceholder":139},[59,406,407],{"class":61,"line":165},[59,408,409],{"class":65},"# Modern way (Git 2.23+)\n",[59,411,412,414,417,420],{"class":61,"line":171},[59,413,73],{"class":72},[59,415,416],{"class":76}," switch",[59,418,419],{"class":80}," -c",[59,421,371],{"class":76},[59,423,424],{"class":61,"line":183},[59,425,140],{"emptyLinePlaceholder":139},[59,427,428],{"class":61,"line":195},[59,429,430],{"class":65},"# Switch to existing branch\n",[59,432,433,435,437],{"class":61,"line":207},[59,434,73],{"class":72},[59,436,416],{"class":76},[59,438,439],{"class":76}," main\n",[39,441,443],{"id":442},"branch-management","Branch Management",[50,445,447],{"className":52,"code":446,"language":54,"meta":55,"style":55},"# List all branches\ngit branch -a\n\n# List remote branches only\ngit branch -r\n\n# Delete a local branch\ngit branch -d feature-login\n\n# Force delete (if not merged)\ngit branch -D feature-login\n\n# Delete remote branch\ngit push origin --delete feature-login\n\n# Rename current branch\ngit branch -m new-branch-name\n",[19,448,449,454,463,467,472,481,485,490,501,505,510,521,525,530,545,550,556],{"__ignoreMap":55},[59,450,451],{"class":61,"line":62},[59,452,453],{"class":65},"# List all branches\n",[59,455,456,458,460],{"class":61,"line":69},[59,457,73],{"class":72},[59,459,368],{"class":76},[59,461,462],{"class":80}," -a\n",[59,464,465],{"class":61,"line":87},[59,466,140],{"emptyLinePlaceholder":139},[59,468,469],{"class":61,"line":99},[59,470,471],{"class":65},"# List remote branches only\n",[59,473,474,476,478],{"class":61,"line":148},[59,475,73],{"class":72},[59,477,368],{"class":76},[59,479,480],{"class":80}," -r\n",[59,482,483],{"class":61,"line":154},[59,484,140],{"emptyLinePlaceholder":139},[59,486,487],{"class":61,"line":160},[59,488,489],{"class":65},"# Delete a local branch\n",[59,491,492,494,496,499],{"class":61,"line":165},[59,493,73],{"class":72},[59,495,368],{"class":76},[59,497,498],{"class":80}," -d",[59,500,371],{"class":76},[59,502,503],{"class":61,"line":171},[59,504,140],{"emptyLinePlaceholder":139},[59,506,507],{"class":61,"line":183},[59,508,509],{"class":65},"# Force delete (if not merged)\n",[59,511,512,514,516,519],{"class":61,"line":195},[59,513,73],{"class":72},[59,515,368],{"class":76},[59,517,518],{"class":80}," -D",[59,520,371],{"class":76},[59,522,523],{"class":61,"line":207},[59,524,140],{"emptyLinePlaceholder":139},[59,526,527],{"class":61,"line":315},[59,528,529],{"class":65},"# Delete remote branch\n",[59,531,532,534,537,540,543],{"class":61,"line":321},[59,533,73],{"class":72},[59,535,536],{"class":76}," push",[59,538,539],{"class":76}," origin",[59,541,542],{"class":80}," --delete",[59,544,371],{"class":76},[59,546,548],{"class":61,"line":547},15,[59,549,140],{"emptyLinePlaceholder":139},[59,551,553],{"class":61,"line":552},16,[59,554,555],{"class":65},"# Rename current branch\n",[59,557,559,561,563,565],{"class":61,"line":558},17,[59,560,73],{"class":72},[59,562,368],{"class":76},[59,564,81],{"class":80},[59,566,567],{"class":76}," new-branch-name\n",[15,569,570],{},[46,571,572],{},"My Branching Strategy:",[50,574,576],{"className":52,"code":575,"language":54,"meta":55,"style":55},"# Feature development\ngit switch -c feature/user-authentication\n\n# Bug fixes\ngit switch -c fix/login-validation-error\n\n# Hotfix for production\ngit switch -c hotfix/security-patch\n",[19,577,578,583,594,598,603,614,618,623],{"__ignoreMap":55},[59,579,580],{"class":61,"line":62},[59,581,582],{"class":65},"# Feature development\n",[59,584,585,587,589,591],{"class":61,"line":69},[59,586,73],{"class":72},[59,588,416],{"class":76},[59,590,419],{"class":80},[59,592,593],{"class":76}," feature/user-authentication\n",[59,595,596],{"class":61,"line":87},[59,597,140],{"emptyLinePlaceholder":139},[59,599,600],{"class":61,"line":99},[59,601,602],{"class":65},"# Bug fixes\n",[59,604,605,607,609,611],{"class":61,"line":148},[59,606,73],{"class":72},[59,608,416],{"class":76},[59,610,419],{"class":80},[59,612,613],{"class":76}," fix/login-validation-error\n",[59,615,616],{"class":61,"line":154},[59,617,140],{"emptyLinePlaceholder":139},[59,619,620],{"class":61,"line":160},[59,621,622],{"class":65},"# Hotfix for production\n",[59,624,625,627,629,631],{"class":61,"line":165},[59,626,73],{"class":72},[59,628,416],{"class":76},[59,630,419],{"class":80},[59,632,633],{"class":76}," hotfix/security-patch\n",[10,635,637],{"id":636},"level-3-syncing-with-remote","Level 3: Syncing with Remote",[39,639,641],{"id":640},"fetch-vs-pull-the-difference-that-matters","Fetch vs Pull (The Difference That Matters)",[50,643,645],{"className":52,"code":644,"language":54,"meta":55,"style":55},"# Fetch: Download changes but don't merge\ngit fetch origin\n\n# See what's new\ngit log HEAD..origin/main\n\n# Pull: Fetch + Merge\ngit pull origin main\n\n# Pull with rebase (cleaner history)\ngit pull --rebase origin main\n",[19,646,647,652,662,666,671,681,685,690,701,705,710],{"__ignoreMap":55},[59,648,649],{"class":61,"line":62},[59,650,651],{"class":65},"# Fetch: Download changes but don't merge\n",[59,653,654,656,659],{"class":61,"line":69},[59,655,73],{"class":72},[59,657,658],{"class":76}," fetch",[59,660,661],{"class":76}," origin\n",[59,663,664],{"class":61,"line":87},[59,665,140],{"emptyLinePlaceholder":139},[59,667,668],{"class":61,"line":99},[59,669,670],{"class":65},"# See what's new\n",[59,672,673,675,678],{"class":61,"line":148},[59,674,73],{"class":72},[59,676,677],{"class":76}," log",[59,679,680],{"class":76}," HEAD..origin/main\n",[59,682,683],{"class":61,"line":154},[59,684,140],{"emptyLinePlaceholder":139},[59,686,687],{"class":61,"line":160},[59,688,689],{"class":65},"# Pull: Fetch + Merge\n",[59,691,692,694,697,699],{"class":61,"line":165},[59,693,73],{"class":72},[59,695,696],{"class":76}," pull",[59,698,539],{"class":76},[59,700,439],{"class":76},[59,702,703],{"class":61,"line":171},[59,704,140],{"emptyLinePlaceholder":139},[59,706,707],{"class":61,"line":183},[59,708,709],{"class":65},"# Pull with rebase (cleaner history)\n",[59,711,712,714,716,719,721],{"class":61,"line":195},[59,713,73],{"class":72},[59,715,696],{"class":76},[59,717,718],{"class":80}," --rebase",[59,720,539],{"class":76},[59,722,439],{"class":76},[15,724,725],{},[46,726,727],{},"When I use each:",[729,730,731,738,744],"ul",{},[732,733,734,737],"li",{},[19,735,736],{},"git fetch",": When I want to see what's changed before merging",[732,739,740,743],{},[19,741,742],{},"git pull",": When I'm ready to merge remote changes",[732,745,746,749],{},[19,747,748],{},"git pull --rebase",": When I want to keep my commits on top",[39,751,753],{"id":752},"pushing-with-confidence","Pushing with Confidence",[50,755,757],{"className":52,"code":756,"language":54,"meta":55,"style":55},"# Push current branch\ngit push\n\n# Set upstream and push\ngit push -u origin feature-login\n\n# Force push (use with caution!)\ngit push --force-with-lease\n\n# ⚠️ Never use on shared branches!\ngit push --force\n",[19,758,759,764,771,775,780,793,797,802,811,815,820],{"__ignoreMap":55},[59,760,761],{"class":61,"line":62},[59,762,763],{"class":65},"# Push current branch\n",[59,765,766,768],{"class":61,"line":69},[59,767,73],{"class":72},[59,769,770],{"class":76}," push\n",[59,772,773],{"class":61,"line":87},[59,774,140],{"emptyLinePlaceholder":139},[59,776,777],{"class":61,"line":99},[59,778,779],{"class":65},"# Set upstream and push\n",[59,781,782,784,786,789,791],{"class":61,"line":148},[59,783,73],{"class":72},[59,785,536],{"class":76},[59,787,788],{"class":80}," -u",[59,790,539],{"class":76},[59,792,371],{"class":76},[59,794,795],{"class":61,"line":154},[59,796,140],{"emptyLinePlaceholder":139},[59,798,799],{"class":61,"line":160},[59,800,801],{"class":65},"# Force push (use with caution!)\n",[59,803,804,806,808],{"class":61,"line":165},[59,805,73],{"class":72},[59,807,536],{"class":76},[59,809,810],{"class":80}," --force-with-lease\n",[59,812,813],{"class":61,"line":171},[59,814,140],{"emptyLinePlaceholder":139},[59,816,817],{"class":61,"line":183},[59,818,819],{"class":65},"# ⚠️ Never use on shared branches!\n",[59,821,822,824,826],{"class":61,"line":195},[59,823,73],{"class":72},[59,825,536],{"class":76},[59,827,828],{"class":80}," --force\n",[10,830,832],{"id":831},"level-4-undoing-mistakes-lifesavers","Level 4: Undoing Mistakes (Lifesavers)",[39,834,836],{"id":835},"unstaging-files","Unstaging Files",[50,838,840],{"className":52,"code":839,"language":54,"meta":55,"style":55},"# Unstage a specific file\ngit restore --staged file.ts\n\n# Unstage all files\ngit restore --staged .\n\n# Old way (still works)\ngit reset HEAD file.ts\n",[19,841,842,847,860,864,869,880,884,888],{"__ignoreMap":55},[59,843,844],{"class":61,"line":62},[59,845,846],{"class":65},"# Unstage a specific file\n",[59,848,849,851,854,857],{"class":61,"line":69},[59,850,73],{"class":72},[59,852,853],{"class":76}," restore",[59,855,856],{"class":80}," --staged",[59,858,859],{"class":76}," file.ts\n",[59,861,862],{"class":61,"line":87},[59,863,140],{"emptyLinePlaceholder":139},[59,865,866],{"class":61,"line":99},[59,867,868],{"class":65},"# Unstage all files\n",[59,870,871,873,875,877],{"class":61,"line":148},[59,872,73],{"class":72},[59,874,853],{"class":76},[59,876,856],{"class":80},[59,878,879],{"class":76}," .\n",[59,881,882],{"class":61,"line":154},[59,883,140],{"emptyLinePlaceholder":139},[59,885,886],{"class":61,"line":160},[59,887,361],{"class":65},[59,889,890,892,895,898],{"class":61,"line":165},[59,891,73],{"class":72},[59,893,894],{"class":76}," reset",[59,896,897],{"class":76}," HEAD",[59,899,859],{"class":76},[39,901,903],{"id":902},"discarding-changes","Discarding Changes",[50,905,907],{"className":52,"code":906,"language":54,"meta":55,"style":55},"# Discard changes in a specific file\ngit restore file.ts\n\n# Discard all changes (be careful!)\ngit restore .\n\n# Old way\ngit checkout -- file.ts\n",[19,908,909,914,922,926,931,939,943,948],{"__ignoreMap":55},[59,910,911],{"class":61,"line":62},[59,912,913],{"class":65},"# Discard changes in a specific file\n",[59,915,916,918,920],{"class":61,"line":69},[59,917,73],{"class":72},[59,919,853],{"class":76},[59,921,859],{"class":76},[59,923,924],{"class":61,"line":87},[59,925,140],{"emptyLinePlaceholder":139},[59,927,928],{"class":61,"line":99},[59,929,930],{"class":65},"# Discard all changes (be careful!)\n",[59,932,933,935,937],{"class":61,"line":148},[59,934,73],{"class":72},[59,936,853],{"class":76},[59,938,879],{"class":76},[59,940,941],{"class":61,"line":154},[59,942,140],{"emptyLinePlaceholder":139},[59,944,945],{"class":61,"line":160},[59,946,947],{"class":65},"# Old way\n",[59,949,950,952,954,957],{"class":61,"line":165},[59,951,73],{"class":72},[59,953,378],{"class":76},[59,955,956],{"class":80}," --",[59,958,859],{"class":76},[39,960,962],{"id":961},"undoing-commits","Undoing Commits",[50,964,966],{"className":52,"code":965,"language":54,"meta":55,"style":55},"# Undo last commit, keep changes staged\ngit reset --soft HEAD~1\n\n# Undo last commit, keep changes unstaged\ngit reset HEAD~1\n\n# Undo last commit, discard all changes ⚠️\ngit reset --hard HEAD~1\n\n# Undo multiple commits\ngit reset --soft HEAD~3\n",[19,967,968,973,985,989,994,1002,1006,1011,1022,1026,1031],{"__ignoreMap":55},[59,969,970],{"class":61,"line":62},[59,971,972],{"class":65},"# Undo last commit, keep changes staged\n",[59,974,975,977,979,982],{"class":61,"line":69},[59,976,73],{"class":72},[59,978,894],{"class":76},[59,980,981],{"class":80}," --soft",[59,983,984],{"class":76}," HEAD~1\n",[59,986,987],{"class":61,"line":87},[59,988,140],{"emptyLinePlaceholder":139},[59,990,991],{"class":61,"line":99},[59,992,993],{"class":65},"# Undo last commit, keep changes unstaged\n",[59,995,996,998,1000],{"class":61,"line":148},[59,997,73],{"class":72},[59,999,894],{"class":76},[59,1001,984],{"class":76},[59,1003,1004],{"class":61,"line":154},[59,1005,140],{"emptyLinePlaceholder":139},[59,1007,1008],{"class":61,"line":160},[59,1009,1010],{"class":65},"# Undo last commit, discard all changes ⚠️\n",[59,1012,1013,1015,1017,1020],{"class":61,"line":165},[59,1014,73],{"class":72},[59,1016,894],{"class":76},[59,1018,1019],{"class":80}," --hard",[59,1021,984],{"class":76},[59,1023,1024],{"class":61,"line":171},[59,1025,140],{"emptyLinePlaceholder":139},[59,1027,1028],{"class":61,"line":183},[59,1029,1030],{"class":65},"# Undo multiple commits\n",[59,1032,1033,1035,1037,1039],{"class":61,"line":195},[59,1034,73],{"class":72},[59,1036,894],{"class":76},[59,1038,981],{"class":80},[59,1040,1041],{"class":76}," HEAD~3\n",[15,1043,1044],{},[46,1045,1046],{},"Real scenario I faced:",[50,1048,1050],{"className":52,"code":1049,"language":54,"meta":55,"style":55},"# Oops, committed to main instead of a feature branch!\n\n# 1. Create the feature branch (keeps the commits)\ngit branch feature-my-work\n\n# 2. Reset main to match remote\ngit reset --hard origin/main\n\n# 3. Switch to feature branch\ngit switch feature-my-work\n\n# 4. Now your commits are safe on the feature branch!\n",[19,1051,1052,1057,1061,1066,1075,1079,1084,1095,1099,1104,1112,1116],{"__ignoreMap":55},[59,1053,1054],{"class":61,"line":62},[59,1055,1056],{"class":65},"# Oops, committed to main instead of a feature branch!\n",[59,1058,1059],{"class":61,"line":69},[59,1060,140],{"emptyLinePlaceholder":139},[59,1062,1063],{"class":61,"line":87},[59,1064,1065],{"class":65},"# 1. Create the feature branch (keeps the commits)\n",[59,1067,1068,1070,1072],{"class":61,"line":99},[59,1069,73],{"class":72},[59,1071,368],{"class":76},[59,1073,1074],{"class":76}," feature-my-work\n",[59,1076,1077],{"class":61,"line":148},[59,1078,140],{"emptyLinePlaceholder":139},[59,1080,1081],{"class":61,"line":154},[59,1082,1083],{"class":65},"# 2. Reset main to match remote\n",[59,1085,1086,1088,1090,1092],{"class":61,"line":160},[59,1087,73],{"class":72},[59,1089,894],{"class":76},[59,1091,1019],{"class":80},[59,1093,1094],{"class":76}," origin/main\n",[59,1096,1097],{"class":61,"line":165},[59,1098,140],{"emptyLinePlaceholder":139},[59,1100,1101],{"class":61,"line":171},[59,1102,1103],{"class":65},"# 3. Switch to feature branch\n",[59,1105,1106,1108,1110],{"class":61,"line":183},[59,1107,73],{"class":72},[59,1109,416],{"class":76},[59,1111,1074],{"class":76},[59,1113,1114],{"class":61,"line":195},[59,1115,140],{"emptyLinePlaceholder":139},[59,1117,1118],{"class":61,"line":207},[59,1119,1120],{"class":65},"# 4. Now your commits are safe on the feature branch!\n",[39,1122,1124],{"id":1123},"the-magic-of-revert","The Magic of Revert",[50,1126,1128],{"className":52,"code":1127,"language":54,"meta":55,"style":55},"# Create a new commit that undoes changes\ngit revert abc123\n\n# Revert multiple commits\ngit revert abc123 def456\n\n# Revert without committing yet\ngit revert --no-commit abc123\n",[19,1129,1130,1135,1145,1149,1154,1166,1170,1175],{"__ignoreMap":55},[59,1131,1132],{"class":61,"line":62},[59,1133,1134],{"class":65},"# Create a new commit that undoes changes\n",[59,1136,1137,1139,1142],{"class":61,"line":69},[59,1138,73],{"class":72},[59,1140,1141],{"class":76}," revert",[59,1143,1144],{"class":76}," abc123\n",[59,1146,1147],{"class":61,"line":87},[59,1148,140],{"emptyLinePlaceholder":139},[59,1150,1151],{"class":61,"line":99},[59,1152,1153],{"class":65},"# Revert multiple commits\n",[59,1155,1156,1158,1160,1163],{"class":61,"line":148},[59,1157,73],{"class":72},[59,1159,1141],{"class":76},[59,1161,1162],{"class":76}," abc123",[59,1164,1165],{"class":76}," def456\n",[59,1167,1168],{"class":61,"line":154},[59,1169,140],{"emptyLinePlaceholder":139},[59,1171,1172],{"class":61,"line":160},[59,1173,1174],{"class":65},"# Revert without committing yet\n",[59,1176,1177,1179,1181,1184],{"class":61,"line":165},[59,1178,73],{"class":72},[59,1180,1141],{"class":76},[59,1182,1183],{"class":80}," --no-commit",[59,1185,1144],{"class":76},[15,1187,1188],{},[46,1189,1190],{},"When to use revert vs reset:",[729,1192,1193,1199],{},[732,1194,1195,1198],{},[46,1196,1197],{},"Reset:"," For local commits not pushed yet",[732,1200,1201,1204],{},[46,1202,1203],{},"Revert:"," For commits already pushed (safe for shared branches)",[10,1206,1208],{"id":1207},"level-5-advanced-workflows","Level 5: Advanced Workflows",[39,1210,1212],{"id":1211},"stashing-your-secret-weapon","Stashing: Your Secret Weapon",[15,1214,1215,1218],{},[46,1216,1217],{},"Scenario:"," You're working on a feature, but need to quickly fix a bug on main.",[50,1220,1222],{"className":52,"code":1221,"language":54,"meta":55,"style":55},"# Save current work\ngit stash\n\n# Or with a message\ngit stash save \"WIP: user authentication form\"\n\n# List stashes\ngit stash list\n\n# Apply most recent stash\ngit stash pop\n\n# Apply specific stash\ngit stash apply stash@{1}\n\n# Apply and keep in stash\ngit stash apply\n\n# Delete stash\ngit stash drop stash@{0}\n\n# Clear all stashes\ngit stash clear\n",[19,1223,1224,1229,1236,1240,1245,1258,1262,1267,1276,1280,1285,1294,1298,1303,1321,1325,1330,1339,1344,1350,1367,1372,1378],{"__ignoreMap":55},[59,1225,1226],{"class":61,"line":62},[59,1227,1228],{"class":65},"# Save current work\n",[59,1230,1231,1233],{"class":61,"line":69},[59,1232,73],{"class":72},[59,1234,1235],{"class":76}," stash\n",[59,1237,1238],{"class":61,"line":87},[59,1239,140],{"emptyLinePlaceholder":139},[59,1241,1242],{"class":61,"line":99},[59,1243,1244],{"class":65},"# Or with a message\n",[59,1246,1247,1249,1252,1255],{"class":61,"line":148},[59,1248,73],{"class":72},[59,1250,1251],{"class":76}," stash",[59,1253,1254],{"class":76}," save",[59,1256,1257],{"class":76}," \"WIP: user authentication form\"\n",[59,1259,1260],{"class":61,"line":154},[59,1261,140],{"emptyLinePlaceholder":139},[59,1263,1264],{"class":61,"line":160},[59,1265,1266],{"class":65},"# List stashes\n",[59,1268,1269,1271,1273],{"class":61,"line":165},[59,1270,73],{"class":72},[59,1272,1251],{"class":76},[59,1274,1275],{"class":76}," list\n",[59,1277,1278],{"class":61,"line":171},[59,1279,140],{"emptyLinePlaceholder":139},[59,1281,1282],{"class":61,"line":183},[59,1283,1284],{"class":65},"# Apply most recent stash\n",[59,1286,1287,1289,1291],{"class":61,"line":195},[59,1288,73],{"class":72},[59,1290,1251],{"class":76},[59,1292,1293],{"class":76}," pop\n",[59,1295,1296],{"class":61,"line":207},[59,1297,140],{"emptyLinePlaceholder":139},[59,1299,1300],{"class":61,"line":315},[59,1301,1302],{"class":65},"# Apply specific stash\n",[59,1304,1305,1307,1309,1312,1315,1318],{"class":61,"line":321},[59,1306,73],{"class":72},[59,1308,1251],{"class":76},[59,1310,1311],{"class":76}," apply",[59,1313,1314],{"class":76}," stash@{",[59,1316,1317],{"class":80},"1",[59,1319,1320],{"class":76},"}\n",[59,1322,1323],{"class":61,"line":547},[59,1324,140],{"emptyLinePlaceholder":139},[59,1326,1327],{"class":61,"line":552},[59,1328,1329],{"class":65},"# Apply and keep in stash\n",[59,1331,1332,1334,1336],{"class":61,"line":558},[59,1333,73],{"class":72},[59,1335,1251],{"class":76},[59,1337,1338],{"class":76}," apply\n",[59,1340,1342],{"class":61,"line":1341},18,[59,1343,140],{"emptyLinePlaceholder":139},[59,1345,1347],{"class":61,"line":1346},19,[59,1348,1349],{"class":65},"# Delete stash\n",[59,1351,1353,1355,1357,1360,1362,1365],{"class":61,"line":1352},20,[59,1354,73],{"class":72},[59,1356,1251],{"class":76},[59,1358,1359],{"class":76}," drop",[59,1361,1314],{"class":76},[59,1363,1364],{"class":80},"0",[59,1366,1320],{"class":76},[59,1368,1370],{"class":61,"line":1369},21,[59,1371,140],{"emptyLinePlaceholder":139},[59,1373,1375],{"class":61,"line":1374},22,[59,1376,1377],{"class":65},"# Clear all stashes\n",[59,1379,1381,1383,1385],{"class":61,"line":1380},23,[59,1382,73],{"class":72},[59,1384,1251],{"class":76},[59,1386,1387],{"class":76}," clear\n",[15,1389,1390],{},[46,1391,1392],{},"My typical workflow:",[50,1394,1396],{"className":52,"code":1395,"language":54,"meta":55,"style":55},"# Working on feature-login\ngit stash save \"half-done: login form validation\"\n\n# Switch to main and fix bug\ngit switch main\ngit pull\n# ... make fixes ...\ngit commit -m \"fix: critical security patch\"\ngit push\n\n# Back to feature\ngit switch feature-login\ngit stash pop\n# Continue working\n",[19,1397,1398,1403,1414,1418,1423,1431,1438,1443,1454,1460,1464,1469,1477,1485],{"__ignoreMap":55},[59,1399,1400],{"class":61,"line":62},[59,1401,1402],{"class":65},"# Working on feature-login\n",[59,1404,1405,1407,1409,1411],{"class":61,"line":69},[59,1406,73],{"class":72},[59,1408,1251],{"class":76},[59,1410,1254],{"class":76},[59,1412,1413],{"class":76}," \"half-done: login form validation\"\n",[59,1415,1416],{"class":61,"line":87},[59,1417,140],{"emptyLinePlaceholder":139},[59,1419,1420],{"class":61,"line":99},[59,1421,1422],{"class":65},"# Switch to main and fix bug\n",[59,1424,1425,1427,1429],{"class":61,"line":148},[59,1426,73],{"class":72},[59,1428,416],{"class":76},[59,1430,439],{"class":76},[59,1432,1433,1435],{"class":61,"line":154},[59,1434,73],{"class":72},[59,1436,1437],{"class":76}," pull\n",[59,1439,1440],{"class":61,"line":160},[59,1441,1442],{"class":65},"# ... make fixes ...\n",[59,1444,1445,1447,1449,1451],{"class":61,"line":165},[59,1446,73],{"class":72},[59,1448,77],{"class":76},[59,1450,81],{"class":80},[59,1452,1453],{"class":76}," \"fix: critical security patch\"\n",[59,1455,1456,1458],{"class":61,"line":171},[59,1457,73],{"class":72},[59,1459,770],{"class":76},[59,1461,1462],{"class":61,"line":183},[59,1463,140],{"emptyLinePlaceholder":139},[59,1465,1466],{"class":61,"line":195},[59,1467,1468],{"class":65},"# Back to feature\n",[59,1470,1471,1473,1475],{"class":61,"line":207},[59,1472,73],{"class":72},[59,1474,416],{"class":76},[59,1476,371],{"class":76},[59,1478,1479,1481,1483],{"class":61,"line":315},[59,1480,73],{"class":72},[59,1482,1251],{"class":76},[59,1484,1293],{"class":76},[59,1486,1487],{"class":61,"line":321},[59,1488,1489],{"class":65},"# Continue working\n",[39,1491,1493],{"id":1492},"interactive-rebase-clean-up-your-history","Interactive Rebase: Clean Up Your History",[50,1495,1497],{"className":52,"code":1496,"language":54,"meta":55,"style":55},"# Rebase last 3 commits\ngit rebase -i HEAD~3\n\n# This opens an editor with:\n# pick abc123 feat: add login form\n# pick def456 fix: typo\n# pick ghi789 feat: add validation\n",[19,1498,1499,1504,1516,1520,1525,1530,1535],{"__ignoreMap":55},[59,1500,1501],{"class":61,"line":62},[59,1502,1503],{"class":65},"# Rebase last 3 commits\n",[59,1505,1506,1508,1511,1514],{"class":61,"line":69},[59,1507,73],{"class":72},[59,1509,1510],{"class":76}," rebase",[59,1512,1513],{"class":80}," -i",[59,1515,1041],{"class":76},[59,1517,1518],{"class":61,"line":87},[59,1519,140],{"emptyLinePlaceholder":139},[59,1521,1522],{"class":61,"line":99},[59,1523,1524],{"class":65},"# This opens an editor with:\n",[59,1526,1527],{"class":61,"line":148},[59,1528,1529],{"class":65},"# pick abc123 feat: add login form\n",[59,1531,1532],{"class":61,"line":154},[59,1533,1534],{"class":65},"# pick def456 fix: typo\n",[59,1536,1537],{"class":61,"line":160},[59,1538,1539],{"class":65},"# pick ghi789 feat: add validation\n",[15,1541,1542],{},[46,1543,1544],{},"Available commands in interactive rebase:",[50,1546,1548],{"className":52,"code":1547,"language":54,"meta":55,"style":55},"# pick = use commit\n# reword = change commit message\n# edit = pause to amend commit\n# squash = combine with previous commit\n# fixup = like squash, but discard commit message\n# drop = remove commit\n",[19,1549,1550,1555,1560,1565,1570,1575],{"__ignoreMap":55},[59,1551,1552],{"class":61,"line":62},[59,1553,1554],{"class":65},"# pick = use commit\n",[59,1556,1557],{"class":61,"line":69},[59,1558,1559],{"class":65},"# reword = change commit message\n",[59,1561,1562],{"class":61,"line":87},[59,1563,1564],{"class":65},"# edit = pause to amend commit\n",[59,1566,1567],{"class":61,"line":99},[59,1568,1569],{"class":65},"# squash = combine with previous commit\n",[59,1571,1572],{"class":61,"line":148},[59,1573,1574],{"class":65},"# fixup = like squash, but discard commit message\n",[59,1576,1577],{"class":61,"line":154},[59,1578,1579],{"class":65},"# drop = remove commit\n",[15,1581,1582],{},[46,1583,1584],{},"Example: Cleaning up commits before a PR",[50,1586,1588],{"className":52,"code":1587,"language":54,"meta":55,"style":55},"pick abc123 feat: add login form\nfixup def456 fix: typo in login form\nfixup ghi789 fix: another small fix\nreword jkl012 feat: add validation\n\n# Results in 2 clean commits instead of 4 messy ones\n",[19,1589,1590,1609,1630,1648,1663,1667],{"__ignoreMap":55},[59,1591,1592,1595,1597,1600,1603,1606],{"class":61,"line":62},[59,1593,1594],{"class":72},"pick",[59,1596,1162],{"class":76},[59,1598,1599],{"class":76}," feat:",[59,1601,1602],{"class":76}," add",[59,1604,1605],{"class":76}," login",[59,1607,1608],{"class":76}," form\n",[59,1610,1611,1614,1617,1620,1623,1626,1628],{"class":61,"line":69},[59,1612,1613],{"class":72},"fixup",[59,1615,1616],{"class":76}," def456",[59,1618,1619],{"class":76}," fix:",[59,1621,1622],{"class":76}," typo",[59,1624,1625],{"class":76}," in",[59,1627,1605],{"class":76},[59,1629,1608],{"class":76},[59,1631,1632,1634,1637,1639,1642,1645],{"class":61,"line":87},[59,1633,1613],{"class":72},[59,1635,1636],{"class":76}," ghi789",[59,1638,1619],{"class":76},[59,1640,1641],{"class":76}," another",[59,1643,1644],{"class":76}," small",[59,1646,1647],{"class":76}," fix\n",[59,1649,1650,1653,1656,1658,1660],{"class":61,"line":99},[59,1651,1652],{"class":72},"reword",[59,1654,1655],{"class":76}," jkl012",[59,1657,1599],{"class":76},[59,1659,1602],{"class":76},[59,1661,1662],{"class":76}," validation\n",[59,1664,1665],{"class":61,"line":148},[59,1666,140],{"emptyLinePlaceholder":139},[59,1668,1669],{"class":61,"line":154},[59,1670,1671],{"class":65},"# Results in 2 clean commits instead of 4 messy ones\n",[39,1673,1675],{"id":1674},"cherry-picking-commits","Cherry-Picking Commits",[50,1677,1679],{"className":52,"code":1678,"language":54,"meta":55,"style":55},"# Apply a specific commit from another branch\ngit cherry-pick abc123\n\n# Cherry-pick multiple commits\ngit cherry-pick abc123 def456\n\n# Cherry-pick without committing\ngit cherry-pick --no-commit abc123\n",[19,1680,1681,1686,1695,1699,1704,1714,1718,1723],{"__ignoreMap":55},[59,1682,1683],{"class":61,"line":62},[59,1684,1685],{"class":65},"# Apply a specific commit from another branch\n",[59,1687,1688,1690,1693],{"class":61,"line":69},[59,1689,73],{"class":72},[59,1691,1692],{"class":76}," cherry-pick",[59,1694,1144],{"class":76},[59,1696,1697],{"class":61,"line":87},[59,1698,140],{"emptyLinePlaceholder":139},[59,1700,1701],{"class":61,"line":99},[59,1702,1703],{"class":65},"# Cherry-pick multiple commits\n",[59,1705,1706,1708,1710,1712],{"class":61,"line":148},[59,1707,73],{"class":72},[59,1709,1692],{"class":76},[59,1711,1162],{"class":76},[59,1713,1165],{"class":76},[59,1715,1716],{"class":61,"line":154},[59,1717,140],{"emptyLinePlaceholder":139},[59,1719,1720],{"class":61,"line":160},[59,1721,1722],{"class":65},"# Cherry-pick without committing\n",[59,1724,1725,1727,1729,1731],{"class":61,"line":165},[59,1726,73],{"class":72},[59,1728,1692],{"class":76},[59,1730,1183],{"class":80},[59,1732,1144],{"class":76},[15,1734,1735],{},[46,1736,1737],{},"Use case:",[50,1739,1741],{"className":52,"code":1740,"language":54,"meta":55,"style":55},"# You made a hotfix on main that's also needed on develop\ngit switch develop\ngit cherry-pick \u003Chotfix-commit-hash>\n",[19,1742,1743,1748,1757],{"__ignoreMap":55},[59,1744,1745],{"class":61,"line":62},[59,1746,1747],{"class":65},"# You made a hotfix on main that's also needed on develop\n",[59,1749,1750,1752,1754],{"class":61,"line":69},[59,1751,73],{"class":72},[59,1753,416],{"class":76},[59,1755,1756],{"class":76}," develop\n",[59,1758,1759,1761,1763,1767,1770,1774],{"class":61,"line":87},[59,1760,73],{"class":72},[59,1762,1692],{"class":76},[59,1764,1766],{"class":1765},"so5gQ"," \u003C",[59,1768,1769],{"class":76},"hotfix-commit-has",[59,1771,1773],{"class":1772},"slsVL","h",[59,1775,1776],{"class":1765},">\n",[10,1778,1780],{"id":1779},"level-6-investigating-history","Level 6: Investigating History",[39,1782,1784],{"id":1783},"git-log-more-than-you-think","Git Log: More Than You Think",[50,1786,1788],{"className":52,"code":1787,"language":54,"meta":55,"style":55},"# Basic log\ngit log\n\n# One line per commit\ngit log --oneline\n\n# Last 5 commits\ngit log -5\n\n# Show commits with diffs\ngit log -p\n\n# Graph view (amazing for branches)\ngit log --graph --oneline --all\n\n# Commits by specific author\ngit log --author=\"Your Name\"\n\n# Commits in date range\ngit log --since=\"2 weeks ago\"\n\n# Search commit messages\ngit log --grep=\"login\"\n\n# See what changed in a file\ngit log -p path/to/file.ts\n",[19,1789,1790,1795,1802,1806,1811,1820,1824,1829,1838,1842,1847,1856,1860,1865,1880,1884,1889,1901,1905,1910,1922,1926,1931,1943,1948,1954],{"__ignoreMap":55},[59,1791,1792],{"class":61,"line":62},[59,1793,1794],{"class":65},"# Basic log\n",[59,1796,1797,1799],{"class":61,"line":69},[59,1798,73],{"class":72},[59,1800,1801],{"class":76}," log\n",[59,1803,1804],{"class":61,"line":87},[59,1805,140],{"emptyLinePlaceholder":139},[59,1807,1808],{"class":61,"line":99},[59,1809,1810],{"class":65},"# One line per commit\n",[59,1812,1813,1815,1817],{"class":61,"line":148},[59,1814,73],{"class":72},[59,1816,677],{"class":76},[59,1818,1819],{"class":80}," --oneline\n",[59,1821,1822],{"class":61,"line":154},[59,1823,140],{"emptyLinePlaceholder":139},[59,1825,1826],{"class":61,"line":160},[59,1827,1828],{"class":65},"# Last 5 commits\n",[59,1830,1831,1833,1835],{"class":61,"line":165},[59,1832,73],{"class":72},[59,1834,677],{"class":76},[59,1836,1837],{"class":80}," -5\n",[59,1839,1840],{"class":61,"line":171},[59,1841,140],{"emptyLinePlaceholder":139},[59,1843,1844],{"class":61,"line":183},[59,1845,1846],{"class":65},"# Show commits with diffs\n",[59,1848,1849,1851,1853],{"class":61,"line":195},[59,1850,73],{"class":72},[59,1852,677],{"class":76},[59,1854,1855],{"class":80}," -p\n",[59,1857,1858],{"class":61,"line":207},[59,1859,140],{"emptyLinePlaceholder":139},[59,1861,1862],{"class":61,"line":315},[59,1863,1864],{"class":65},"# Graph view (amazing for branches)\n",[59,1866,1867,1869,1871,1874,1877],{"class":61,"line":321},[59,1868,73],{"class":72},[59,1870,677],{"class":76},[59,1872,1873],{"class":80}," --graph",[59,1875,1876],{"class":80}," --oneline",[59,1878,1879],{"class":80}," --all\n",[59,1881,1882],{"class":61,"line":547},[59,1883,140],{"emptyLinePlaceholder":139},[59,1885,1886],{"class":61,"line":552},[59,1887,1888],{"class":65},"# Commits by specific author\n",[59,1890,1891,1893,1895,1898],{"class":61,"line":558},[59,1892,73],{"class":72},[59,1894,677],{"class":76},[59,1896,1897],{"class":80}," --author=",[59,1899,1900],{"class":76},"\"Your Name\"\n",[59,1902,1903],{"class":61,"line":1341},[59,1904,140],{"emptyLinePlaceholder":139},[59,1906,1907],{"class":61,"line":1346},[59,1908,1909],{"class":65},"# Commits in date range\n",[59,1911,1912,1914,1916,1919],{"class":61,"line":1352},[59,1913,73],{"class":72},[59,1915,677],{"class":76},[59,1917,1918],{"class":80}," --since=",[59,1920,1921],{"class":76},"\"2 weeks ago\"\n",[59,1923,1924],{"class":61,"line":1369},[59,1925,140],{"emptyLinePlaceholder":139},[59,1927,1928],{"class":61,"line":1374},[59,1929,1930],{"class":65},"# Search commit messages\n",[59,1932,1933,1935,1937,1940],{"class":61,"line":1380},[59,1934,73],{"class":72},[59,1936,677],{"class":76},[59,1938,1939],{"class":80}," --grep=",[59,1941,1942],{"class":76},"\"login\"\n",[59,1944,1946],{"class":61,"line":1945},24,[59,1947,140],{"emptyLinePlaceholder":139},[59,1949,1951],{"class":61,"line":1950},25,[59,1952,1953],{"class":65},"# See what changed in a file\n",[59,1955,1957,1959,1961,1964],{"class":61,"line":1956},26,[59,1958,73],{"class":72},[59,1960,677],{"class":76},[59,1962,1963],{"class":80}," -p",[59,1965,328],{"class":76},[15,1967,1968],{},[46,1969,1970],{},"My favorite alias:",[50,1972,1974],{"className":52,"code":1973,"language":54,"meta":55,"style":55},"# Add to ~/.gitconfig\n[alias]\n    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u003C%an>%Creset' --abbrev-commit\n\n# Then use: git lg\n",[19,1975,1976,1981,1986,2007,2011],{"__ignoreMap":55},[59,1977,1978],{"class":61,"line":62},[59,1979,1980],{"class":65},"# Add to ~/.gitconfig\n",[59,1982,1983],{"class":61,"line":69},[59,1984,1985],{"class":1772},"[alias]\n",[59,1987,1988,1991,1994,1996,1998,2001,2004],{"class":61,"line":87},[59,1989,1990],{"class":72},"    lg",[59,1992,1993],{"class":76}," =",[59,1995,677],{"class":76},[59,1997,1873],{"class":80},[59,1999,2000],{"class":80}," --pretty=format:",[59,2002,2003],{"class":76},"'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u003C%an>%Creset'",[59,2005,2006],{"class":80}," --abbrev-commit\n",[59,2008,2009],{"class":61,"line":99},[59,2010,140],{"emptyLinePlaceholder":139},[59,2012,2013],{"class":61,"line":148},[59,2014,2015],{"class":65},"# Then use: git lg\n",[39,2017,2019],{"id":2018},"git-blame-find-who-changed-what","Git Blame: Find Who Changed What",[50,2021,2023],{"className":52,"code":2022,"language":54,"meta":55,"style":55},"# See who modified each line\ngit blame file.ts\n\n# Blame for specific lines\ngit blame -L 10,20 file.ts\n\n# Ignore whitespace changes\ngit blame -w file.ts\n",[19,2024,2025,2030,2039,2043,2048,2062,2066,2071],{"__ignoreMap":55},[59,2026,2027],{"class":61,"line":62},[59,2028,2029],{"class":65},"# See who modified each line\n",[59,2031,2032,2034,2037],{"class":61,"line":69},[59,2033,73],{"class":72},[59,2035,2036],{"class":76}," blame",[59,2038,859],{"class":76},[59,2040,2041],{"class":61,"line":87},[59,2042,140],{"emptyLinePlaceholder":139},[59,2044,2045],{"class":61,"line":99},[59,2046,2047],{"class":65},"# Blame for specific lines\n",[59,2049,2050,2052,2054,2057,2060],{"class":61,"line":148},[59,2051,73],{"class":72},[59,2053,2036],{"class":76},[59,2055,2056],{"class":80}," -L",[59,2058,2059],{"class":76}," 10,20",[59,2061,859],{"class":76},[59,2063,2064],{"class":61,"line":154},[59,2065,140],{"emptyLinePlaceholder":139},[59,2067,2068],{"class":61,"line":160},[59,2069,2070],{"class":65},"# Ignore whitespace changes\n",[59,2072,2073,2075,2077,2080],{"class":61,"line":165},[59,2074,73],{"class":72},[59,2076,2036],{"class":76},[59,2078,2079],{"class":80}," -w",[59,2081,859],{"class":76},[39,2083,2085],{"id":2084},"git-show-inspect-commits","Git Show: Inspect Commits",[50,2087,2089],{"className":52,"code":2088,"language":54,"meta":55,"style":55},"# Show commit details\ngit show abc123\n\n# Show changes in a commit\ngit show abc123 --stat\n\n# Show specific file from a commit\ngit show abc123:path/to/file.ts\n",[19,2090,2091,2096,2105,2109,2114,2125,2129,2134],{"__ignoreMap":55},[59,2092,2093],{"class":61,"line":62},[59,2094,2095],{"class":65},"# Show commit details\n",[59,2097,2098,2100,2103],{"class":61,"line":69},[59,2099,73],{"class":72},[59,2101,2102],{"class":76}," show",[59,2104,1144],{"class":76},[59,2106,2107],{"class":61,"line":87},[59,2108,140],{"emptyLinePlaceholder":139},[59,2110,2111],{"class":61,"line":99},[59,2112,2113],{"class":65},"# Show changes in a commit\n",[59,2115,2116,2118,2120,2122],{"class":61,"line":148},[59,2117,73],{"class":72},[59,2119,2102],{"class":76},[59,2121,1162],{"class":76},[59,2123,2124],{"class":80}," --stat\n",[59,2126,2127],{"class":61,"line":154},[59,2128,140],{"emptyLinePlaceholder":139},[59,2130,2131],{"class":61,"line":160},[59,2132,2133],{"class":65},"# Show specific file from a commit\n",[59,2135,2136,2138,2140],{"class":61,"line":165},[59,2137,73],{"class":72},[59,2139,2102],{"class":76},[59,2141,2142],{"class":76}," abc123:path/to/file.ts\n",[10,2144,2146],{"id":2145},"my-essential-git-aliases","My Essential Git Aliases",[15,2148,2149,2150,2153],{},"Add these to ",[19,2151,2152],{},"~/.gitconfig",":",[50,2155,2157],{"className":52,"code":2156,"language":54,"meta":55,"style":55},"[alias]\n    # Short status\n    s = status -s\n    \n    # Add all and commit\n    ac = !git add -A && git commit\n    \n    # Commit with message\n    cm = commit -m\n    \n    # Amend last commit\n    amend = commit --amend --no-edit\n    \n    # Pretty log\n    lg = log --graph --oneline --decorate --all\n    \n    # Undo last commit\n    undo = reset HEAD~1 --mixed\n    \n    # List branches sorted by last modified\n    br = branch --sort=-committerdate\n    \n    # Show current branch\n    current = branch --show-current\n",[19,2158,2159,2163,2168,2181,2186,2191,2214,2218,2223,2235,2239,2244,2259,2263,2268,2285,2289,2294,2309,2313,2318,2330,2334,2339],{"__ignoreMap":55},[59,2160,2161],{"class":61,"line":62},[59,2162,1985],{"class":1772},[59,2164,2165],{"class":61,"line":69},[59,2166,2167],{"class":65},"    # Short status\n",[59,2169,2170,2173,2175,2178],{"class":61,"line":87},[59,2171,2172],{"class":72},"    s",[59,2174,1993],{"class":76},[59,2176,2177],{"class":76}," status",[59,2179,2180],{"class":80}," -s\n",[59,2182,2183],{"class":61,"line":99},[59,2184,2185],{"class":1772},"    \n",[59,2187,2188],{"class":61,"line":148},[59,2189,2190],{"class":65},"    # Add all and commit\n",[59,2192,2193,2196,2198,2201,2203,2206,2209,2211],{"class":61,"line":154},[59,2194,2195],{"class":72},"    ac",[59,2197,1993],{"class":76},[59,2199,2200],{"class":76}," !git",[59,2202,1602],{"class":76},[59,2204,2205],{"class":80}," -A",[59,2207,2208],{"class":1772}," && ",[59,2210,73],{"class":72},[59,2212,2213],{"class":76}," commit\n",[59,2215,2216],{"class":61,"line":160},[59,2217,2185],{"class":1772},[59,2219,2220],{"class":61,"line":165},[59,2221,2222],{"class":65},"    # Commit with message\n",[59,2224,2225,2228,2230,2232],{"class":61,"line":171},[59,2226,2227],{"class":72},"    cm",[59,2229,1993],{"class":76},[59,2231,77],{"class":76},[59,2233,2234],{"class":80}," -m\n",[59,2236,2237],{"class":61,"line":183},[59,2238,2185],{"class":1772},[59,2240,2241],{"class":61,"line":195},[59,2242,2243],{"class":65},"    # Amend last commit\n",[59,2245,2246,2249,2251,2253,2256],{"class":61,"line":207},[59,2247,2248],{"class":72},"    amend",[59,2250,1993],{"class":76},[59,2252,77],{"class":76},[59,2254,2255],{"class":80}," --amend",[59,2257,2258],{"class":80}," --no-edit\n",[59,2260,2261],{"class":61,"line":315},[59,2262,2185],{"class":1772},[59,2264,2265],{"class":61,"line":321},[59,2266,2267],{"class":65},"    # Pretty log\n",[59,2269,2270,2272,2274,2276,2278,2280,2283],{"class":61,"line":547},[59,2271,1990],{"class":72},[59,2273,1993],{"class":76},[59,2275,677],{"class":76},[59,2277,1873],{"class":80},[59,2279,1876],{"class":80},[59,2281,2282],{"class":80}," --decorate",[59,2284,1879],{"class":80},[59,2286,2287],{"class":61,"line":552},[59,2288,2185],{"class":1772},[59,2290,2291],{"class":61,"line":558},[59,2292,2293],{"class":65},"    # Undo last commit\n",[59,2295,2296,2299,2301,2303,2306],{"class":61,"line":1341},[59,2297,2298],{"class":72},"    undo",[59,2300,1993],{"class":76},[59,2302,894],{"class":76},[59,2304,2305],{"class":76}," HEAD~1",[59,2307,2308],{"class":80}," --mixed\n",[59,2310,2311],{"class":61,"line":1346},[59,2312,2185],{"class":1772},[59,2314,2315],{"class":61,"line":1352},[59,2316,2317],{"class":65},"    # List branches sorted by last modified\n",[59,2319,2320,2323,2325,2327],{"class":61,"line":1369},[59,2321,2322],{"class":72},"    br",[59,2324,1993],{"class":76},[59,2326,368],{"class":76},[59,2328,2329],{"class":80}," --sort=-committerdate\n",[59,2331,2332],{"class":61,"line":1374},[59,2333,2185],{"class":1772},[59,2335,2336],{"class":61,"line":1380},[59,2337,2338],{"class":65},"    # Show current branch\n",[59,2340,2341,2344,2346,2348],{"class":61,"line":1945},[59,2342,2343],{"class":72},"    current",[59,2345,1993],{"class":76},[59,2347,368],{"class":76},[59,2349,2350],{"class":80}," --show-current\n",[10,2352,2354],{"id":2353},"the-commands-that-saved-my-project","The Commands That Saved My Project",[15,2356,2357],{},[46,2358,2359],{},"Scenario 1: Accidentally committed sensitive data",[50,2361,2363],{"className":52,"code":2362,"language":54,"meta":55,"style":55},"# Remove file from last commit\ngit rm --cached .env\ngit commit --amend --no-edit\n\n# If already pushed (⚠️ rewrites history)\ngit push --force-with-lease\n",[19,2364,2365,2370,2383,2393,2397,2402],{"__ignoreMap":55},[59,2366,2367],{"class":61,"line":62},[59,2368,2369],{"class":65},"# Remove file from last commit\n",[59,2371,2372,2374,2377,2380],{"class":61,"line":69},[59,2373,73],{"class":72},[59,2375,2376],{"class":76}," rm",[59,2378,2379],{"class":80}," --cached",[59,2381,2382],{"class":76}," .env\n",[59,2384,2385,2387,2389,2391],{"class":61,"line":87},[59,2386,73],{"class":72},[59,2388,77],{"class":76},[59,2390,2255],{"class":80},[59,2392,2258],{"class":80},[59,2394,2395],{"class":61,"line":99},[59,2396,140],{"emptyLinePlaceholder":139},[59,2398,2399],{"class":61,"line":148},[59,2400,2401],{"class":65},"# If already pushed (⚠️ rewrites history)\n",[59,2403,2404,2406,2408],{"class":61,"line":154},[59,2405,73],{"class":72},[59,2407,536],{"class":76},[59,2409,810],{"class":80},[15,2411,2412],{},[46,2413,2414],{},"Scenario 2: Need to find when a bug was introduced",[50,2416,2418],{"className":52,"code":2417,"language":54,"meta":55,"style":55},"# Binary search through commits\ngit bisect start\ngit bisect bad                 # Current commit is bad\ngit bisect good abc123         # This commit was good\n# Git checks out middle commit, test it\ngit bisect bad                 # or git bisect good\n# Repeat until found\ngit bisect reset\n",[19,2419,2420,2425,2435,2447,2461,2466,2477,2482],{"__ignoreMap":55},[59,2421,2422],{"class":61,"line":62},[59,2423,2424],{"class":65},"# Binary search through commits\n",[59,2426,2427,2429,2432],{"class":61,"line":69},[59,2428,73],{"class":72},[59,2430,2431],{"class":76}," bisect",[59,2433,2434],{"class":76}," start\n",[59,2436,2437,2439,2441,2444],{"class":61,"line":87},[59,2438,73],{"class":72},[59,2440,2431],{"class":76},[59,2442,2443],{"class":76}," bad",[59,2445,2446],{"class":65},"                 # Current commit is bad\n",[59,2448,2449,2451,2453,2456,2458],{"class":61,"line":99},[59,2450,73],{"class":72},[59,2452,2431],{"class":76},[59,2454,2455],{"class":76}," good",[59,2457,1162],{"class":76},[59,2459,2460],{"class":65},"         # This commit was good\n",[59,2462,2463],{"class":61,"line":148},[59,2464,2465],{"class":65},"# Git checks out middle commit, test it\n",[59,2467,2468,2470,2472,2474],{"class":61,"line":154},[59,2469,73],{"class":72},[59,2471,2431],{"class":76},[59,2473,2443],{"class":76},[59,2475,2476],{"class":65},"                 # or git bisect good\n",[59,2478,2479],{"class":61,"line":160},[59,2480,2481],{"class":65},"# Repeat until found\n",[59,2483,2484,2486,2488],{"class":61,"line":165},[59,2485,73],{"class":72},[59,2487,2431],{"class":76},[59,2489,2490],{"class":76}," reset\n",[15,2492,2493],{},[46,2494,2495],{},"Scenario 3: Lost commit after hard reset",[50,2497,2499],{"className":52,"code":2498,"language":54,"meta":55,"style":55},"# View all reference changes\ngit reflog\n\n# Find your lost commit\ngit reflog show HEAD\n\n# Restore it\ngit cherry-pick abc123\n",[19,2500,2501,2506,2513,2517,2522,2534,2538,2543],{"__ignoreMap":55},[59,2502,2503],{"class":61,"line":62},[59,2504,2505],{"class":65},"# View all reference changes\n",[59,2507,2508,2510],{"class":61,"line":69},[59,2509,73],{"class":72},[59,2511,2512],{"class":76}," reflog\n",[59,2514,2515],{"class":61,"line":87},[59,2516,140],{"emptyLinePlaceholder":139},[59,2518,2519],{"class":61,"line":99},[59,2520,2521],{"class":65},"# Find your lost commit\n",[59,2523,2524,2526,2529,2531],{"class":61,"line":148},[59,2525,73],{"class":72},[59,2527,2528],{"class":76}," reflog",[59,2530,2102],{"class":76},[59,2532,2533],{"class":76}," HEAD\n",[59,2535,2536],{"class":61,"line":154},[59,2537,140],{"emptyLinePlaceholder":139},[59,2539,2540],{"class":61,"line":160},[59,2541,2542],{"class":65},"# Restore it\n",[59,2544,2545,2547,2549],{"class":61,"line":165},[59,2546,73],{"class":72},[59,2548,1692],{"class":76},[59,2550,1144],{"class":76},[10,2552,2554],{"id":2553},"best-practices-i-live-by","Best Practices I Live By",[2556,2557,2558,2564,2574,2580,2586,2592],"ol",{},[732,2559,2560,2563],{},[46,2561,2562],{},"Commit often, push daily"," - Small commits are easier to review and revert",[732,2565,2566,2569,2570,2573],{},[46,2567,2568],{},"Never force push to shared branches"," - Use ",[19,2571,2572],{},"--force-with-lease"," if you must",[732,2575,2576,2579],{},[46,2577,2578],{},"Write meaningful commit messages"," - Your future self will thank you",[732,2581,2582,2585],{},[46,2583,2584],{},"Keep main/develop protected"," - Always use feature branches",[732,2587,2588,2591],{},[46,2589,2590],{},"Pull before you push"," - Avoid conflicts",[732,2593,2594,2569,2597],{},[46,2595,2596],{},"Review before you commit",[19,2598,2599],{},"git diff --staged",[10,2601,2603],{"id":2602},"conclusion","Conclusion",[15,2605,2606],{},"Git is more than just version control—it's a time machine, a collaboration tool, and a safety net. Master these commands, and you'll spend less time fighting Git and more time building amazing things.",[15,2608,2609],{},[46,2610,2611],{},"Start with the basics, practice regularly, and gradually add more commands to your toolkit.",[15,2613,2614],{},"The difference between a junior and senior developer isn't knowing every Git command—it's knowing which command to use when, and having the confidence to use it.",[15,2616,2617],{},"Happy coding! 🚀",[39,2619,2621],{"id":2620},"quick-reference-card","Quick Reference Card",[50,2623,2625],{"className":52,"code":2624,"language":54,"meta":55,"style":55},"# Daily workflow\ngit status                     # Check status\ngit add .                      # Stage all changes\ngit commit -m \"message\"        # Commit\ngit push                       # Push to remote\n\n# Branching\ngit switch -c feature-name     # Create new branch\ngit switch main                # Switch branch\ngit branch -d feature-name     # Delete branch\n\n# Syncing\ngit pull                       # Update current branch\ngit fetch                      # Download updates\n\n# Fixing mistakes\ngit restore file.ts            # Discard changes\ngit reset HEAD~1               # Undo last commit\ngit stash                      # Save work for later\n\n# History\ngit log --oneline              # View commits\ngit diff                       # See changes\n",[19,2626,2627,2632,2641,2653,2667,2676,2680,2685,2699,2711,2724,2728,2733,2742,2751,2755,2760,2772,2783,2792,2796,2801,2812],{"__ignoreMap":55},[59,2628,2629],{"class":61,"line":62},[59,2630,2631],{"class":65},"# Daily workflow\n",[59,2633,2634,2636,2638],{"class":61,"line":69},[59,2635,73],{"class":72},[59,2637,2177],{"class":76},[59,2639,2640],{"class":65},"                     # Check status\n",[59,2642,2643,2645,2647,2650],{"class":61,"line":87},[59,2644,73],{"class":72},[59,2646,1602],{"class":76},[59,2648,2649],{"class":76}," .",[59,2651,2652],{"class":65},"                      # Stage all changes\n",[59,2654,2655,2657,2659,2661,2664],{"class":61,"line":99},[59,2656,73],{"class":72},[59,2658,77],{"class":76},[59,2660,81],{"class":80},[59,2662,2663],{"class":76}," \"message\"",[59,2665,2666],{"class":65},"        # Commit\n",[59,2668,2669,2671,2673],{"class":61,"line":148},[59,2670,73],{"class":72},[59,2672,536],{"class":76},[59,2674,2675],{"class":65},"                       # Push to remote\n",[59,2677,2678],{"class":61,"line":154},[59,2679,140],{"emptyLinePlaceholder":139},[59,2681,2682],{"class":61,"line":160},[59,2683,2684],{"class":65},"# Branching\n",[59,2686,2687,2689,2691,2693,2696],{"class":61,"line":165},[59,2688,73],{"class":72},[59,2690,416],{"class":76},[59,2692,419],{"class":80},[59,2694,2695],{"class":76}," feature-name",[59,2697,2698],{"class":65},"     # Create new branch\n",[59,2700,2701,2703,2705,2708],{"class":61,"line":171},[59,2702,73],{"class":72},[59,2704,416],{"class":76},[59,2706,2707],{"class":76}," main",[59,2709,2710],{"class":65},"                # Switch branch\n",[59,2712,2713,2715,2717,2719,2721],{"class":61,"line":183},[59,2714,73],{"class":72},[59,2716,368],{"class":76},[59,2718,498],{"class":80},[59,2720,2695],{"class":76},[59,2722,2723],{"class":65},"     # Delete branch\n",[59,2725,2726],{"class":61,"line":195},[59,2727,140],{"emptyLinePlaceholder":139},[59,2729,2730],{"class":61,"line":207},[59,2731,2732],{"class":65},"# Syncing\n",[59,2734,2735,2737,2739],{"class":61,"line":315},[59,2736,73],{"class":72},[59,2738,696],{"class":76},[59,2740,2741],{"class":65},"                       # Update current branch\n",[59,2743,2744,2746,2748],{"class":61,"line":321},[59,2745,73],{"class":72},[59,2747,658],{"class":76},[59,2749,2750],{"class":65},"                      # Download updates\n",[59,2752,2753],{"class":61,"line":547},[59,2754,140],{"emptyLinePlaceholder":139},[59,2756,2757],{"class":61,"line":552},[59,2758,2759],{"class":65},"# Fixing mistakes\n",[59,2761,2762,2764,2766,2769],{"class":61,"line":558},[59,2763,73],{"class":72},[59,2765,853],{"class":76},[59,2767,2768],{"class":76}," file.ts",[59,2770,2771],{"class":65},"            # Discard changes\n",[59,2773,2774,2776,2778,2780],{"class":61,"line":1341},[59,2775,73],{"class":72},[59,2777,894],{"class":76},[59,2779,2305],{"class":76},[59,2781,2782],{"class":65},"               # Undo last commit\n",[59,2784,2785,2787,2789],{"class":61,"line":1346},[59,2786,73],{"class":72},[59,2788,1251],{"class":76},[59,2790,2791],{"class":65},"                      # Save work for later\n",[59,2793,2794],{"class":61,"line":1352},[59,2795,140],{"emptyLinePlaceholder":139},[59,2797,2798],{"class":61,"line":1369},[59,2799,2800],{"class":65},"# History\n",[59,2802,2803,2805,2807,2809],{"class":61,"line":1374},[59,2804,73],{"class":72},[59,2806,677],{"class":76},[59,2808,1876],{"class":80},[59,2810,2811],{"class":65},"              # View commits\n",[59,2813,2814,2816,2818],{"class":61,"line":1380},[59,2815,73],{"class":72},[59,2817,287],{"class":76},[59,2819,2820],{"class":65},"                       # See changes\n",[2822,2823,2824],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}",{"title":55,"searchDepth":69,"depth":69,"links":2826},[2827,2828,2832,2836,2840,2846,2851,2856,2857,2858,2859],{"id":12,"depth":69,"text":13},{"id":36,"depth":69,"text":37,"children":2829},[2830,2831],{"id":41,"depth":87,"text":42},{"id":232,"depth":87,"text":233},{"id":341,"depth":69,"text":342,"children":2833},[2834,2835],{"id":345,"depth":87,"text":346},{"id":442,"depth":87,"text":443},{"id":636,"depth":69,"text":637,"children":2837},[2838,2839],{"id":640,"depth":87,"text":641},{"id":752,"depth":87,"text":753},{"id":831,"depth":69,"text":832,"children":2841},[2842,2843,2844,2845],{"id":835,"depth":87,"text":836},{"id":902,"depth":87,"text":903},{"id":961,"depth":87,"text":962},{"id":1123,"depth":87,"text":1124},{"id":1207,"depth":69,"text":1208,"children":2847},[2848,2849,2850],{"id":1211,"depth":87,"text":1212},{"id":1492,"depth":87,"text":1493},{"id":1674,"depth":87,"text":1675},{"id":1779,"depth":69,"text":1780,"children":2852},[2853,2854,2855],{"id":1783,"depth":87,"text":1784},{"id":2018,"depth":87,"text":2019},{"id":2084,"depth":87,"text":2085},{"id":2145,"depth":69,"text":2146},{"id":2353,"depth":69,"text":2354},{"id":2553,"depth":69,"text":2554},{"id":2602,"depth":69,"text":2603,"children":2860},[2861],{"id":2620,"depth":87,"text":2621},"23/09/2025","Moving beyond basic git add and git commit. Here are the essential Git commands and workflows that will make you a more confident and effective developer.","md",null,"/articles/simplicity-is-the-ultimate-sophistication.jpg",{},"/en/articles/git-commands-every-junior-developer-should-master","9",{"title":5,"description":2863},{"loc":2868},"en/articles/git-commands-every-junior-developer-should-master",[2874,2875,2876,2877],"Git","Version Control","Workflow","Best Practices","MdmZsLk2hsH3ChWiwVMPaGsXm4DpCpiTsxmsZKFJUuo",{"id":2880,"extension":2881,"items":2882,"meta":2947,"stem":2968,"__hash__":2969},"stack/stack.json","json",[2883,2887,2891,2895,2899,2903,2907,2911,2915,2919,2923,2927,2931,2935,2939,2943],{"name":2884,"link":2885,"icon":2886},"Nuxt","https://nuxt.com/","custom:nuxt",{"name":2888,"link":2889,"icon":2890},"Vue","https://vuejs.org/","custom:vue",{"name":2892,"link":2893,"icon":2894},"TypeScript","https://www.typescriptlang.org/","custom:typescript",{"name":2896,"link":2897,"icon":2898},"Node.js","https://nodejs.org/","custom:node-js",{"name":2900,"link":2901,"icon":2902},"React/React Native","https://react.dev/","custom:reactjs",{"name":2904,"link":2905,"icon":2906},"TailwindCSS","https://tailwindcss.com/","custom:tailwind",{"name":2908,"link":2909,"icon":2910},"Supabase","https://www.prisma.io/","custom:supabase",{"name":2912,"link":2913,"icon":2914},"Postgre","https://www.postgresql.org/","custom:pgsql",{"name":2916,"link":2917,"icon":2918},"Rust","https://www.rust-lang.org/","custom:rust",{"name":2920,"link":2921,"icon":2922},"Python","https://www.python.org/","custom:python",{"name":2924,"link":2925,"icon":2926},"Lua","https://www.lua.org/","custom:lua",{"name":2928,"link":2929,"icon":2930},"C++","https://isocpp.org/","custom:cpp",{"name":2932,"link":2933,"icon":2934},"Golang","https://go.dev/","custom:go",{"name":2936,"link":2937,"icon":2938},"Figma","https://www.figma.com/","custom:figma",{"name":2940,"link":2941,"icon":2942},"Photoshop","https://www.adobe.com/products/photoshop.html","custom:photoshop",{"name":2944,"link":2945,"icon":2946},"Illustrator","https://www.adobe.com/products/illustrator.html","custom:illustrator",{"path":2948,"body":2949,"title":2967},"/stack",{"items":2950},[2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966],{"name":2884,"link":2885,"icon":2886},{"name":2888,"link":2889,"icon":2890},{"name":2892,"link":2893,"icon":2894},{"name":2896,"link":2897,"icon":2898},{"name":2900,"link":2901,"icon":2902},{"name":2904,"link":2905,"icon":2906},{"name":2908,"link":2909,"icon":2910},{"name":2912,"link":2913,"icon":2914},{"name":2916,"link":2917,"icon":2918},{"name":2920,"link":2921,"icon":2922},{"name":2924,"link":2925,"icon":2926},{"name":2928,"link":2929,"icon":2930},{"name":2932,"link":2933,"icon":2934},{"name":2936,"link":2937,"icon":2938},{"name":2940,"link":2941,"icon":2942},{"name":2944,"link":2945,"icon":2946},"Stack","stack","aWyFpcVGYuaHymPCKadQyiY7s0WWw_rDYWJaXBNtvoc",{"id":2971,"title":2972,"extension":2881,"faqQuestions":2973,"meta":3016,"stem":3038,"subtitle":3019,"__hash__":3039},"faq_en/en/faq.json","FAQ",[2974,2986,3004],{"title":2975,"questions":2976},"Services & Skills",[2977,2980,2983],{"label":2978,"content":2979},"What services do you offer?","**Web Development**: Responsive websites, landing pages, web applications, UI implementation | **Mobile Development**: Cross-platform mobile apps (learning) | **Game Development**: Mainly writing script to FiveM (in Lua), 3D Moddeling (buildings, cars etc) | **Backend & DevOps**: API integration, database setup, deployment assistance. **I'm eager to take on projects that help me grow while delivering quality results!**",{"label":2981,"content":2982},"What technologies do you work with?","**Web**: HTML, CSS, JavaScript, TypeScript, Vue.js, Nuxt.js, React (basics), Tailwind CSS, SASS | **Mobile**: React Native (learning), Flutter (basics) | **Game Development**: C++ (basics), Lua, | **DevOps/Servers**: Git, Docker, Linux basics, Node.js, Express.js, PostgreSQL, MongoDB. **I'm always learning and expanding my skill set across different areas!**",{"label":2984,"content":2985},"Are you available for freelance work?","Yes! I'm open to freelance projects, internships, and full-time opportunities. I'm particularly interested in projects that allow me to grow my skills while delivering value.",{"title":2987,"questions":2988},"Collaboration",[2989,2992,2995,2998,3001],{"label":2990,"content":2991},"How much do you charge?","My rates are flexible and depend on the project scope and duration. For freelance work, I typically charge between €25-40 per hour. I'm also open to discussing project-based pricing for the right opportunity.",{"label":2993,"content":2994},"How does payment work for a project?","For freelance projects, I typically ask for a 40% deposit upfront to begin work, with the remaining 60% due upon completion and delivery. I accept payments via bank transfer, PayPal, or other methods we can agree upon. For larger projects, we can discuss milestone-based payments.",{"label":2996,"content":2997},"How long does a project take?","Project timelines vary depending on complexity and scope. A simple landing page might take 1-2 weeks, while a more complex web application could take 1-2 months. I always provide a realistic timeline estimate after discussing the project requirements, and I keep you updated on progress throughout.",{"label":2999,"content":3000},"How do you approach new projects?","I start by understanding the requirements, then break down the project into manageable tasks. I believe in clear communication, regular updates, and delivering clean, maintainable code. I'm not afraid to ask questions when I need clarification!",{"label":3002,"content":3003},"Do you work in teams?","Absolutely! I enjoy collaborating with other developers and designers. I'm comfortable using Git for version control, participating in code reviews, and following established coding standards.",{"title":3005,"questions":3006},"Personal",[3007,3010,3013],{"label":3008,"content":3009},"What motivates you as a developer?","I love solving problems and seeing ideas come to life through code. Every project is an opportunity to learn something new and improve my craft. The feeling of building something that people actually use is incredibly rewarding!",{"label":3011,"content":3012},"How do you stay up to date?","I follow tech blogs, participate in developer communities, work on personal projects, and take online courses. I believe continuous learning is essential in this field, and I'm always exploring new tools and best practices.",{"label":3014,"content":3015},"What are you currently learning?","I'm currently deepening my knowledge of TypeScript, exploring advanced Vue.js patterns, and learning more about performance optimization and accessibility. I'm also interested in diving deeper into backend development and DevOps.",{"path":3017,"body":3018},"/en/faq",{"title":2972,"subtitle":3019,"faqQuestions":3020},"Things I get asked a lot",[3021,3026,3033],{"title":2975,"questions":3022},[3023,3024,3025],{"label":2978,"content":2979},{"label":2981,"content":2982},{"label":2984,"content":2985},{"title":2987,"questions":3027},[3028,3029,3030,3031,3032],{"label":2990,"content":2991},{"label":2993,"content":2994},{"label":2996,"content":2997},{"label":2999,"content":3000},{"label":3002,"content":3003},{"title":3005,"questions":3034},[3035,3036,3037],{"label":3008,"content":3009},{"label":3011,"content":3012},{"label":3014,"content":3015},"en/faq","g8WlXqYfNG0mRe8GJ3xTst3K2IecqLi2uDs7IuImrEY",1785840166638]