Mert Özen Further With Every Line

Blog

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

Series
29 posts found #devops
Preparing for Git 3.0: What Changes, What Goes, What to Do Today
DevOps PART 29

Preparing for Git 3.0: What Changes, What Goes, What to Do Today

We separate the official status of Git 3.0 (BreakingChanges.adoc: no date yet) from the plan reported by GitLab and LWN. We try the main, SHA-256 and reftable defaults, safe.bareRepository, mandatory Rust, the commands being removed and why git checkout stays on Git 2.54, and end with a preparation checklist.

6 Nov 2026 8 min 2
Git 2.50–2.56: git history, Config-Based Hooks and git add --resolved
DevOps PART 28

Git 2.50–2.56: git history, Config-Based Hooks and git add --resolved

We go from Git 2.50 to the current 2.56: git history reword and split (fixup in 2.55, drop in 2.56), config-based and parallel hooks, stash export/import, pull.autostash and what happens on a conflict, git last-modified, git repo info, reflog drop, branch --delete-merged, add --resolved and the -h exit code change.

6 Nov 2026 9 min 2
Git 2.40–2.49: reftable, SHA-256, git replay and the New git config
DevOps PART 27

Git 2.40–2.49: reftable, SHA-256, git replay and the New git config

We look at the 2.40–2.49 period, when the foundations of Git 3.0 were laid, with real output: the reftable ref store and git refs migrate, where SHA-256 repos stand today, git config's get/set/unset/list subcommands, worktree add --orphan, git replay, safe.directory prefixes, git backfill and Rust's first step.

6 Nov 2026 9 min 2
Git 2.23–2.39: From checkout to switch and restore, Old Habits to New Ones
DevOps PART 26

Git 2.23–2.39: From checkout to switch and restore, Old Habits to New Ones

We put old and new side by side for what arrived between Git 2.23 and 2.39: the move from checkout to switch and restore, init.defaultBranch, pull's divergent branches error, sparse-checkout, maintenance, fsmonitor, ort and remerge-diff, rebase --update-refs, force-if-includes, safe.directory and SSH signing.

6 Nov 2026 11 min 4
Git Hooks and Commit Signing: From pre-commit to SSH Signatures
DevOps PART 25

Git Hooks and Commit Signing: From pre-commit to SSH Signatures

We write pre-commit and commit-msg hooks with real output, share them with the team through core.hooksPath, and try Git 2.54's config-based hooks and git hook list. Then we sign commits with an SSH key, verify them with an allowed signers file and look at what GitHub's Verified badge requires.

6 Nov 2026 11 min 2
Git bisect and git worktree: Finding the Bad Commit and Two Branches at Once
DevOps PART 24

Git bisect and git worktree: Finding the Bad Commit and Two Branches at Once

We find the commit that introduced a bug with git bisect's binary search: marking good and bad, bisect log and reset, automatic search by exit code with git bisect run, and exit 125. Then we use git worktree to make a hotfix in a separate folder without disturbing unfinished work, and look at worktree list/remove/prune and when it beats stash.

6 Nov 2026 9 min 2
Git Tags and Releases: Marking Versions, git describe and GitHub Releases
DevOps PART 23

Git Tags and Releases: Marking Versions, git describe and GitHub Releases

We mark releases with git tag: lightweight versus annotated tags, the tag object, semver, why push doesn't send tags, --tags versus --follow-tags, reading git describe output, GitHub Releases, deleting tags and why moving a published tag is dangerous.

6 Nov 2026 8 min 2
Git reflog: Bringing Back Lost Commits and Deleted Branches
DevOps PART 22

Git reflog: Bringing Back Lost Commits and Deleted Branches

We bring commits back with git reflog after an accidental reset --hard: HEAD@{n} versus HEAD~n, undoing the last merge with ORIG_HEAD, finding a deleted branch in the reflog, backing out of a rebase with the branch's own reflog, and why the reflog is local and expires.

6 Nov 2026 8 min 2
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 2
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 2
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 2
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 2
Blog Map