[{"data":1,"prerenderedAt":206},["ShallowReactive",2],{"post-\u002Fblog\u002Fstash":3},{"id":4,"title":5,"body":6,"date":197,"description":198,"extension":199,"meta":200,"navigation":114,"path":201,"seo":202,"sitemap":203,"stem":204,"__hash__":205},"blog\u002Fblog\u002Fstash.md","Git: The Double Agent",{"type":7,"value":8,"toc":193},"minimark",[9,13,16,22,27,30,33,81,85,88,186,189],[10,11,12],"p",{},"Your code works, but your commit history looks like a crime scene.",[10,14,15],{},"You want to go open source, but you don't want the world to see your 45 commits labeled \"fix\", \"wip\", and \"fuck this\". The solution isn't to code better; it's to lie better.",[17,18,19],"blockquote",{},[10,20,21],{},"\"Perfection is just a series of mistakes you didn't commit.\"",[23,24,26],"h3",{"id":25},"the-setup","The Setup",[10,28,29],{},"Keep your trash in the dark. Your local repo will talk to two servers: one for the backup (dirty), one for the public (clean).",[10,31,32],{},"Rename your current remote and add the new destination:",[34,35,40],"pre",{"className":36,"code":37,"language":38,"meta":39,"style":39},"language-bash shiki shiki-themes github-light github-dark","git remote rename origin private\ngit remote add public https:\u002F\u002Fgithub.com\u002Fyou\u002Frepo-opensource.git\n","bash","",[41,42,43,65],"code",{"__ignoreMap":39},[44,45,48,52,56,59,62],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"sScJk","git",[44,53,55],{"class":54},"sZZnC"," remote",[44,57,58],{"class":54}," rename",[44,60,61],{"class":54}," origin",[44,63,64],{"class":54}," private\n",[44,66,68,70,72,75,78],{"class":46,"line":67},2,[44,69,51],{"class":50},[44,71,55],{"class":54},[44,73,74],{"class":54}," add",[44,76,77],{"class":54}," public",[44,79,80],{"class":54}," https:\u002F\u002Fgithub.com\u002Fyou\u002Frepo-opensource.git\n",[23,82,84],{"id":83},"the-purge","The Purge",[10,86,87],{},"Create a clean branch that has no memory of your past sins. When you are ready to release, squash your chaos into a single, composed update.",[34,89,91],{"className":36,"code":90,"language":38,"meta":39,"style":39},"# Move to your clean branch\ngit checkout public-release\n\n# Smash everything from your dirty branch into one change\ngit merge --squash main\n\n# Commit the lie\ngit commit -m \"v1.0.0: Initial Release\"\n\n# Push the perfection\ngit push public public-release:main\n",[41,92,93,99,109,116,122,137,142,148,162,167,173],{"__ignoreMap":39},[44,94,95],{"class":46,"line":47},[44,96,98],{"class":97},"sJ8bj","# Move to your clean branch\n",[44,100,101,103,106],{"class":46,"line":67},[44,102,51],{"class":50},[44,104,105],{"class":54}," checkout",[44,107,108],{"class":54}," public-release\n",[44,110,112],{"class":46,"line":111},3,[44,113,115],{"emptyLinePlaceholder":114},true,"\n",[44,117,119],{"class":46,"line":118},4,[44,120,121],{"class":97},"# Smash everything from your dirty branch into one change\n",[44,123,125,127,130,134],{"class":46,"line":124},5,[44,126,51],{"class":50},[44,128,129],{"class":54}," merge",[44,131,133],{"class":132},"sj4cs"," --squash",[44,135,136],{"class":54}," main\n",[44,138,140],{"class":46,"line":139},6,[44,141,115],{"emptyLinePlaceholder":114},[44,143,145],{"class":46,"line":144},7,[44,146,147],{"class":97},"# Commit the lie\n",[44,149,151,153,156,159],{"class":46,"line":150},8,[44,152,51],{"class":50},[44,154,155],{"class":54}," commit",[44,157,158],{"class":132}," -m",[44,160,161],{"class":54}," \"v1.0.0: Initial Release\"\n",[44,163,165],{"class":46,"line":164},9,[44,166,115],{"emptyLinePlaceholder":114},[44,168,170],{"class":46,"line":169},10,[44,171,172],{"class":97},"# Push the perfection\n",[44,174,176,178,181,183],{"class":46,"line":175},11,[44,177,51],{"class":50},[44,179,180],{"class":54}," push",[44,182,77],{"class":54},[44,184,185],{"class":54}," public-release:main\n",[10,187,188],{},"The public sees a genius. Only you know the truth.",[190,191,192],"style",{},"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 .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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":39,"searchDepth":67,"depth":67,"links":194},[195,196],{"id":25,"depth":111,"text":26},{"id":83,"depth":111,"text":84},"2025-12-03","Open source without the shame.","md",{},"\u002Fblog\u002Fstash",{"title":5,"description":198},{"loc":201},"blog\u002Fstash","19UyyjaVwkSY22RUs7MRUDeV07B3DGRmKApVUiP-C_4",1783186628091]