[{"data":1,"prerenderedAt":1613},["ShallowReactive",2],{"blog-git-branch":3,"blog-all-for-related":1158},{"id":4,"title":5,"author":6,"body":7,"cardAlt":5,"categories":1143,"description":1146,"draft":1147,"extension":1148,"headerImage":1149,"keywords":1150,"meta":1151,"name":1152,"navigation":161,"path":1153,"seo":1154,"series":6,"stem":1155,"updated":6,"year":1156,"__hash__":1157},"blog\u002Fblog\u002Fgit-branch.md","Git Branch 101",null,{"type":8,"value":9,"toc":1135},"minimark",[10,14,31,34,39,42,45,78,1131],[11,12,13],"p",{},"There are high chances that you're using Git or some VCS system in your day-to-day work life. Branching is one of the most common and useful component in version control systems like Git.",[11,15,16,17,21,22,25,26,30],{},"You can think of branch like a ",[18,19,20],"strong",{},"version"," of the project that is usually used to build a new feature, fix a bug or perform some code operation on top of the main project. At all times during development, your main codebase is ",[18,23,24],{},"unaware"," of any changes on a branch till the point the changes are merged. Git provides us a way to create and manage the branches in a project via a set of ",[27,28,29],"code",{},"branch"," commands. But before we learn how to use branching, let's understand why do we need it?",[32,33],"hr",{},[35,36,38],"h2",{"id":37},"need-of-branching","Need of Branching",[11,40,41],{},"You might think why would we create a new branch? Why can't we directly add features to the main project?",[11,43,44],{},"Fair enough! We could directly build on the codebase but there are a couple of issues with that. Let's explore them!",[46,47,48,56,67],"ul",{},[49,50,51,52,55],"li",{},"You don't want to affect the main codebase. Imagine there's a bug in your changes and those changes are directly live to customers of your application. Branching essentially adds a ",[18,53,54],{},"barrier for any unstable code"," to be tested and reviewed before being pushed to main codebase.",[49,57,58,59,62,63,66],{},"Usually a lot of people are working on a project at the same time. Imagine the pain of managing multiple changes during development cycle. Branching offers a way to work on a new feature ",[18,60,61],{},"without affecting"," the main codebase thus multiple features can be built in ",[18,64,65],{},"parallel",".",[49,68,69,70,73,74,77],{},"A branch is like a separate path of development. You can edit, delete or update any changes till the point it's merged. Before changes are pushed to main codebase, you can ",[18,71,72],{},"clean up"," the testing changes or code smells. This ensures your main branch of development is ",[18,75,76],{},"production ready"," at all times.",[79,80,81,83,87,94,101,108,115,118,278,280,284,287,340,347,349,353,356,399,405,422,432,435,494,496,500,507,576,587,593,604,617,644,647,697,699,703,710,784,790,793,815],"ads",{},[32,82],{},[35,84,86],{"id":85},"how-it-works","How it works?",[11,88,89,90,93],{},"In Git, a branch is stored as a ",[18,91,92],{},"reference to a commit",". Point to note here is that branch doesn't store a list of commits. As mentioned earlier think of it as a new path of development where the tip of branch points to some commit on main codebase.",[11,95,96,97,100],{},"When you initialize git on a project, a ",[18,98,99],{},"master branch"," is created by default. This is the branch that git provides us for development. As you add changes via commits, your master branch keeps on growing. Your master branch is the \"current working version\" of your project at all times.",[11,102,103,104,107],{},"A new branch is like a ",[18,105,106],{},"new working arena"," where you can add, update or remove existing code. All the commits are part of history of this new branch you created. Eventually once all your changes are done, these changes are merged into the master branch.",[11,109,110,111,114],{},"The ",[27,112,113],{},"git branch"," command provides us a way to manage development on branches. One can create, list, rename, delete and switch branches using these commands. Let's see these commands in practice.",[11,116,117],{},"Firstly we need to setup a project with git for the git branch commands to work.",[119,120,125],"pre",{"className":121,"code":122,"language":123,"meta":124,"style":124},"language-bash shiki shiki-themes github-light github-dark","# create a new directory\nmkdir learn-git-branch\ncd learn-git-branch\n\n# initialize a git repository\ngit init\n\n# create a file to work on\ntouch somefile.txt\n\n# Open your favourite editor and add some text\nLets learn git branch\n\n# Commit your changes on master\ngit add .\ngit commit -m \"Initial commit\"\n\n# Run git branch to verify that master branch is created\ngit branch\n","bash","",[27,126,127,136,147,156,163,169,178,183,189,198,203,209,224,229,235,246,260,265,271],{"__ignoreMap":124},[128,129,132],"span",{"class":130,"line":131},"line",1,[128,133,135],{"class":134},"sJ8bj","# create a new directory\n",[128,137,139,143],{"class":130,"line":138},2,[128,140,142],{"class":141},"sScJk","mkdir",[128,144,146],{"class":145},"sZZnC"," learn-git-branch\n",[128,148,150,154],{"class":130,"line":149},3,[128,151,153],{"class":152},"sj4cs","cd",[128,155,146],{"class":145},[128,157,159],{"class":130,"line":158},4,[128,160,162],{"emptyLinePlaceholder":161},true,"\n",[128,164,166],{"class":130,"line":165},5,[128,167,168],{"class":134},"# initialize a git repository\n",[128,170,172,175],{"class":130,"line":171},6,[128,173,174],{"class":141},"git",[128,176,177],{"class":145}," init\n",[128,179,181],{"class":130,"line":180},7,[128,182,162],{"emptyLinePlaceholder":161},[128,184,186],{"class":130,"line":185},8,[128,187,188],{"class":134},"# create a file to work on\n",[128,190,192,195],{"class":130,"line":191},9,[128,193,194],{"class":141},"touch",[128,196,197],{"class":145}," somefile.txt\n",[128,199,201],{"class":130,"line":200},10,[128,202,162],{"emptyLinePlaceholder":161},[128,204,206],{"class":130,"line":205},11,[128,207,208],{"class":134},"# Open your favourite editor and add some text\n",[128,210,212,215,218,221],{"class":130,"line":211},12,[128,213,214],{"class":141},"Lets",[128,216,217],{"class":145}," learn",[128,219,220],{"class":145}," git",[128,222,223],{"class":145}," branch\n",[128,225,227],{"class":130,"line":226},13,[128,228,162],{"emptyLinePlaceholder":161},[128,230,232],{"class":130,"line":231},14,[128,233,234],{"class":134},"# Commit your changes on master\n",[128,236,238,240,243],{"class":130,"line":237},15,[128,239,174],{"class":141},[128,241,242],{"class":145}," add",[128,244,245],{"class":145}," .\n",[128,247,249,251,254,257],{"class":130,"line":248},16,[128,250,174],{"class":141},[128,252,253],{"class":145}," commit",[128,255,256],{"class":152}," -m",[128,258,259],{"class":145}," \"Initial commit\"\n",[128,261,263],{"class":130,"line":262},17,[128,264,162],{"emptyLinePlaceholder":161},[128,266,268],{"class":130,"line":267},18,[128,269,270],{"class":134},"# Run git branch to verify that master branch is created\n",[128,272,274,276],{"class":130,"line":273},19,[128,275,174],{"class":141},[128,277,223],{"class":145},[32,279],{},[35,281,283],{"id":282},"listing-branches","Listing branches",[11,285,286],{},"To list out the existing branches, we can directly use the git branch command without any flags. There are also few flags available that we'll cover here.",[119,288,290],{"className":121,"code":289,"language":123,"meta":124,"style":124},"# Lists exisiting branches\ngit branch\n\n# Same as before\ngit branch --list\n\n# List both remote-tracking branches and local branches\ngit branch --all\n",[27,291,292,297,303,307,312,322,326,331],{"__ignoreMap":124},[128,293,294],{"class":130,"line":131},[128,295,296],{"class":134},"# Lists exisiting branches\n",[128,298,299,301],{"class":130,"line":138},[128,300,174],{"class":141},[128,302,223],{"class":145},[128,304,305],{"class":130,"line":149},[128,306,162],{"emptyLinePlaceholder":161},[128,308,309],{"class":130,"line":158},[128,310,311],{"class":134},"# Same as before\n",[128,313,314,316,319],{"class":130,"line":165},[128,315,174],{"class":141},[128,317,318],{"class":145}," branch",[128,320,321],{"class":152}," --list\n",[128,323,324],{"class":130,"line":171},[128,325,162],{"emptyLinePlaceholder":161},[128,327,328],{"class":130,"line":180},[128,329,330],{"class":134},"# List both remote-tracking branches and local branches\n",[128,332,333,335,337],{"class":130,"line":185},[128,334,174],{"class":141},[128,336,318],{"class":145},[128,338,339],{"class":152}," --all\n",[11,341,342,343,346],{},"The current branch will be green in color and highlighted with an ",[27,344,345],{},"*"," (asterisk). We will be using the list commands in other sections to verify branching operations.",[32,348],{},[35,350,352],{"id":351},"creating-a-branch","Creating a branch",[11,354,355],{},"We can create a new branch using the following command.",[119,357,359],{"className":121,"code":358,"language":123,"meta":124,"style":124},"git branch \u003Cbranch-name>\n\n# create branch in our project\ngit branch new-feature\n",[27,360,361,381,385,390],{"__ignoreMap":124},[128,362,363,365,367,371,374,378],{"class":130,"line":131},[128,364,174],{"class":141},[128,366,318],{"class":145},[128,368,370],{"class":369},"szBVR"," \u003C",[128,372,373],{"class":145},"branch-nam",[128,375,377],{"class":376},"sVt8B","e",[128,379,380],{"class":369},">\n",[128,382,383],{"class":130,"line":138},[128,384,162],{"emptyLinePlaceholder":161},[128,386,387],{"class":130,"line":149},[128,388,389],{"class":134},"# create branch in our project\n",[128,391,392,394,396],{"class":130,"line":158},[128,393,174],{"class":141},[128,395,318],{"class":145},[128,397,398],{"class":145}," new-feature\n",[11,400,401,402,404],{},"Now if you run the ",[27,403,113],{}," command, you should see two branches.",[119,406,408],{"className":121,"code":407,"language":123,"meta":124,"style":124},"* master\n  new-feature\n",[27,409,410,417],{"__ignoreMap":124},[128,411,412,414],{"class":130,"line":131},[128,413,345],{"class":369},[128,415,416],{"class":376}," master\n",[128,418,419],{"class":130,"line":138},[128,420,421],{"class":141},"  new-feature\n",[11,423,424,425,427,428,431],{},"Awesome, we create a new branch successfully. But you can see the ",[27,426,345],{}," pointing on master branch. This means we created a new branch but our current active branch is still ",[27,429,430],{},"master",". Git branch just creates a branch. To make changes we would need to checkout to that branch.",[11,433,434],{},"To create a remote branch, we just need to push our local branch. First define a remote name with URL and then push branch to the remote.",[119,436,438],{"className":121,"code":437,"language":123,"meta":124,"style":124},"git remote add \u003Cremote-name> \u003Cgit-url>\ngit push \u003Cremote-branch> \u003Cbranch-name>\n",[27,439,440,469],{"__ignoreMap":124},[128,441,442,444,447,449,451,454,456,459,461,464,467],{"class":130,"line":131},[128,443,174],{"class":141},[128,445,446],{"class":145}," remote",[128,448,242],{"class":145},[128,450,370],{"class":369},[128,452,453],{"class":145},"remote-nam",[128,455,377],{"class":376},[128,457,458],{"class":369},">",[128,460,370],{"class":369},[128,462,463],{"class":145},"git-ur",[128,465,466],{"class":376},"l",[128,468,380],{"class":369},[128,470,471,473,476,478,481,484,486,488,490,492],{"class":130,"line":138},[128,472,174],{"class":141},[128,474,475],{"class":145}," push",[128,477,370],{"class":369},[128,479,480],{"class":145},"remote-branc",[128,482,483],{"class":376},"h",[128,485,458],{"class":369},[128,487,370],{"class":369},[128,489,373],{"class":145},[128,491,377],{"class":376},[128,493,380],{"class":369},[32,495],{},[35,497,499],{"id":498},"deleting-a-branch","Deleting a branch",[11,501,502,503,506],{},"Deleting a branch is quite straightforward. We can use the ",[27,504,505],{},"-d"," flag for that.",[119,508,510],{"className":121,"code":509,"language":123,"meta":124,"style":124},"git branch -d \u003Cbranch-name>\n\n# Delete the branch we created\ngit branch -d new-feature\n\n# Output\nDeleted branch new-feature (was 6d0f739).\n",[27,511,512,529,533,538,548,552,557],{"__ignoreMap":124},[128,513,514,516,518,521,523,525,527],{"class":130,"line":131},[128,515,174],{"class":141},[128,517,318],{"class":145},[128,519,520],{"class":152}," -d",[128,522,370],{"class":369},[128,524,373],{"class":145},[128,526,377],{"class":376},[128,528,380],{"class":369},[128,530,531],{"class":130,"line":138},[128,532,162],{"emptyLinePlaceholder":161},[128,534,535],{"class":130,"line":149},[128,536,537],{"class":134},"# Delete the branch we created\n",[128,539,540,542,544,546],{"class":130,"line":158},[128,541,174],{"class":141},[128,543,318],{"class":145},[128,545,520],{"class":152},[128,547,398],{"class":145},[128,549,550],{"class":130,"line":165},[128,551,162],{"emptyLinePlaceholder":161},[128,553,554],{"class":130,"line":171},[128,555,556],{"class":134},"# Output\n",[128,558,559,562,564,567,570,573],{"class":130,"line":180},[128,560,561],{"class":141},"Deleted",[128,563,318],{"class":145},[128,565,566],{"class":145}," new-feature",[128,568,569],{"class":376}," (was ",[128,571,572],{"class":145},"6d0f739",[128,574,575],{"class":376},").\n",[11,577,578,579,582,583,586],{},"The commit id in output would be different for you. You can run ",[27,580,581],{},"git log"," to see the commit id for the commit we created earlier. The tip of the ",[27,584,585],{},"new-feature"," branch was this commit itself.",[11,588,589,590,592],{},"Let's run ",[27,591,113],{}," again to verify if our branch was deleted. Now you should only see the master branch.",[119,594,596],{"className":121,"code":595,"language":123,"meta":124,"style":124},"* master\n",[27,597,598],{"__ignoreMap":124},[128,599,600,602],{"class":130,"line":131},[128,601,345],{"class":369},[128,603,416],{"class":376},[11,605,606,609,610,612,613,616],{},[18,607,608],{},"Note:"," ",[27,611,505],{}," flag is a safe operation ie. it only deletes a branch when there are no changes or the branch is fully merged. In other cases this would throw an error. One can still do a force delete on a branch using ",[27,614,615],{},"-D"," option.",[119,618,620],{"className":121,"code":619,"language":123,"meta":124,"style":124},"# Forceful branch delete\ngit branch -D \u003Cbranch-name>\n",[27,621,622,627],{"__ignoreMap":124},[128,623,624],{"class":130,"line":131},[128,625,626],{"class":134},"# Forceful branch delete\n",[128,628,629,631,633,636,638,640,642],{"class":130,"line":138},[128,630,174],{"class":141},[128,632,318],{"class":145},[128,634,635],{"class":152}," -D",[128,637,370],{"class":369},[128,639,373],{"class":145},[128,641,377],{"class":376},[128,643,380],{"class":369},[11,645,646],{},"To delete a remote branch, the idea is similar to the creating a remote branch. We push changes to remote.",[119,648,650],{"className":121,"code":649,"language":123,"meta":124,"style":124},"git push -d \u003Cremote_name> \u003Cbranchname>\n$ git branch -d \u003Cbranchname>\n",[27,651,652,678],{"__ignoreMap":124},[128,653,654,656,658,660,662,665,667,669,671,674,676],{"class":130,"line":131},[128,655,174],{"class":141},[128,657,475],{"class":145},[128,659,520],{"class":152},[128,661,370],{"class":369},[128,663,664],{"class":145},"remote_nam",[128,666,377],{"class":376},[128,668,458],{"class":369},[128,670,370],{"class":369},[128,672,673],{"class":145},"branchnam",[128,675,377],{"class":376},[128,677,380],{"class":369},[128,679,680,683,685,687,689,691,693,695],{"class":130,"line":138},[128,681,682],{"class":141},"$",[128,684,220],{"class":145},[128,686,318],{"class":145},[128,688,520],{"class":152},[128,690,370],{"class":369},[128,692,673],{"class":145},[128,694,377],{"class":376},[128,696,380],{"class":369},[32,698],{},[35,700,702],{"id":701},"switching-a-branch","Switching a branch",[11,704,705,706,709],{},"Till now we learned how to list, create and delete a branch. What if we want to switch between branches when working on multiple features. We can do this using the ",[27,707,708],{},"checkout"," command.",[119,711,713],{"className":121,"code":712,"language":123,"meta":124,"style":124},"# We deleted our branch. Create it again. Ignore if branch exists.\ngit branch new-feature\n\n# command to switch branch\ngit checkout \u003Cbranch-name>\n\n# Switch to new-feature branch\ngit checkout new-feature\n\n# Verify the current branch\ngit branch\n",[27,714,715,720,728,732,737,752,756,761,769,773,778],{"__ignoreMap":124},[128,716,717],{"class":130,"line":131},[128,718,719],{"class":134},"# We deleted our branch. Create it again. Ignore if branch exists.\n",[128,721,722,724,726],{"class":130,"line":138},[128,723,174],{"class":141},[128,725,318],{"class":145},[128,727,398],{"class":145},[128,729,730],{"class":130,"line":149},[128,731,162],{"emptyLinePlaceholder":161},[128,733,734],{"class":130,"line":158},[128,735,736],{"class":134},"# command to switch branch\n",[128,738,739,741,744,746,748,750],{"class":130,"line":165},[128,740,174],{"class":141},[128,742,743],{"class":145}," checkout",[128,745,370],{"class":369},[128,747,373],{"class":145},[128,749,377],{"class":376},[128,751,380],{"class":369},[128,753,754],{"class":130,"line":171},[128,755,162],{"emptyLinePlaceholder":161},[128,757,758],{"class":130,"line":180},[128,759,760],{"class":134},"# Switch to new-feature branch\n",[128,762,763,765,767],{"class":130,"line":185},[128,764,174],{"class":141},[128,766,743],{"class":145},[128,768,398],{"class":145},[128,770,771],{"class":130,"line":191},[128,772,162],{"emptyLinePlaceholder":161},[128,774,775],{"class":130,"line":200},[128,776,777],{"class":134},"# Verify the current branch\n",[128,779,780,782],{"class":130,"line":205},[128,781,174],{"class":141},[128,783,223],{"class":145},[11,785,786,787,66],{},"To switch back to master branch we can do ",[27,788,789],{},"git checkout master",[11,791,792],{},"There's also a shortcut to create a new branch and switch to the newly created branch.",[119,794,796],{"className":121,"code":795,"language":123,"meta":124,"style":124},"git checkout -b \u003Cbranch-name>\n",[27,797,798],{"__ignoreMap":124},[128,799,800,802,804,807,809,811,813],{"class":130,"line":131},[128,801,174],{"class":141},[128,803,743],{"class":145},[128,805,806],{"class":152}," -b",[128,808,370],{"class":369},[128,810,373],{"class":145},[128,812,377],{"class":376},[128,814,380],{"class":369},[79,816,817,819,823,826,913,915,919,922,981,987,1041,1046,1048,1052,1085,1103,1105,1114,1117,1126],{},[32,818],{},[35,820,822],{"id":821},"renaming-a-branch","Renaming a branch",[11,824,825],{},"Git provides us with an option to rename a branch as well.",[119,827,829],{"className":121,"code":828,"language":123,"meta":124,"style":124},"git branch -m \u003Cold-branch> \u003Cnew-branch>\n\n# Rename our new-feature branch\ngit branch -m new-feature new-feature-renamed\n\n# Verify if the branch name is updated\ngit branch\n\n# Output\n* master\n  new-feature-renamed\n",[27,830,831,857,861,866,879,883,888,894,898,902,908],{"__ignoreMap":124},[128,832,833,835,837,839,841,844,846,848,850,853,855],{"class":130,"line":131},[128,834,174],{"class":141},[128,836,318],{"class":145},[128,838,256],{"class":152},[128,840,370],{"class":369},[128,842,843],{"class":145},"old-branc",[128,845,483],{"class":376},[128,847,458],{"class":369},[128,849,370],{"class":369},[128,851,852],{"class":145},"new-branc",[128,854,483],{"class":376},[128,856,380],{"class":369},[128,858,859],{"class":130,"line":138},[128,860,162],{"emptyLinePlaceholder":161},[128,862,863],{"class":130,"line":149},[128,864,865],{"class":134},"# Rename our new-feature branch\n",[128,867,868,870,872,874,876],{"class":130,"line":158},[128,869,174],{"class":141},[128,871,318],{"class":145},[128,873,256],{"class":152},[128,875,566],{"class":145},[128,877,878],{"class":145}," new-feature-renamed\n",[128,880,881],{"class":130,"line":165},[128,882,162],{"emptyLinePlaceholder":161},[128,884,885],{"class":130,"line":171},[128,886,887],{"class":134},"# Verify if the branch name is updated\n",[128,889,890,892],{"class":130,"line":180},[128,891,174],{"class":141},[128,893,223],{"class":145},[128,895,896],{"class":130,"line":185},[128,897,162],{"emptyLinePlaceholder":161},[128,899,900],{"class":130,"line":191},[128,901,556],{"class":134},[128,903,904,906],{"class":130,"line":200},[128,905,345],{"class":369},[128,907,416],{"class":376},[128,909,910],{"class":130,"line":205},[128,911,912],{"class":141},"  new-feature-renamed\n",[32,914],{},[35,916,918],{"id":917},"merging-a-branch","Merging a branch",[11,920,921],{},"We'll make some changes and create a commit on the newly created branch.",[119,923,925],{"className":121,"code":924,"language":123,"meta":124,"style":124},"# Switch to new-feature branch\ngit checkout new-feature\n\n# Make some changes in somefile.txt\n# Stage the changes\ngit add .\n\n# Create a commit\ngit commit -m \"Adding new changes\"\n",[27,926,927,931,939,943,948,953,961,965,970],{"__ignoreMap":124},[128,928,929],{"class":130,"line":131},[128,930,760],{"class":134},[128,932,933,935,937],{"class":130,"line":138},[128,934,174],{"class":141},[128,936,743],{"class":145},[128,938,398],{"class":145},[128,940,941],{"class":130,"line":149},[128,942,162],{"emptyLinePlaceholder":161},[128,944,945],{"class":130,"line":158},[128,946,947],{"class":134},"# Make some changes in somefile.txt\n",[128,949,950],{"class":130,"line":165},[128,951,952],{"class":134},"# Stage the changes\n",[128,954,955,957,959],{"class":130,"line":171},[128,956,174],{"class":141},[128,958,242],{"class":145},[128,960,245],{"class":145},[128,962,963],{"class":130,"line":180},[128,964,162],{"emptyLinePlaceholder":161},[128,966,967],{"class":130,"line":185},[128,968,969],{"class":134},"# Create a commit\n",[128,971,972,974,976,978],{"class":130,"line":191},[128,973,174],{"class":141},[128,975,253],{"class":145},[128,977,256],{"class":152},[128,979,980],{"class":145}," \"Adding new changes\"\n",[11,982,983,984,709],{},"Now we are done with changes on the branch and say want to merge this into master. Here is how we can do it using the ",[27,985,986],{},"merge",[119,988,990],{"className":121,"code":989,"language":123,"meta":124,"style":124},"# Switch to branch where we want the changes to be merged\ngit checkout master\n\n# Command to merge the branch\ngit merge \u003Cbranch-name>\n\ngit merge new-feature\n",[27,991,992,997,1005,1009,1014,1029,1033],{"__ignoreMap":124},[128,993,994],{"class":130,"line":131},[128,995,996],{"class":134},"# Switch to branch where we want the changes to be merged\n",[128,998,999,1001,1003],{"class":130,"line":138},[128,1000,174],{"class":141},[128,1002,743],{"class":145},[128,1004,416],{"class":145},[128,1006,1007],{"class":130,"line":149},[128,1008,162],{"emptyLinePlaceholder":161},[128,1010,1011],{"class":130,"line":158},[128,1012,1013],{"class":134},"# Command to merge the branch\n",[128,1015,1016,1018,1021,1023,1025,1027],{"class":130,"line":165},[128,1017,174],{"class":141},[128,1019,1020],{"class":145}," merge",[128,1022,370],{"class":369},[128,1024,373],{"class":145},[128,1026,377],{"class":376},[128,1028,380],{"class":369},[128,1030,1031],{"class":130,"line":171},[128,1032,162],{"emptyLinePlaceholder":161},[128,1034,1035,1037,1039],{"class":130,"line":180},[128,1036,174],{"class":141},[128,1038,1020],{"class":145},[128,1040,398],{"class":145},[11,1042,1043,1044],{},"Tada 🥳 , the changes are now merged to master. You can verify the commits on master using ",[27,1045,581],{},[32,1047],{},[35,1049,1051],{"id":1050},"resources","Resources",[46,1053,1054,1063,1071,1078],{},[49,1055,1056],{},[1057,1058,1062],"a",{"href":1059,"rel":1060},"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-branch",[1061],"nofollow","Git branch docs",[49,1064,1065,1070],{},[1057,1066,1069],{"href":1067,"rel":1068},"https:\u002F\u002Fwww.atlassian.com\u002Fgit\u002Ftutorials\u002Fusing-branches",[1061],"Atlassian Git tutorials"," - Recommended.",[49,1072,1073],{},[1057,1074,1077],{"href":1075,"rel":1076},"https:\u002F\u002Flearngitbranching.js.org\u002F",[1061],"Visualize Git branching",[49,1079,1080],{},[1057,1081,1084],{"href":1082,"rel":1083},"https:\u002F\u002Famzn.to\u002F3qAj23l",[1061],"Book: Pro Git",[1086,1087,1088],"blockquote",{},[11,1089,1090,1091,1096,1097,1102],{},"Do explore articles on ",[1057,1092,1095],{"href":1093,"rel":1094},"https:\u002F\u002Fwww.mohitkhare.com\u002Fcategories\u002Fgolang",[1061],"Golang"," and ",[1057,1098,1101],{"href":1099,"rel":1100},"https:\u002F\u002Fwww.mohitkhare.com\u002Fcategories\u002Fsystem%20design",[1061],"System Design",". You'll learn something new 💡",[32,1104],{},[11,1106,1107,1108,1113],{},"Liked the article? Consider ",[1057,1109,1112],{"href":1110,"rel":1111},"https:\u002F\u002Fwww.buymeacoffee.com\u002FchHAzigTb",[1061],"supporting me"," ☕️",[11,1115,1116],{},"I hope you learned something new. Feel free to suggest improvements ✔️",[11,1118,1119,1120,1125],{},"I share regular updates and resources on ",[1057,1121,1124],{"href":1122,"rel":1123},"https:\u002F\u002Ftwitter.com\u002Fmkfeuhrer",[1061],"Twitter",". Let's connect!",[11,1127,1128],{},[18,1129,1130],{},"Keep exploring 🔎 Keep learning 🚀",[1132,1133,1134],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":124,"searchDepth":138,"depth":138,"links":1136},[1137,1138,1139,1140,1141,1142],{"id":37,"depth":138,"text":38},{"id":85,"depth":138,"text":86},{"id":282,"depth":138,"text":283},{"id":351,"depth":138,"text":352},{"id":498,"depth":138,"text":499},{"id":701,"depth":138,"text":702},[1144,1145],"Git","Programming","Branching is a new path of development that makes it a lot easier to build features. Learn why and how to use branching in git.",false,"md","blog\u002Fgit-branch\u002Fgit-branch-card.webp","git branch, git branch create, git branch list, git branch delete, git branch checkout, switch to git branch",{},"git-branch","\u002Fblog\u002Fgit-branch",{"title":5,"description":1146},"blog\u002Fgit-branch","2022-03-20","cFCjgcI4XvWHqzTUbQhXAOXvAidH1P9hKQDxLPwQq1A",[1159,1166,1172,1180,1189,1195,1202,1209,1215,1221,1227,1233,1239,1245,1247,1253,1259,1265,1271,1277,1283,1289,1295,1302,1309,1315,1321,1327,1333,1339,1345,1351,1357,1363,1369,1375,1381,1387,1394,1400,1406,1412,1419,1425,1431,1438,1445,1451,1458,1464,1471,1477,1484,1490,1496,1502,1508,1514,1520,1526,1532,1538,1544,1550,1556,1563,1569,1576,1582,1588,1594,1601,1607],{"path":1160,"title":1161,"description":1162,"categories":1163,"draft":161,"year":1165,"series":6},"\u002Fblog\u002Fai-assisted-workstation","Building an AI-Assisted Personal Workstation","A living log of building a practical AI-assisted workstation for software and startup work.",[1164,1145],"Productivity","2026-08-08",{"path":1167,"title":1168,"description":1169,"categories":1170,"draft":1147,"year":1171,"series":6},"\u002Fblog\u002Faws-s3-golang","Uploading images to AWS S3 in Golang","In this tutorial I cover how to upload, fetch and manage other operations for objects on AWS S3 in Golang",[1095,1145],"2020-01-12",{"path":1173,"title":1174,"description":1175,"categories":1176,"draft":1147,"year":1179,"series":6},"\u002Fblog\u002Fbooks-for-engineers","Best Books for Software Engineers","Best Books to help you build you software engineering career - ranging from fundamentats, interview prep to productivity.",[1177,1178],"Books","Life","2021-12-26",{"path":1181,"title":1182,"description":1183,"categories":1184,"draft":1147,"year":1188,"series":6},"\u002Fblog\u002Fbuilding-acrons","Building Acrons 🚀","Building Acrons, a one-stop tool to decode everyday acronyms like DIY, FOMO, and BRB without losing your flow.",[1185,1186,1187],"Side Projects","Web","Tools","2020-05-26",{"path":1190,"title":1191,"description":1192,"categories":1193,"draft":1147,"year":1194,"series":6},"\u002Fblog\u002Fcap-theorem","CAP Theorem Explained","Learn the concept and misconceptions around popular CAP theorem in system design.",[1101,1145],"2021-07-26",{"path":1196,"title":1197,"description":1198,"categories":1199,"draft":1147,"year":1201,"series":6},"\u002Fblog\u002Fcode-reviews","Code Review Checklist","Why code reviews matter, and best practices that catch bugs early and keep code quality high before merge.",[1200],"Engineering Principles","2020-07-20",{"path":1203,"title":1204,"description":1205,"categories":1206,"draft":1147,"year":1208,"series":6},"\u002Fblog\u002Fdark-mode","Add Dark mode to websites","Dark mode is ❤️️ Add it to your websites with little CSS and JS",[1207,1186],"Javascript","2020-07-04",{"path":1210,"title":1211,"description":1212,"categories":1213,"draft":1147,"year":1214,"series":6},"\u002Fblog\u002Fdate-time-golang","Working with Date and Time in Go","Learn how to use time in Golang - Multiple formats, locations and using date.",[1095,1145],"2020-10-09",{"path":1216,"title":1217,"description":1218,"categories":1219,"draft":1147,"year":1220,"series":6},"\u002Fblog\u002Fdefer-in-golang","Understanding Defer In Golang","Learn about defer keyword in golang and how it can help you avoid panics due to bugs.",[1095,1145],"2021-05-05",{"path":1222,"title":1223,"description":1224,"categories":1225,"draft":1147,"year":1226,"series":6},"\u002Fblog\u002Fenums-golang","Implementing Enums in Golang","Enums are a way to defined set of constant values. Learn how to implement enums in Go using iota with examples.",[1095,1145],"2021-12-18",{"path":1228,"title":1229,"description":1230,"categories":1231,"draft":1147,"year":1232,"series":6},"\u002Fblog\u002Fenvironment-variable-golang","Guide to Environment variables in Go","Learn what are environment variables and how to use them in Go",[1095,1145],"2020-08-14",{"path":1234,"title":1235,"description":1236,"categories":1237,"draft":1147,"year":1238,"series":6},"\u002Fblog\u002Ferror-handling-golang","Handle errors the right way — Golang","How to handle errors in golang to make your life easy",[1095,1145],"2020-01-30",{"path":1240,"title":1241,"description":1242,"categories":1243,"draft":1147,"year":1244,"series":6},"\u002Fblog\u002Ffile-upload-golang","Uploading Files in Golang with Multipart Request","Learn how to upload files from your client to server as a multipart request in Golang.",[1095,1145],"2021-03-13",{"path":1153,"title":5,"description":1146,"categories":1246,"draft":1147,"year":1156,"series":6},[1144,1145],{"path":1248,"title":1249,"description":1250,"categories":1251,"draft":1147,"year":1252,"series":6},"\u002Fblog\u002Fgit-pull-request-template","Guide to Pull Request Templates","Improve collaboration and code reviews with pull request templates. Blog include PR template and how to create one on github\u002Fgitlab",[1144,1145],"2023-08-24",{"path":1254,"title":1255,"description":1256,"categories":1257,"draft":1147,"year":1258,"series":6},"\u002Fblog\u002Fgit-remove-sensitive-info","Securing Git: Remove Sensitive Information","Protect your code from security breaches by using BFG tool to remove sensitive information from Git history. Learn how to do it in this comprehensive guide.",[1144,1145],"2023-10-16",{"path":1260,"title":1261,"description":1262,"categories":1263,"draft":1147,"year":1264,"series":6},"\u002Fblog\u002Fgit-tags-explained","Git tags : Explained","What Git tags are, why and when to use them, and how to start tagging releases in your own projects.",[1144,1145],"2020-06-18",{"path":1266,"title":1267,"description":1268,"categories":1269,"draft":1147,"year":1270,"series":6},"\u002Fblog\u002Fgo-dependency-injection","Dependency Injection in Go using Wire","Learn about dependency injection, its benefits and how to implement it in Go services using wire",[1095,1145],"2022-11-26",{"path":1272,"title":1273,"description":1274,"categories":1275,"draft":1147,"year":1276,"series":6},"\u002Fblog\u002Fgo-generics","Introduction to Generics in Go","Learn about generics in Golang, it's benefits and how to implement it in applications.",[1095,1145],"2022-11-27",{"path":1278,"title":1279,"description":1280,"categories":1281,"draft":1147,"year":1282,"series":6},"\u002Fblog\u002Fgo-in-memory-cache","Building In-Memory Cache in Go","Learn about in-memory caching in Golang, it's benefits and how to implement it with and without generics with a TTL(expiry).",[1095,1145],"2024-03-28",{"path":1284,"title":1285,"description":1286,"categories":1287,"draft":1147,"year":1288,"series":6},"\u002Fblog\u002Fgo-makefile","Ultimate Makefile for Golang","Boost your productivity and save time with ultimate Makefile for Golang projects.",[1095,1145],"2024-06-10",{"path":1290,"title":1291,"description":1292,"categories":1293,"draft":1147,"year":1294,"series":6},"\u002Fblog\u002Fgo-middleware","Mastering Middlewares in Golang","Learn about middlewares, their use cases and how to implement them in Golang applications",[1095,1145],"2022-03-13",{"path":1296,"title":1297,"description":1298,"categories":1299,"draft":1147,"year":1301,"series":6},"\u002Fblog\u002Fgo-naming-conventions","Naming Conventions in Golang","Why naming conventions matter in Go, with best practices and practical examples for clear, readable, maintainable code.",[1095,1145,1300],"Code Quality","2023-05-19",{"path":1303,"title":1304,"description":1305,"categories":1306,"draft":1147,"year":1308,"series":6},"\u002Fblog\u002Fgo-with-redis","Go with Redis","A practical introduction to using Redis with Golang to make your applications faster with in-memory data storage.",[1095,1307,1145],"Database","2020-05-03",{"path":1310,"title":1311,"description":1312,"categories":1313,"draft":1147,"year":1314,"series":6},"\u002Fblog\u002Fgolang-maps","Learn Maps in Golang (with examples)","A complete guide to maps in Golang: creating maps, adding and removing items, iterating, and how map equality works.",[1095,1145],"2020-09-10",{"path":1316,"title":1317,"description":1318,"categories":1319,"draft":1147,"year":1320,"series":6},"\u002Fblog\u002Fguide-to-cdn","Guide to Content Delivery Network","CDN is one of the backbone of modern world internet infrastructure. Learn about Content Delivery Network, it's working, types and benefits.",[1101,1145],"2022-01-23",{"path":1322,"title":1323,"description":1324,"categories":1325,"draft":1147,"year":1326,"series":6},"\u002Fblog\u002Fguide-to-rule-engines","Guide to Rule Engines","Rule Engines help in solving changing business requirements with ease. Learn all about Rule engines, it's working, benefits and how to implement one in Golang",[1095,1145],"2022-09-12",{"path":1328,"title":1329,"description":1330,"categories":1331,"draft":1147,"year":1332,"series":6},"\u002Fblog\u002Fhexagonal-architecture","Guide to Hexagonal Architecture","Learn how to design efficient application with hexagonal architecture with practical example",[1101,1145],"2020-12-13",{"path":1334,"title":1335,"description":1336,"categories":1337,"draft":1147,"year":1338,"series":6},"\u002Fblog\u002Fhttp-status-codes","Learn HTTP Status Codes","A tour of HTTP response status codes, what each class means, and when to use which code in your applications.",[1186,1145],"2020-07-30",{"path":1340,"title":1341,"description":1342,"categories":1343,"draft":1147,"year":1344,"series":6},"\u002Fblog\u002Fintroduction-to-goroutines","Introduction to Goroutines","Understand the basics of concurrency and learn how to work with Goroutines in golang.",[1095,1145],"2021-04-10",{"path":1346,"title":1347,"description":1348,"categories":1349,"draft":1147,"year":1350,"series":6},"\u002Fblog\u002Fjson-in-postgres-with-golang","Storing JSON in Postgres with Golang","Learn how to store JSON objects in Postgres and how to implement it in Golang.",[1145,1307,1095],"2021-02-13",{"path":1352,"title":1353,"description":1354,"categories":1355,"draft":1147,"year":1356,"series":6},"\u002Fblog\u002Fjson-web-token","Complete Guide to JWT","JSON Web Tokens are a very compact way to carry information. Learn about JWTs in depth, from its structure to when to use it.",[1145,1186],"2021-11-20",{"path":1358,"title":1359,"description":1360,"categories":1361,"draft":1147,"year":1362,"series":6},"\u002Fblog\u002Flearn-to-say-no","Learning to say No","Learn why it's important to say 'NO'. How it helps in increasing productivity and explore strategies for saying No",[1178,1177],"2022-04-09",{"path":1364,"title":1365,"description":1366,"categories":1367,"draft":1147,"year":1368,"series":6},"\u002Fblog\u002Flearn-unlearn-relearn","Learn - Unlearn - Relearn","Unlearning things to learn new is the way to grow. Discover how to do that!",[1164,1178],"2020-09-25",{"path":1370,"title":1371,"description":1372,"categories":1373,"draft":1147,"year":1374,"series":6},"\u002Fblog\u002Flinting-in-golang","Introduction to Linting in Go","Introduction to improving code quality using linting. Learn how to add linting in your Go projects.",[1095,1145],"2021-07-07",{"path":1376,"title":1377,"description":1378,"categories":1379,"draft":1147,"year":1380,"series":6},"\u002Fblog\u002Fload-balancing","Load Balancing 101","Complete guide on load balancers explaining the internal working and how does it help in making applications efficient.",[1101,1145],"2021-05-29",{"path":1382,"title":1383,"description":1384,"categories":1385,"draft":1147,"year":1386,"series":6},"\u002Fblog\u002Fmaking-decisions-the-right-way","Making Decisions: The right way","Decisions are hard! Learn how to make the right decisions always",[1164,1178],"2020-06-07",{"path":1388,"title":1389,"description":1390,"categories":1391,"draft":1147,"year":1393,"series":6},"\u002Fblog\u002Fmanage-logs-with-logrotate","Using Logrotate to manage logs","Learn how to use logrotate system utility to manage logs with example",[1392,1145],"Linux","2020-09-08",{"path":1395,"title":1396,"description":1397,"categories":1398,"draft":1147,"year":1399,"series":6},"\u002Fblog\u002Fmarshal-structs-golang","Marshal structs the right way: Golang","Why Golang marshals empty structs into your JSON instead of null, and how to marshal structs the right way.",[1095,1145],"2020-03-31",{"path":1401,"title":1402,"description":1403,"categories":1404,"draft":1147,"year":1405,"series":6},"\u002Fblog\u002Fnotes-almanack-naval","Book Notes : Almanack of Naval Ravikant","My notes\u002Fhighlights from Almanack of Naval Ravikant book by Eric Jorgenson",[1177,1178],"2020-10-17",{"path":1407,"title":1408,"description":1409,"categories":1410,"draft":1147,"year":1411,"series":6},"\u002Fblog\u002Fnotes-anything-you-want","Book Notes : Anything you want","My notes\u002Fhighlights from Anything you want book by Derek Sivers",[1177,1178],"2021-09-25",{"path":1413,"title":1414,"description":1415,"categories":1416,"draft":1147,"year":1418,"series":6},"\u002Fblog\u002Fnotes-getting-real","Book Notes : Getting Real","My notes and highlights from Getting Real by Jason Fried and David Heinemeier Hansson on building web applications.",[1177,1417],"Startups","2020-11-03",{"path":1420,"title":1421,"description":1422,"categories":1423,"draft":1147,"year":1424,"series":6},"\u002Fblog\u002Fnotes-hell-yeah-or-no","Book Notes : Hell Yeah or No","My notes\u002Fhighlights from Hell Yeah or No book by Derek Sivers",[1177,1178],"2020-09-16",{"path":1426,"title":1427,"description":1428,"categories":1429,"draft":1147,"year":1430,"series":6},"\u002Fblog\u002Fnotes-how-to-be-a-capitalist","Book Notes : How to Be a Capitalist Without Any Capital","My notes\u002Fhighlights from How to Be a Capitalist Without Any Capital by Nathan Latka",[1177,1417],"2020-01-07",{"path":1432,"title":1433,"description":1434,"categories":1435,"draft":1147,"year":1437,"series":6},"\u002Fblog\u002Fnotes-lean-b2b","Book Notes : Lean B2B","My notes and highlights from Lean B2B by Étienne Garbugli on assessing markets, building MVPs, and selling to businesses.",[1177,1436],"Entrepreneurship","2022-07-02",{"path":1439,"title":1440,"description":1441,"categories":1442,"draft":1147,"year":1444,"series":6},"\u002Fblog\u002Fnotes-lets-talk-money","Book Notes : Let's Talk Money","My notes and highlights from Let's Talk Money by Monica Halan on managing personal finances and savings.",[1177,1443],"Personal Finance","2021-02-26",{"path":1446,"title":1447,"description":1448,"categories":1449,"draft":1147,"year":1450,"series":6},"\u002Fblog\u002Fnotes-obviously-awesome","Book Notes : Obviously Awesome","My notes and highlights from Obviously Awesome by April Dunford on product positioning and marketing strategy.",[1177,1417],"2020-04-26",{"path":1452,"title":1453,"description":1454,"categories":1455,"draft":1147,"year":1457,"series":6},"\u002Fblog\u002Fnotes-refactoring-ui","Book Notes: Refactoring UI","My notes and highlights from Refactoring UI by Adam Wathan and Steve Schoger, full of practical design tips for engineers.",[1177,1456],"Design","2020-05-09",{"path":1459,"title":1460,"description":1461,"categories":1462,"draft":1147,"year":1463,"series":6},"\u002Fblog\u002Fnotes-rework","Book Notes: Rework","My notes and highlights from Rework by Jason Fried and David Heinemeier Hansson on a better way to succeed in business.",[1177,1417],"2021-04-14",{"path":1465,"title":1466,"description":1467,"categories":1468,"draft":1147,"year":1470,"series":6},"\u002Fblog\u002Fone-on-one-meetings","Guide to Effective 1:1 Meetings","One on One meetings are important for your personal & professional growth. Learn how to master 1:1s with your manager and peers.",[1469,1164],"Career","2023-03-05",{"path":1472,"title":1473,"description":1474,"categories":1475,"draft":1147,"year":1476,"series":6},"\u002Fblog\u002Fpersonal-okrs","Personal OKRs for Success","Why one should set personal OKRs and how to achieve success with them",[1164,1178],"2020-06-27",{"path":1478,"title":1479,"description":1480,"categories":1481,"draft":1147,"year":1483,"series":6},"\u002Fblog\u002Fpoker-tips","Poker Tips: Johns Hopkins Poker Class","Notes from Johns Hopkins poker course. This guide will help you improve in Poker and win some large pots.",[1178,1482],"Poker","2020-06-13",{"path":1485,"title":1486,"description":1487,"categories":1488,"draft":1147,"year":1489,"series":6},"\u002Fblog\u002Fpomodoro","Get work done: The Pomo Way","Learn to focus and get productive by following the Pomodoro Technique",[1164],"2020-10-24",{"path":1491,"title":1492,"description":1493,"categories":1494,"draft":1147,"year":1495,"series":6},"\u002Fblog\u002Fpostgres-constraints","Postgres Constraints","Constraints are line of defense for database. Explore various types of constrainsts in postgres",[1307,1145],"2020-11-07",{"path":1497,"title":1498,"description":1499,"categories":1500,"draft":1147,"year":1501,"series":6},"\u002Fblog\u002Fppf-explained","PPF Explained","Learn basics about Public Provident Fund and why you should invest",[1178,1443],"2020-12-24",{"path":1503,"title":1504,"description":1505,"categories":1506,"draft":1147,"year":1507,"series":6},"\u002Fblog\u002Fproductivity-chrome-extensions","Boost Productivity with Chrome Extensions","Utitizing chrome extensions to boost your productivity!",[1164,1187,1186],"2020-04-24",{"path":1509,"title":1510,"description":1511,"categories":1512,"draft":1147,"year":1513,"series":6},"\u002Fblog\u002Fproductivity-in-vscode","Improve your productivity with VS Code","Key VS Code features like the integrated terminal, shortcuts, and extensions that improved my everyday productivity.",[1164,1145],"2020-03-12",{"path":1515,"title":1516,"description":1517,"categories":1518,"draft":1147,"year":1519,"series":6},"\u002Fblog\u002Freading-101","Improving Reading 101","Why reading matters, how to build a reading habit, and what to read next - from my own journey into books.",[1177,1178],"2020-04-04",{"path":1521,"title":1522,"description":1523,"categories":1524,"draft":1147,"year":1525,"series":6},"\u002Fblog\u002Freverse-proxy","Understanding Reverse Proxy","Learn about reverse proxy, how it is different from forward proxy and explore advantages of using it in system design.",[1101,1145],"2021-10-03",{"path":1527,"title":1528,"description":1529,"categories":1530,"draft":1147,"year":1531,"series":6},"\u002Fblog\u002Frunning-periodic-background-task-golang","Running periodic background tasks in Golang","How to run periodic background tasks in Golang by combining cron-style scheduling with background execution.",[1095,1145],"2019-11-21",{"path":1533,"title":1534,"description":1535,"categories":1536,"draft":1147,"year":1537,"series":6},"\u002Fblog\u002Fsessions-in-golang","Sessions using Golang and Redis","How cookies and sessions work, and how to implement persistent login sessions in Golang using Redis.",[1095,1307,1145],"2020-02-25",{"path":1539,"title":1540,"description":1541,"categories":1542,"draft":1147,"year":1543,"series":6},"\u002Fblog\u002Fsolid-dry-kiss-yagni","Solid Dry Kiss Yagni","An introduction to the SOLID, DRY, KISS, and YAGNI principles and how they help you write cleaner, robust code.",[1200],"2020-07-17",{"path":1545,"title":1546,"description":1547,"categories":1548,"draft":1147,"year":1549,"series":6},"\u002Fblog\u002Fstack-in-golang","Implement Stack in Golang","Learn how to implement stack data structure in Golang (Full code)",[1095,1145],"2020-09-14",{"path":1551,"title":1552,"description":1553,"categories":1554,"draft":1147,"year":1555,"series":6},"\u002Fblog\u002Fstart-oss-today","Start your Open Source journey today","Start your OSS journey with intro to GIT. Participate in Hacktoberfest!",[1144,1145],"2020-09-19",{"path":1557,"title":1558,"description":1559,"categories":1560,"draft":1147,"year":1562,"series":6},"\u002Fblog\u002Fsticky-social-bar","Sticky social share component in HTML","Learn how to build a social media sharing component in HTML and add it to your website.",[1145,1561],"Frontend","2021-02-05",{"path":1564,"title":1565,"description":1566,"categories":1567,"draft":1147,"year":1568,"series":6},"\u002Fblog\u002Fterm-insurance","Term insurance Simplified","Everything you need to know before you buy a term insurance.",[1178,1443],"2020-11-29",{"path":1570,"title":1571,"description":1572,"categories":1573,"draft":1147,"year":1575,"series":6},"\u002Fblog\u002Fterminal-output-with-redirection","Handling terminal outputs with Redirection","Learn how to handle terminal outputs with Redirection and saving it to files",[1392,1574,1145],"Terminal","2020-09-06",{"path":1577,"title":1578,"description":1579,"categories":1580,"draft":1147,"year":1581,"series":6},"\u002Fblog\u002Fthink-and-grow-rich","Book Notes: Think and Grow Rich","My notes and highlights from Think and Grow Rich by Napoleon Hill, covering its process for building wealth.",[1177,1178],"2020-05-19",{"path":1583,"title":1584,"description":1585,"categories":1586,"draft":1147,"year":1587,"series":6},"\u002Fblog\u002Ftransactions-postgres-golang","Transactions on Postgres with Golang","Performing Postgres database operations in Golang with GORM, from basic queries to full transaction support.",[1095,1307,1145],"2020-03-18",{"path":1589,"title":1590,"description":1591,"categories":1592,"draft":1147,"year":1593,"series":6},"\u002Fblog\u002Fwaitgroups-in-golang","WaitGroups in Golang","Learn about WaitGroups in golang and how to use them to perform concurrent operations without blocking the main thread.",[1095,1145],"2022-05-31",{"path":1595,"title":1596,"description":1597,"categories":1598,"draft":1147,"year":1600,"series":6},"\u002Fblog\u002Fwhat-i-use","What I Use: Products and Softwares","List of what I use in my day to day life ranging from terminal, editors, softwares, devices to accessories",[1178,1599],"Tech","2024-06-01",{"path":1602,"title":1603,"description":1604,"categories":1605,"draft":1147,"year":1606,"series":6},"\u002Fblog\u002Fyear-in-review-2020","Year in Review: 2020","It's a wrap! 2020 was a crazy year, See how my year went!",[1178],"2020-12-31",{"path":1608,"title":1609,"description":1610,"categories":1611,"draft":1147,"year":1612,"series":6},"\u002Fblog\u002Fyear-in-review-2021","Year in Review: 2021","It's a wrap! 2021 was a mixed bag, full of ups and downs. Key Goal for 2022: Start now!",[1178],"2021-12-31",1787743427860]