<?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: Lucas Braun</title>
    <description>The latest articles on DEV Community by Lucas Braun (@lbraun7).</description>
    <link>https://dev.to/lbraun7</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%2F3829880%2Ff4297eea-e1d7-4a1a-b529-f86e52351c2d.jpg</url>
      <title>DEV Community: Lucas Braun</title>
      <link>https://dev.to/lbraun7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lbraun7"/>
    <language>en</language>
    <item>
      <title>Why Python is the best first language (and when it isn't)</title>
      <dc:creator>Lucas Braun</dc:creator>
      <pubDate>Fri, 17 Apr 2026 17:54:40 +0000</pubDate>
      <link>https://dev.to/lbraun7/why-python-is-the-best-first-language-and-when-it-isnt-285f</link>
      <guid>https://dev.to/lbraun7/why-python-is-the-best-first-language-and-when-it-isnt-285f</guid>
      <description>&lt;p&gt;Search "what language should I learn first" and 90% of the answers will say Python.&lt;/p&gt;

&lt;p&gt;That's not a conspiracy, not hype, not a course sponsorship. There's real reason behind it. But there's also context those answers ignore — and ignoring context is what makes a lot of people start with the right language for the wrong goal.&lt;/p&gt;

&lt;p&gt;So let's be honest about both sides.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Python makes sense as a first language
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The syntax doesn't fight you
&lt;/h3&gt;

&lt;p&gt;Most languages have ceremonies that make no sense when you're starting out. Declaring variable types, semicolons at the end of every line, curly braces everywhere.&lt;/p&gt;

&lt;p&gt;Python removes most of that. Compare "hello, world" in Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, world!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, world!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't just aesthetics. When you're learning programming logic, every unfamiliar syntax element is one more thing to worry about. Python lets you focus on what matters: &lt;strong&gt;the reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You can build useful things fast
&lt;/h3&gt;

&lt;p&gt;With Python, in a few weeks you can already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate repetitive tasks on your computer&lt;/li&gt;
&lt;li&gt;Analyze a data spreadsheet&lt;/li&gt;
&lt;li&gt;Make a request to an API&lt;/li&gt;
&lt;li&gt;Write a script that renames 500 files at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's motivation. And motivation is what keeps beginners going when things get hard.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The industry actually uses Python
&lt;/h3&gt;

&lt;p&gt;Python isn't a toy language you learn and throw away. It powers a big chunk of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data science and ML&lt;/strong&gt;: pandas, numpy, scikit-learn, TensorFlow, PyTorch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation and DevOps&lt;/strong&gt;: scripts, pipelines, infrastructure tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web backend&lt;/strong&gt;: Django, FastAPI, Flask&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: pentest scripts, malware analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you learn Python well, there are real jobs waiting on the other side.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The community is huge (and generous)
&lt;/h3&gt;

&lt;p&gt;Got an error in your code? There's a Stack Overflow answer for it. Want to do something specific? There's a library for that. Want to learn for free? There's quality material at every level.&lt;/p&gt;

&lt;p&gt;A large community means less time stuck on a problem with no way out.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Python is not the best choice
&lt;/h2&gt;

&lt;p&gt;Now for the part tutorials skip.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you want mobile development
&lt;/h3&gt;

&lt;p&gt;Python has no meaningful presence in mobile app development. If your goal is to build Android or iOS apps, you'll want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kotlin&lt;/strong&gt; (native Android)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swift&lt;/strong&gt; (native iOS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript/TypeScript with React Native&lt;/strong&gt; (cross-platform)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dart with Flutter&lt;/strong&gt; (cross-platform)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning Python first will slow you down. Go straight to where you want to be.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you want frontend web development
&lt;/h3&gt;

&lt;p&gt;Python runs on the server, not in the browser. If you want to build interfaces, buttons, animations, the visual side of a website — that's &lt;strong&gt;JavaScript and HTML/CSS&lt;/strong&gt; territory.&lt;/p&gt;

&lt;p&gt;Python might complement your stack later on the backend, but if the goal is frontend, it's not where you start.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you want to build games
&lt;/h3&gt;

&lt;p&gt;There's Pygame, but honestly? It's not what the industry uses. If games are the goal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;C# with Unity&lt;/strong&gt; is the most practical path for the indie market&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDScript or C# with Godot&lt;/strong&gt; if you prefer open source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C++&lt;/strong&gt; if you have ambitions to work at large studios&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If extreme performance is the requirement
&lt;/h3&gt;

&lt;p&gt;Python is slow compared to compiled languages. For embedded systems, drivers, game engines, or anything where every millisecond counts, you'll want &lt;strong&gt;C, C++, or Rust&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That doesn't mean Python is useless in those contexts — sometimes it's used as glue between components. But as the primary language of a performance-critical system, it's not the ideal choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The question that actually matters
&lt;/h2&gt;

&lt;p&gt;Before choosing a language, answer one question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you want to build?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Where to start&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data science, AI, automation&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web development (visual)&lt;/td&gt;
&lt;td&gt;JavaScript + HTML/CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile apps&lt;/td&gt;
&lt;td&gt;Kotlin, Swift, or Flutter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web backend&lt;/td&gt;
&lt;td&gt;Python, JavaScript (Node), Go&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Games&lt;/td&gt;
&lt;td&gt;C# (Unity) or GDScript (Godot)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low-level systems&lt;/td&gt;
&lt;td&gt;C or C++&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offensive security&lt;/td&gt;
&lt;td&gt;Python + Bash&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you still don't know what you want to build, then Python is the best bet. It's versatile enough to help you figure out what interests you without locking you into a niche.&lt;/p&gt;




&lt;h2&gt;
  
  
  One thing that matters less than it seems
&lt;/h2&gt;

&lt;p&gt;A lot of people get stuck on the language choice because they think it's a permanent decision. It's not.&lt;/p&gt;

&lt;p&gt;Your first language is there to teach you how to &lt;strong&gt;think like a programmer&lt;/strong&gt;: loops, conditionals, functions, data structures, debugging. Those concepts exist in every language. Once you learn the logic well in Python, picking up JavaScript or Kotlin later becomes much easier.&lt;/p&gt;

&lt;p&gt;The language is the vehicle. The reasoning is what you actually learn.&lt;/p&gt;




&lt;p&gt;Python is an excellent first language for most people. But "most" isn't "everyone". Knowing what you want to build matters more than following the default recommendation on autopilot.&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Git beyond push: the commands nobody taught you</title>
      <dc:creator>Lucas Braun</dc:creator>
      <pubDate>Fri, 10 Apr 2026 13:30:28 +0000</pubDate>
      <link>https://dev.to/lbraun7/git-beyond-push-the-commands-nobody-taught-you-1n0i</link>
      <guid>https://dev.to/lbraun7/git-beyond-push-the-commands-nobody-taught-you-1n0i</guid>
      <description>&lt;p&gt;Everyone learns Git the same way: &lt;code&gt;git init&lt;/code&gt;, &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit -m "first commit"&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And then just... stops there.&lt;/p&gt;

&lt;p&gt;The problem is that Git has a huge set of commands that make a real difference day-to-day — and almost no beginner tutorial ever mentions them. You only find out about them when something breaks, at 11pm, with an open pull request.&lt;/p&gt;

&lt;p&gt;This article is here to change that.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;git stash&lt;/code&gt; — Git's secret pocket
&lt;/h2&gt;

&lt;p&gt;You're in the middle of a feature, the code is half-done, and you get a message: &lt;em&gt;"there's an urgent bug to fix on main"&lt;/em&gt;. What do you do?&lt;/p&gt;

&lt;p&gt;If you try &lt;code&gt;git checkout&lt;/code&gt; like that, Git will complain. If you make a commit, you'll pollute your history with a "WIP: saving to switch branches".&lt;/p&gt;

&lt;p&gt;The solution is &lt;code&gt;stash&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This saves all your uncommitted changes to a temporary place and leaves your working directory clean. Fix the bug, come back, and restore:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Want to see what you have saved?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You can have multiple stashes and give them names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash push &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"login feature halfway done"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. &lt;code&gt;git log --oneline&lt;/code&gt; — because the default log is terrible
&lt;/h2&gt;

&lt;p&gt;Ever opened a &lt;code&gt;git log&lt;/code&gt; and stared at a massive wall of text? There's a much better way:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a3f1c2e feat: add JWT authentication
9b2d441 fix: correct form validation
3c8e109 chore: update dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean, readable, one commit per line.&lt;/p&gt;

&lt;p&gt;Want to see branches too?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This draws a visual tree of your branches in the terminal. Looks like something from a hacker movie, but it's just Git.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;git diff&lt;/code&gt; — before committing, see what you actually changed
&lt;/h2&gt;

&lt;p&gt;You know that moment when you type &lt;code&gt;git add .&lt;/code&gt; without even checking what changed? Yeah, everyone does it. But the right way is to review first:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This shows &lt;strong&gt;line by line&lt;/strong&gt; what changed in files that haven't been staged yet.&lt;/p&gt;

&lt;p&gt;Already ran &lt;code&gt;git add&lt;/code&gt; and want to review before committing?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Want to compare two specific commits?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Reviewing your diff becomes a habit once you stop accidentally committing garbage.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;git commit --amend&lt;/code&gt; — fixing your last commit
&lt;/h2&gt;

&lt;p&gt;Committed with the wrong message? Forgot to include a file? You don't need to create a new commit just for that:&lt;br&gt;
&lt;/p&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;--amend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens your editor with the last commit message for you to edit. Save, close, done.&lt;/p&gt;

&lt;p&gt;Want to change the message directly without opening the editor?&lt;br&gt;
&lt;/p&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;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add JWT authentication"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want to include a forgotten file?&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 forgotten-file.py
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Warning:&lt;/strong&gt; only use &lt;code&gt;--amend&lt;/code&gt; on commits that &lt;strong&gt;haven't been pushed to the remote yet&lt;/strong&gt;. If you've already pushed, you'll run into trouble pushing again.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;git restore&lt;/code&gt; — undoing changes without drama
&lt;/h2&gt;

&lt;p&gt;You changed a file and regretted it. Want to go back to how it was at the last commit?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This discards all local changes in that file. No commit, no hassle.&lt;/p&gt;

&lt;p&gt;Want to undo a &lt;code&gt;git add&lt;/code&gt; (unstage a file)?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore &lt;span class="nt"&gt;--staged&lt;/span&gt; filename.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This doesn't delete your changes, it just removes the file from the staging area. Your edits are still there.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;code&gt;git revert&lt;/code&gt; — undoing a commit without rewriting history
&lt;/h2&gt;

&lt;p&gt;Made a commit you shouldn't have? The temptation is to use &lt;code&gt;git reset&lt;/code&gt;, but there's a problem: it rewrites history, which can cause a mess for teams.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt; is safer: it creates a &lt;strong&gt;new commit&lt;/strong&gt; that undoes the changes from a previous commit:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The history stays intact, you just add a new commit that reverts the damage. Perfect for team environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;code&gt;git cherry-pick&lt;/code&gt; — taking only what you need
&lt;/h2&gt;

&lt;p&gt;Imagine you have a bugfix on a feature branch, but you need to apply that fix to &lt;code&gt;main&lt;/code&gt; right now, without merging everything.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cherry-pick&lt;/code&gt; takes a specific commit and applies it to another branch:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Switch to the target branch, run this command with the hash of the commit you want, and done. Only that commit gets copied over.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: aliases that will save you time
&lt;/h2&gt;

&lt;p&gt;Tired of typing &lt;code&gt;git log --oneline --graph --all&lt;/code&gt; every time? Create an alias:&lt;br&gt;
&lt;/p&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; alias.tree &lt;span class="s2"&gt;"log --oneline --graph --all"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now just type:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You can create aliases for any command. Some I use all the time:&lt;br&gt;
&lt;/p&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; alias.st &lt;span class="s2"&gt;"status"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.co &lt;span class="s2"&gt;"checkout"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.unstage &lt;span class="s2"&gt;"restore --staged"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary
&lt;/h2&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;When to use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save work in progress to switch context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git log --oneline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;View history in a readable way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git diff --staged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Review what's going into the next commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git commit --amend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fix the last commit (message or files)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git restore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Undo changes in files&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;Safely undo a commit in a team environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git cherry-pick&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apply a specific commit to another branch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;These commands aren't advanced — they're &lt;strong&gt;essential&lt;/strong&gt;. They're what separates someone who "uses Git" from someone who actually works well with it.&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
