Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
105 posts found
Git Interactive Rebase and Squash: Tidying History Before a PR
DevOps PART 21

Git Interactive Rebase and Squash: Tidying History Before a PR

We turn a messy feature branch into three clean commits with git rebase -i: the todo list, pick, reword, edit, squash, fixup, drop and reordering, the commit --fixup plus --autosquash flow, how it differs from GitHub's squash merge, and the experimental git history reword in Git 2.54.

6 Nov 2026 10 min 9
Git rebase: Rewriting History and Pushing It Safely
DevOps PART 20

Git rebase: Rewriting History and Pushing It Safely

We compare merge and rebase in the same scenario: why rebase rewrites commits with new hashes, conflicts during a rebase and the flipped HEAD, pull --rebase, the golden rule, pushing a rebased branch with --force-with-lease and --force-if-includes, and --update-refs for stacked branches.

6 Nov 2026 10 min 11
Git cherry-pick: Moving a Single Commit to Another Branch
DevOps PART 19

Git cherry-pick: Moving a Single Commit to Another Branch

We carry a hotfix from main to a release branch with git cherry-pick: why the new commit gets a new hash, author versus committer, leaving a trail with -x, picking a range of commits, --continue/--abort/--skip during a conflict, finding equivalent commits with git cherry and when cherry-pick becomes a smell.

6 Nov 2026 9 min 11
Git Stash: Setting Unfinished Work Aside
DevOps PART 18

Git Stash: Setting Unfinished Work Aside

Saving unfinished work with git stash: -u for untracked files, named entries, list and show, apply versus pop, --staged and --index, the stash.index setting, conflicts during a pop, stash branch and the stash export/import commands from Git 2.51.

6 Nov 2026 10 min 8
Undoing Changes in Git, Part 2: git revert
DevOps PART 17

Undoing Changes in Git, Part 2: git revert

Safe undo in shared history: the inverse commit of git revert, choosing between reset and revert, reverting a merge commit with -m 1, reverting the revert before merging a branch again, several commits with --no-commit and conflicts during a revert.

6 Nov 2026 7 min 15
Undoing Changes in Git, Part 1: git restore and git reset
DevOps PART 16

Undoing Changes in Git, Part 1: git restore and git reset

Undoing files in the working tree and index with git restore and bringing them back from history with --source; what the --soft, --mixed and --hard modes of git reset do to HEAD, the index and the working tree, getting back with ORIG_HEAD, and the old checkout/reset forms.

6 Nov 2026 8 min 12
Teamwork with Git: Branching Strategies, Rulesets and Conventional Commits
DevOps PART 15

Teamwork with Git: Branching Strategies, Rulesets and Conventional Commits

Starting from a force push that wipes a teammate's commit, we compare GitHub flow, Git flow and trunk-based development; branch protection versus rulesets, server-side protection with receive.denyNonFastForwards, CODEOWNERS and Conventional Commits.

6 Nov 2026 10 min 10
Pull Requests on GitHub: GitHub Flow, Reviews and Merge Methods
DevOps PART 14

Pull Requests on GitHub: GitHub Flow, Reviews and Merge Methods

Branch, commit, push and pull request: the six steps of GitHub flow, draft PRs, answering review with new pushes, how the merge commit, squash and rebase methods shape history, the branch-deletion trap after a squash, and keeping a fork in sync with upstream.

6 Nov 2026 10 min 16
Connecting to GitHub: HTTPS, Personal Access Tokens and SSH
DevOps PART 13

Connecting to GitHub: HTTPS, Personal Access Tokens and SSH

From creating a repo on GitHub to the first push: why passwords stopped working in 2021, fine-grained versus classic personal access tokens, how credential helpers work, ed25519 SSH keys, gh auth login and transfer.credentialsInUrl, which catches tokens embedded in URLs.

6 Nov 2026 10 min 14
Understanding Git Pull: fetch, merge, rebase and Divergent Branches
DevOps PART 12

Understanding Git Pull: fetch, merge, rebase and Divergent Branches

We see with real output that git pull is fetch plus merge or rebase, the "divergent branches" error on diverged branches since Git 2.33.1, the --no-rebase, --rebase and --ff-only options, the choice between pull.rebase and pull.ff, pull.autostash from Git 2.51 and fetch --prune.

6 Nov 2026 9 min 10
Git Remote and Clone: origin, fetch, push and Upstream
DevOps PART 11

Git Remote and Clone: origin, fetch, push and Upstream

We see with real output what a remote is, git remote add, push -u and the upstream setting with a local bare repo standing in for GitHub, remote-tracking branches like origin/main, what git clone does, the split between fetch and merge, sharing a new branch, git remote show/rename and a rejected push.

6 Nov 2026 9 min 14
Resolving Git Conflicts: Markers, merge --abort and zdiff3
DevOps PART 10

Resolving Git Conflicts: Markers, merge --abort and zdiff3

We see with real output why conflicts happen, how to read the markers, how to inspect the state with git status, git log --merge and git ls-files -u, resolving step by step, git merge --abort, merge.conflictStyle zdiff3, --ours/--theirs, mergetool and rerere, with a short note on git add --resolved in Git 2.56.

6 Nov 2026 9 min 12
Blog Map