Git is a version control system that enables collaboration and code tracking. An important aspect is the use of branches to work on features and fixes. When working on a branch, two key commands are git merge and git rebase. The difference lies in how the history is handled. Merging preserves the history, while rebasing moves local commits on top of the latest remote changes, creating a linear history. Additionally, options like --no-ff and --squash affect how the commit history appears, with --no-ff keeping individual commits and --squash combining them into one.

A practical collection of Git commands for real-world use. Covers working with submodules, rewriting commit history to fix authors, enabling symlinks on Windows, cleaning your working directory, searching commit logs, simulating actions with dry runs, and using git bisect to efficiently track down bugs in your commit history.

Hi, I’m Mo – a Senior Full-Stack Developer with 12+ years of experience. On this blog, I share insights into my work, exciting projects, and modern technologies like TypeScript, JavaScript, React, and GraphQL. You’ll find regular posts on clean code, frontend and full-stack best practices, agile software development, and sustainable architecture. Whether as a lead or team member, I focus on effective collaboration and pragmatic solutions. This blog is my space to share knowledge, reflect on new tech, and connect with others – from Freiburg or remotely. Take a look around and feel free to reach out!