<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ishan Jarwal</title>
    <description>The latest articles on DEV Community by Ishan Jarwal (@ishanjarwal).</description>
    <link>https://dev.to/ishanjarwal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3954467%2F1bf380c8-8cbb-4c0d-9c2d-007299065122.jpg</url>
      <title>DEV Community: Ishan Jarwal</title>
      <link>https://dev.to/ishanjarwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishanjarwal"/>
    <language>en</language>
    <item>
      <title>Abandoned project came alive | I built and shipped my first SaaS</title>
      <dc:creator>Ishan Jarwal</dc:creator>
      <pubDate>Sat, 30 May 2026 18:35:01 +0000</pubDate>
      <link>https://dev.to/ishanjarwal/abandoned-project-came-alive-i-built-and-shipped-my-first-saas-3b3m</link>
      <guid>https://dev.to/ishanjarwal/abandoned-project-came-alive-i-built-and-shipped-my-first-saas-3b3m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Finally Finished the Side Project That Refused to Die
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Tonight, I finally deployed a project that has been sitting in my "I'll finish it someday" folder for far too long.&lt;/p&gt;

&lt;p&gt;It's called Resumazing, an AI-powered Resume Builder SaaS that helps users create professional resumes with AI assistance, ATS analysis, resume scoring, job fit analysis and multiple resume management features.&lt;/p&gt;

&lt;p&gt;What started as a weekend experiment slowly turned into a real product. Every time I thought it was almost done, I found another feature to build, another bug to fix, or another UI improvement to make.&lt;/p&gt;

&lt;p&gt;At several points, I considered abandoning it and moving on to the next shiny idea. But this I got the push I needed to finally cross the finish line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://resumazing.vercel.app" rel="noopener noreferrer"&gt;https://resumazing.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyczbovxz0nzivnjvf1iz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyczbovxz0nzivnjvf1iz.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;This project wasn't abandoned because it was broken.&lt;br&gt;
It was abandoned because it was &lt;em&gt;almost finished&lt;/em&gt;.&lt;br&gt;
And honestly, that's the hardest stage.&lt;/p&gt;

&lt;p&gt;The core functionality already worked months ago, but there were dozens of unfinished details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication improvements&lt;/li&gt;
&lt;li&gt;Resume templating issues&lt;/li&gt;
&lt;li&gt;Better validation and error handling&lt;/li&gt;
&lt;li&gt;UI polish&lt;/li&gt;
&lt;li&gt;Performance fixes&lt;/li&gt;
&lt;li&gt;Deployment setup&lt;/li&gt;
&lt;li&gt;Countless small bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project sat untouched while I learned new technologies, started new ideas, and kept telling myself I'd come back to it later.&lt;/p&gt;

&lt;p&gt;This week, I finally did.&lt;/p&gt;

&lt;p&gt;I stopped adding features, focused on completing what already existed, and pushed through the final stretch.&lt;/p&gt;

&lt;p&gt;A few hours later, the deployment was live.&lt;br&gt;
Not perfect. Not finished forever.&lt;br&gt;
But finished enough to be used by real people.&lt;/p&gt;

&lt;p&gt;And that's a much better place for a project than sitting in a local folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech I used
&lt;/h2&gt;

&lt;p&gt;I built it on nextjs with industry best practices like precommit scripts with husky, ensuring typesafety all over, writing maintainable code. &lt;br&gt;
I used the follwing : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inngest - for background jobs&lt;/li&gt;
&lt;li&gt;dodopayments - for payments and subscription lifecycle handling&lt;/li&gt;
&lt;li&gt;@react-pdf/renderer - for making templates&lt;/li&gt;
&lt;li&gt;zustand - for state management&lt;/li&gt;
&lt;li&gt;zod - for validations&lt;/li&gt;
&lt;li&gt;cloudinary - for object storage&lt;/li&gt;
&lt;li&gt;react-hook-forms - for form state handling&lt;/li&gt;
&lt;li&gt;and many more packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find the project here : &lt;a href="https://github.com/ishanjarwal/resume-builder-saas" rel="noopener noreferrer"&gt;https://github.com/ishanjarwal/resume-builder-saas&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot was surprisingly helpful during the finishing phase.&lt;/p&gt;

&lt;p&gt;The hardest part wasn't building new features, it was dealing with all the small tasks that come with polishing a project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactoring code&lt;/li&gt;
&lt;li&gt;Generating repetitive boilerplate&lt;/li&gt;
&lt;li&gt;Fixing type issues&lt;/li&gt;
&lt;li&gt;Writing validation logic&lt;/li&gt;
&lt;li&gt;Explaining unfamiliar APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, Copilot worked best as a development partner rather than an autopilot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Starting projects is exciting.&lt;br&gt;
Finishing them is difficult.&lt;/p&gt;

&lt;p&gt;This project taught me that most side projects don't fail because the idea is bad—they fail because the final 10% takes longer than the first 90%.&lt;/p&gt;

&lt;p&gt;Tonight, I finally shipped mine.&lt;br&gt;
And honestly, that feels pretty good...&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
    <item>
      <title>Installing PostgreSQL on Arch Linux | Practical Setup Guide</title>
      <dc:creator>Ishan Jarwal</dc:creator>
      <pubDate>Sat, 30 May 2026 17:57:25 +0000</pubDate>
      <link>https://dev.to/ishanjarwal/installing-postgresql-on-arch-linux-practical-setup-guide-1hme</link>
      <guid>https://dev.to/ishanjarwal/installing-postgresql-on-arch-linux-practical-setup-guide-1hme</guid>
      <description>&lt;p&gt;Installing postgres on windows/mac is pretty simple, you just follow the steps on the installation wizard and you get it working. You will also find lots of video tutorials and blogs regarding installation in windows/mac. &lt;/p&gt;

&lt;p&gt;But when it comes to linux (specifically arch), things get interesting. Since linux gives you more control, setting up anything on it can seem tricky at first glance but as you go through, you understand each and every step and its purpose. &lt;/p&gt;

&lt;p&gt;Before getting into it, understand this : Postgres is not like MongoDB which you initialize once through the CLI by providing the --dbpath flag, it is a system service. Meaning it will run on the system 24x7 (if we configure it that way) and different system users will be able to use it according to the access they have been granted.&lt;/p&gt;




&lt;h2&gt;
  
  
  First things first : Installation
&lt;/h2&gt;

&lt;p&gt;Always update the packages first :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -Syu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Lets initialize a Database Cluster
&lt;/h2&gt;

&lt;p&gt;PostgreSQL requires a data directory initialization. This is the directory which holds the actual data (one-time step unlike MongoDB) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo -u postgres initdb -D /var/lib/postgres/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Flags explained&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-u postgres&lt;/code&gt; → run command as postgres system user &lt;code&gt;initdb&lt;/code&gt; → creates system tables &amp;amp; internal structure &lt;code&gt;-D&lt;/code&gt; → data directory location&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Start &amp;amp; Enable Service
&lt;/h2&gt;

&lt;p&gt;Start server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable on every boot :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl status postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Enter psql Shell
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is psql ?&lt;/strong&gt; It is a command line interface to interact with out postgres service, databases, relations etc.&lt;/p&gt;

&lt;p&gt;Lets enter the psql shell with the user “postgres”. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On installing postgres, a new user named “postgres” is generated with default privileges.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo -u postgres psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why no password?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default auth configuration is the “peer” auth. Peer auth uses our OS user to login&lt;/li&gt;
&lt;li&gt;OS user identity is trusted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Create Role for a Project
&lt;/h2&gt;

&lt;p&gt;It is always a good practice to create a separate role for every major project. This way you follow modular principles.&lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;psql&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE ROLE myapp WITH
  LOGIN
  PASSWORD 'devpass123'
  CREATEDB;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LOGIN → allows authentication&lt;/li&gt;
&lt;li&gt;PASSWORD → required for apps/ORMs&lt;/li&gt;
&lt;li&gt;CREATEDB → grant access to create databases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Database
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE myapp_db OWNER myapp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ownership = full control over that DB.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Some frequently used and useful psql Commands
&lt;/h2&gt;

&lt;p&gt;List Databases&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;List roles (users)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\du
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;List tables/relations&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Show current connection details&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\conninfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Show the active role&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT current_user;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Connection URL Format
&lt;/h2&gt;

&lt;p&gt;To connect to the database, you will need a url (Yes this is the one you add in your environment variables)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;General structure&lt;/strong&gt; : postgresql://USER:PASSWORD@HOST:PORT/DATABASE&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; : postgresql://myapp:devpass123@localhost:5432/myapp_db &lt;/p&gt;

&lt;p&gt;This url can be used by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prisma&lt;/li&gt;
&lt;li&gt;ORMs&lt;/li&gt;
&lt;li&gt;Drivers&lt;/li&gt;
&lt;li&gt;CLI tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Enable Password Authentication (Critical for Prisma)
&lt;/h2&gt;

&lt;p&gt;Edit config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /var/lib/postgres/data/pg_hba.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change these lines according to your needs :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local   all   all                 md5
host    all   all   127.0.0.1/32  md5
host    all   all   ::1/128       md5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace md5 with one of the following :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;trust&lt;/code&gt; → no password&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;peer&lt;/code&gt; → OS identity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;md5&lt;/code&gt; / &lt;code&gt;scram-sha-256&lt;/code&gt; → password-based login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Restart PostgreSQL
&lt;/h3&gt;

&lt;p&gt;To apply the config changes :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl restart postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Testing our Connection
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql "postgresql://myapp:devpass123@localhost:5432/myapp_db"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql -U myapp -d myapp_db -h localhost -W
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Flags explained&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-U&lt;/code&gt; → database role &lt;code&gt;-d&lt;/code&gt; → database name &lt;code&gt;-h&lt;/code&gt; → host (forces TCP) &lt;code&gt;-W&lt;/code&gt; → force password prompt&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Some Common Errors &amp;amp; Causes you might face
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;password authentication failed&lt;/em&gt; → wrong password&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;database does not exist&lt;/em&gt; → DB missing&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;role does not exist&lt;/em&gt; → user missing&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;could not connect to server&lt;/em&gt; → service stopped / wrong port&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Again, remember&lt;/p&gt;

&lt;p&gt;PostgreSQL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always-running service&lt;/li&gt;
&lt;li&gt;Config-driven behavior&lt;/li&gt;
&lt;li&gt;URL = connection info only&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No manual server start like MongoDB.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Happy building 🚀&lt;/p&gt;

</description>
      <category>postgressql</category>
      <category>archlinux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Git Rebase vs Reset vs Revert | When to use What ?</title>
      <dc:creator>Ishan Jarwal</dc:creator>
      <pubDate>Fri, 29 May 2026 12:54:04 +0000</pubDate>
      <link>https://dev.to/ishanjarwal/git-rebase-vs-reset-vs-revert-when-to-use-what--28kp</link>
      <guid>https://dev.to/ishanjarwal/git-rebase-vs-reset-vs-revert-when-to-use-what--28kp</guid>
      <description>&lt;h3&gt;
  
  
  The Scenario: "Oops, I Made a Messy Commit History"
&lt;/h3&gt;

&lt;p&gt;Imagine you're working on a feature branch called &lt;code&gt;feature/login-page&lt;/code&gt;. You’ve made a few commits, but now :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One of the commits has a &lt;strong&gt;bug&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Another commit has a &lt;strong&gt;wrong commit message&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Your commit history looks like a &lt;strong&gt;jumbled mess&lt;/strong&gt; compared to &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Time to clean it up! But… should you &lt;strong&gt;rebase&lt;/strong&gt;, &lt;strong&gt;reset&lt;/strong&gt;, or &lt;strong&gt;revert&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  First, Let’s Understand the Core Idea of Each:
&lt;/h3&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What it Does&lt;/th&gt;
&lt;th&gt;Safe for Shared Branches?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rewrites commit history to make it linear and clean&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No&lt;/strong&gt;, unless used carefully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Moves the HEAD and branch pointer to a different commit&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No&lt;/strong&gt;, dangerous on shared branches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;revert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates a new commit that undoes a previous commit&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes&lt;/strong&gt;, safe to fix public history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Git Rebase&lt;/strong&gt; : "Let’s Rewrite History Neatly"
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What is it?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;git rebase&lt;/code&gt; allows you to move or "replay" your commits onto another branch or rearrange them to make a clean, linear history.&lt;/p&gt;

&lt;h4&gt;
  
  
  When to Use?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You want to &lt;strong&gt;clean up messy commit history&lt;/strong&gt; before merging.&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;squash commits&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;change commit messages&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;You have these commits in &lt;code&gt;feature/login-page&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A — B — C — D  (feature/login-page)         
        ↑       
      Buggy commit (C) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want to fix commit &lt;code&gt;C&lt;/code&gt; and clean up the message in &lt;code&gt;D&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Interactive Rebase
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git rebase -i HEAD~3 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick abc123 B pick def456 C pick ghi789 D 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change "pick" to "edit"&lt;/strong&gt; for C to fix the bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change "pick" to "reword"&lt;/strong&gt; for D to fix the commit message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Squash commits&lt;/strong&gt; if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Important:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;This rewrites commit hashes.&lt;/li&gt;
&lt;li&gt;If your branch is &lt;strong&gt;pushed and shared&lt;/strong&gt;, rebasing can mess up others' history. Use with care!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Git Reset&lt;/strong&gt; : "Let’s Go Back in Time (Dangerously Powerful)"
&lt;/h3&gt;

&lt;h3&gt;
  
  
  What is it?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git reset&lt;/code&gt; moves your branch pointer (&lt;code&gt;HEAD&lt;/code&gt;) to a previous commit. It can &lt;strong&gt;unstage files&lt;/strong&gt;, &lt;strong&gt;remove commits&lt;/strong&gt;, or even &lt;strong&gt;delete code changes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Types of Reset:
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What happens?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset --soft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keeps your changes staged.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset --mixed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unstages changes but keeps them in the working directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset --hard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Deletes&lt;/strong&gt; your changes completely. Dangerous!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  When to Use?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You made &lt;strong&gt;local commits&lt;/strong&gt; you don’t want anymore.&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;uncommit but keep the changes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;You made two useless commits on top of &lt;code&gt;main&lt;/code&gt; and want to remove them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A — B — C — D  (main)              
            ↑            
            Your branch (HEAD) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To undo D and C:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --soft HEAD~2 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Your changes are still there but &lt;strong&gt;unstaged (due to --soft flag)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If you want to kill the changes, do
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --hard HEAD~2 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that your git timeline will look like this :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A — B  (main)
    ↑            
    Your branch (HEAD) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Important:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Never reset a branch that is already pushed and shared with others&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Resetting can &lt;strong&gt;permanently lose work&lt;/strong&gt; (especially &lt;code&gt;--hard&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Git Revert&lt;/strong&gt; : "The Safe Undo Button"
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What is it?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt; creates a &lt;strong&gt;new commit&lt;/strong&gt; that undoes the changes of a previous commit. It &lt;strong&gt;preserves history&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  When to Use?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You want to &lt;strong&gt;undo a bad commit in a shared branch&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;keep history intact but fix a mistake&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;Commit &lt;code&gt;C&lt;/code&gt; introduced a bug. But you’ve already pushed it to &lt;code&gt;origin/main&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A — B — C — D  (main)           
             ↑            
            Bug lives here 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can revert C safely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git revert &amp;lt;commit-hash-of-C&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git will create a new commit :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A — B — C — D — E  (main)                    
                ↑                 
              "Revert C" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Important:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safe for shared/public branches&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Doesn’t remove the commit but &lt;strong&gt;inverts its changes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Summary: When to Use What?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Use When…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git rebase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You want to &lt;strong&gt;rewrite and clean history&lt;/strong&gt; (local-only).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You want to &lt;strong&gt;remove commits&lt;/strong&gt; or &lt;strong&gt;unstage changes&lt;/strong&gt; locally.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git revert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You need to &lt;strong&gt;undo commits safely in shared branches&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Visual Cheat Sheet
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"I messed up a commit and want to fix it before pushing" → &lt;strong&gt;Rebase / Reset (local only)&lt;/strong&gt;&lt;br&gt;
"I pushed a bad commit, now I need to undo it on remote" → &lt;strong&gt;Revert&lt;/strong&gt;&lt;br&gt;
"I made several ugly small commits, want to squash them" → &lt;strong&gt;Rebase -i&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Final Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Never rebase or reset public history unless you know what you’re doing.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;git log --oneline --graph&lt;/code&gt; to visualize the history before making changes.&lt;/li&gt;
&lt;li&gt;Always backup your branch with &lt;code&gt;git branch backup/my-branch&lt;/code&gt; before risky operations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Further Reading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-rebase" rel="noopener noreferrer"&gt;Git Rebase Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-reset" rel="noopener noreferrer"&gt;Git Reset Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-revert" rel="noopener noreferrer"&gt;Git Revert Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>devops</category>
    </item>
    <item>
      <title>Learn Package Management on Arch Linux: pacman &amp; yay</title>
      <dc:creator>Ishan Jarwal</dc:creator>
      <pubDate>Fri, 29 May 2026 07:59:48 +0000</pubDate>
      <link>https://dev.to/ishanjarwal/learn-package-management-on-arch-linux-pacman-yay-267j</link>
      <guid>https://dev.to/ishanjarwal/learn-package-management-on-arch-linux-pacman-yay-267j</guid>
      <description>&lt;h1&gt;
  
  
  Part 1: Understanding &lt;code&gt;pacman&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;pacman&lt;/code&gt; is the default package manager for Arch Linux. It directly interacts with the official repositories and handles installation, updates, and removal of software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="o"&gt;[&lt;/span&gt;options] &lt;span class="o"&gt;[&lt;/span&gt;package_name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common pacman Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Update package database and system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo pacman -Syu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync package list (&lt;code&gt;-Sy&lt;/code&gt;) and upgrade all packages (&lt;code&gt;-u&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install a package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo pacman -S &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Installs package from official repo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remove a package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo pacman -R &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes a package (keeps dependencies).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remove a package and its unused dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo pacman -Rns &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clean uninstall — removes package, configs, and dependencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search for a package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pacman -Ss &amp;lt;keyword&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search available packages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;List installed packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pacman -Q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shows all installed packages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Show package info&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pacman -Qi &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays metadata (version, size, dependencies).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clean cache&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sudo pacman -Sc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes old packages from cache.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Official Reference:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://wiki.archlinux.org/title/Pacman" rel="noopener noreferrer"&gt;Pacman Manual - ArchWiki&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🧹 Pro Tip
&lt;/h3&gt;

&lt;p&gt;To free up space, remove &lt;em&gt;unused dependencies&lt;/em&gt; and &lt;em&gt;old cached packages&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Rns&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;pacman &lt;span class="nt"&gt;-Qdtq&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Scc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Part 2: Using &lt;code&gt;yay&lt;/code&gt; for AUR Packages
&lt;/h1&gt;

&lt;p&gt;The &lt;strong&gt;Arch User Repository (AUR)&lt;/strong&gt; contains community-maintained build scripts (PKGBUILDs) for software not in the official repositories.&lt;br&gt;&lt;br&gt;
&lt;code&gt;yay&lt;/code&gt; (Yet Another Yaourt) is a lightweight, fast, and user-friendly &lt;strong&gt;AUR helper&lt;/strong&gt; that automates the build and installation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="o"&gt;[&lt;/span&gt;options] &lt;span class="o"&gt;[&lt;/span&gt;package_name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common yay Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Update everything (official + AUR)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Syu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync and upgrade both official and AUR packages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install an AUR package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -S &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Automatically fetches, builds, and installs from AUR.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search for AUR packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Ss &amp;lt;keyword&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search both official and AUR repositories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remove a package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Rns &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same as pacman — removes package + unused dependencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clean build cache&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Sc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clean yay’s build directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;List all AUR packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Qm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shows all manually installed (AUR) packages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Check for outdated AUR packages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yay -Qua&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lists AUR updates available.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Unlike pacman, &lt;code&gt;yay&lt;/code&gt; doesn’t need &lt;code&gt;sudo&lt;/code&gt; for most operations until the build process actually installs system files — it will prompt automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official Reference:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/Jguer/yay" rel="noopener noreferrer"&gt;Yay GitHub Repository&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Flag Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Install package(s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-R&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Remove package(s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Ss&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Search package in repos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Qi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman&lt;/td&gt;
&lt;td&gt;Show package info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Qm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;yay&lt;/td&gt;
&lt;td&gt;List manually installed (AUR) packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Syu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Sync database and upgrade all packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Rns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Remove package + dependencies + configs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Sc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman/yay&lt;/td&gt;
&lt;td&gt;Clean package cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Qdtq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pacman&lt;/td&gt;
&lt;td&gt;List orphaned packages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Further Reading:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://wiki.archlinux.org/title/Pacman/Tips_and_tricks" rel="noopener noreferrer"&gt;ArchWiki: Pacman Tips &amp;amp; Tricks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://wiki.archlinux.org/title/AUR_helpers" rel="noopener noreferrer"&gt;ArchWiki: AUR Helpers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>archlinux</category>
      <category>linux</category>
      <category>pacman</category>
      <category>aur</category>
    </item>
    <item>
      <title>A Comprehensive and Comfy Guide to Git.</title>
      <dc:creator>Ishan Jarwal</dc:creator>
      <pubDate>Fri, 29 May 2026 07:47:15 +0000</pubDate>
      <link>https://dev.to/ishanjarwal/a-comprehensive-and-comfy-guide-to-git-39nd</link>
      <guid>https://dev.to/ishanjarwal/a-comprehensive-and-comfy-guide-to-git-39nd</guid>
      <description>&lt;p&gt;Git is not just a tool; it’s a life-saver for developers. It helps you track changes, collaborate with others, and never lose your work. This guide is designed to be a comfy walkthrough of Git , not too heavy on jargon, but packed with useful knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Tiny History of Git and Why You Should Care
&lt;/h2&gt;

&lt;p&gt;Git was created by Linus Torvalds in 2005, the same genius who built Linux. It was born out of necessity when the Linux community needed a version control system that was fast, distributed, and free.&lt;/p&gt;

&lt;p&gt;Today, Git powers everything from hobby projects to massive codebases like those at Google, Microsoft, and Facebook. Whether you're working on a personal website or contributing to open-source, Git is the industry standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is Git
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Software Development (obviously!)&lt;/li&gt;
&lt;li&gt;Documentation Projects&lt;/li&gt;
&lt;li&gt;Collaborative Design Workflows&lt;/li&gt;
&lt;li&gt;Versioning for Configuration Files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it involves files that change over time, Git can manage it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Git Terminologies
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0u0br42cumcl4xgwx8e1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0u0br42cumcl4xgwx8e1.jpg" width="649" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repository (Repo)&lt;/strong&gt;&lt;br&gt;
A directory where your project's Git history is stored. It's like a folder, but smarter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Staging Area&lt;/strong&gt;&lt;br&gt;
Think of this as a "waiting room" where changes sit before you officially save them in the project history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;br&gt;
A snapshot of your project at a specific point in time. This is how you save your work in Git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push&lt;/strong&gt;&lt;br&gt;
You "push" commits to a remote repository (like GitHub) so others can see your work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Remote&lt;/strong&gt;&lt;br&gt;
A version of your project that's hosted on the internet or another network.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setting Up Git for the First Time
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Git&lt;/strong&gt;&lt;br&gt;
Download from &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git-scm.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configure Your Identity&lt;/strong&gt;&lt;br&gt;
Before you do anything, tell Git who you are. We do this by telling git what is our &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Your Name"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"your.email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initialize a Git Repository&lt;/strong&gt;
Navigate to your project folder and run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/your/project&lt;span class="s1"&gt;'s/root
git init
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;.git&lt;/code&gt; folder in your project. If you don't know, folders starting with a "." are hidden folders so you might not see it in the folder tree. This is where the information about your codebase is saved.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tracking Changes (Staging &amp;amp; Committing)
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check Project Status&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows which files have been changed, which are staged, and which are not. You will see something like this in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvki9fye6zk4vbegyqqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvki9fye6zk4vbegyqqm.png" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add Files to Staging Area
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add filename.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one step before committing your changes. Note that the files added to the staging area are the only ones going to be committed. All other files will be "unstaged files"&lt;/p&gt;

&lt;h2&gt;
  
  
  Committing the Changes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add feature X"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git expects you to associate every commit with a message. After running this command, a snapshot of your staged changes will be saved as a "commit".&lt;/p&gt;

&lt;h2&gt;
  
  
  Viewing Commit History
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows all commits in your repo. Use &lt;code&gt;q&lt;/code&gt; to exit log view.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;HEAD&lt;/strong&gt; in Git points to the current snapshot (commit) you are working on. Think of it as "where you are" in your project history.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Understanding Branches
&lt;/h1&gt;

&lt;p&gt;A &lt;strong&gt;branch&lt;/strong&gt; in Git is like creating an alternate universe for your code where you can try out new features without disturbing the main project. I would call this the most amazing feature offered by Git. Think of it as you are working on a feature and committing the changes step by step.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eg : Initialize Project -&amp;gt; create homepage -&amp;gt; add images -&amp;gt; change fonts . . .&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But parallel to this workflow, you also want to create a new feature say "Authentication" in the same project and without disturbing the main flow.&lt;/p&gt;

&lt;p&gt;When you first initialize your project, the default branch you work on is either "master" or "main"&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a New Branch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch new-feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Switch to That Branch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout new-feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Or Do Both in One Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; new-feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  List All Branches
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Delete a Branch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-d&lt;/span&gt; old-feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You can learn more about "Merging Branches" from here. It is an advanced git concept, hence it will not be discussed here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Push Your Code to GitHub
&lt;/h1&gt;

&lt;p&gt;Till now, we have created our repo, some commits (our checkpoints) and also branches. But all of this resides in our local machine. If anything goes wrong your pc, all of your data will be lost. For this purpose we have "Github", a place where you can upload your code so that it stays safe.&lt;/p&gt;

&lt;p&gt;Following theses steps you can do it easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a Github account and the repo.
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;First step is to create your &lt;a href="https://github.com/signup" rel="noopener noreferrer"&gt;github accout&lt;/a&gt;. Simply add your details, verify your account and your are good to go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you can click the "Create New Repository" button, give it a name, make it public/private according to you and hit create.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now your remote repository is created and we need to connect it to our local git project, to do that, follow these steps&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5jholbr2zfza88g8xp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5jholbr2zfza88g8xp1.png" width="799" height="401"&gt;&lt;/a&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5by8tcrdqc16e3su1qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5by8tcrdqc16e3su1qj.png" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Remote URL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin https://github.com/yourusername/your-repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;here, origin is nothing but an alias for your remote repository, you can see all the aliases by this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Push to Remote
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will "push" or upload our codebase to our remote repository. The "-u" flag tells Git to set the remote branch (&lt;code&gt;origin/main&lt;/code&gt;) as the upstream (or default) branch for your local branch (&lt;code&gt;main&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Congrats, your code is now safe on github.&lt;/p&gt;

&lt;h1&gt;
  
  
  Bonus Tips: Git in VSCode
&lt;/h1&gt;

&lt;p&gt;If you prefer clicking buttons over typing commands, &lt;strong&gt;Visual Studio Code&lt;/strong&gt; has an excellent Git GUI.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Must-have VSCode Git Extensions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  GitLens: Supercharge your Git experience.&lt;/li&gt;
&lt;li&gt;  Git Graph: Visualize your branches and commits.&lt;/li&gt;
&lt;li&gt;  GitHub Pull Requests and Issues: Manage PRs from within VSCode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flewirhchxeo6jkeaebjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flewirhchxeo6jkeaebjx.png" width="741" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;This guide covers the comfy essentials to get you started. In the next post, we'll explore advanced Git concepts like merge conflicts, rebasing, reverting commits, and more.&lt;/p&gt;

&lt;p&gt;For now, get your hands dirty and start committing!&lt;/p&gt;

&lt;p&gt;That's it! You're now Git-ready.&lt;/p&gt;

</description>
      <category>git</category>
      <category>versioning</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
