Git Rev News: Edition 140 (October 31st, 2026)
Welcome to the 140th edition of Git Rev News, a digest of all things Git. For our goals, the archives, the way we work, and how to contribute or to subscribe, see the Git Rev News page on git.github.io.
This edition covers what happened during the months of September and October 2026.
Discussions
Reviews
Aleksei Sviridkin sent a small patch to the mailing list. It fixed a bug
that made git push --force-if-includes reject valid forced pushes.
Some background about --force-if-includes
A plain git push --force overwrites the remote branch whatever it
points to, so it can throw away commits that someone else pushed in
the meantime. Option --force-with-lease is the safer alternative: the push
is refused if the remote branch no longer points to the commit that
the local remote-tracking ref (like origin/main) records.
That protection is defeated though when something, for example an
IDE, runs git fetch in the background. The remote-tracking ref then
gets updated without the user ever looking at the new commits, and
the lease check passes. To solve this, Srinidhi Kaushik added
--force-if-includes in Git 2.30 with commit 99a1f9ae10 (push: add
reflog check for “–force-if-includes”, 2020-10-03), after a
long patch series.
The push.useForceIfIncludes config option enables it by default.
With this option, Git checks that the commit at the tip of the remote
ref has been integrated locally at some point. To do this,
is_reachable_in_reflog() walks the reflog of the local branch. It
looks for that commit in the reflog entries, or failing that, for
entries that can reach it. As an optimization, the walk stops at
entries older than the newest entry in the reflog of the
remote-tracking ref, because the local branch could not have been
built on a remote commit before it was fetched.
The initial patch
Aleksei explained that the timestamp used for this cut-off is read by
a callback passed to refs_for_each_reflog_ent_reverse(). When the
remote-tracking ref has no reflog, the callback never runs, and the
variable holding the timestamp is never initialized.
With the “files” ref backend, a remote-tracking ref created by
git clone has no reflog until it moves. On Aleksei’s machine
(macOS, arm64) the value left on the stack was bigger than any real
timestamp. So the walk stopped at the very first entry, never reached
the “Created from” entry written when the branch was created, and the
push was rejected with “remote ref updated since checkout”, even
though nothing had changed on the remote.
The fix was a one-line change initializing the variable to 0. The
patch also added a test to “t5533-push-cas.sh”, which Aleksei warned
could pass “by luck” on other platforms. The patch had an
Assisted-by: LLM trailer before the Signed-off-by: trailer.
An Assisted-by: trailer side discussion
Junio Hamano, the Git maintainer, replied that the code change looked
good. He said the sign-off must be the last trailer, because the
author is “fully responsible for whatever LLM emitted”, and that
“LLM” on its own gave no useful information. He also suggested
moving test_when_finished up, so that cleanup also happens if the
setup commands fail. Junio was surprised that a bug from a six-year-old
change was only being noticed now. Aleksei answered that whether the
bug triggers depends on the build and the stack layout, not really on
the platform.
Aleksei said he had followed the Linux kernel rules for the trailer,
as Git’s guidelines didn’t cover it. Junio pointed to the AI section
in “Documentation/SubmittingPatches”. It says that the project “will
reject anything that looks AI generated” or that senders “don’t
understand or cannot explain”. Aleksei then cited Christian Brauner’s
kernel commit 816d9992d9ed (coding-assistants: simplify attribution).
It replaced model names in the kernel’s Assisted-by: trailers with
a bare “LLM”, because naming models “provides free advertising to
proprietary software companies”. He added that his patch had gone
through a router mixing models from three vendors.
Kristoffer Haugsbakk wondered why, when Git’s guidelines say nothing, the “fallback guideline becomes the one for an operating system kernel”. Junio added “We are not the kernel ;-)”. He also said he would rather not have patches with “walls of text” whose origin can’t be known, and that he preferred “human-readable explanations and known origin”. As a consequence, Aleksei dropped the trailer.
Kristoffer later commented on the “uncanny valley” feeling he got from the LLM-like phrasing in replies to reviewers, and joked that he would have expected LLM-assisted commit messages “to read more like Jeff King log messages”. After a “;-)” from Junio, Thomas Bachem offered to ask for that in his next reroll, and Weijie Yuan said he already fed “a few representative patch series from Peff” to an LLM in his toy projects.
Is zero the right fallback?
Meanwhile, Aleksei sent version 2 of the patch, which moved the sign-off last and fixed the test cleanup.
Junio asked why 0 was a reasonable fallback value, rather than “now”
or “2 weeks ago”, and what it means to pretend that the latest
remote-tracking reflog entry dates from 1970. He also suggested a
small rewording of the commit message.
Aleksei then sent
version 3.
Its commit message used Junio’s wording, and it argued that without a
reflog there is nothing to base a cut-off on. It said “now” would
bring the bug back, and a fixed age would cut the walk off too early
in some cases. It also dropped the Assisted-by: trailer.
A few hours later, Junio suggested that gc.reflogExpire, or 90 days
ago, would be “a lot more reasonable than year 1970”. Even an old,
enabled reflog normally has no entries older than that, as they get
expired.
Aleksei objected that reflog entries are only expired when git gc
or git reflog expire runs. He built a scenario where a 90-day
cut-off rejects a push that 0 lets through. Junio thought such
repositories would only exist for those who “consciously disable the
gc”, and that 0 would impose a slower full walk on everyone.
Aleksei disagreed again. A plain git clone with the “files” backend
creates no remote-tracking reflog, and git gc --auto only runs once
there are more than 6700 loose objects (the default gc.auto value),
so a quiet repository expires nothing. He also posted timings with
20000 reflog entries. The full walk only took longer, about 0.3s
instead of 0.07s, in a repository still holding entries older than 90
days. Junio found that this showed the gc expiration cut-off never
wasted more time. Aleksei agreed, but pointed out: “The cutoff is
faster than zero only where it gives the wrong answer.”
Two weeks later, Tyler Cipriani, who was working on his own
--force-if-includes fixes,
said he liked date=0. Both values give the right answer in most
cases, but the cut-off can give a wrong one, and “the wrong answer is
worse”. He described a simple scenario with default gc settings where
the cut-off fails: clone, start rewriting history, do nothing for 90
days, then finish and force-push. He noted that 0 also avoids having
to choose between gc.reflogExpire, per-ref settings or
gc.reflogExpire=never. Junio agreed that when a reflog has never
been expired, using all the available information always works better
than using a cut-off.
Polishing the commit message and the test
Tyler then reviewed version 3. He said the code looked right, and that a wrong rejection with advice to pull would push him “(pun intended)” to drop the config option and the feature altogether.
He measured the cost on linux.git with 2000 reflog entries: 15ms with
a commit-graph, but two minutes without one. That is because each
batched call to repo_in_merge_bases_many() walks the history from
scratch. He noted that doubling the batch size after each call
brought this down to 10s, a possible optimization for a separate
patch.
Tyler also found the last paragraph of the commit message hard to
read, and even technically wrong: it suggested that a walk stopped by
the cut-off skips the merge-base check. He found that without the
fix, the test still passed on his Linux x86_64 machine, where the
uninitialized value happened to be 2. It failed reliably only when
built with make CFLAGS_APPEND=-ftrivial-auto-var-init=pattern, so CI
would probably not catch a similar regression. He suggested using the
setup_src_dup_dst helper in the test, like the surrounding tests.
Junio noted that the patch had trivial textual conflicts in t5533 with
Tyler’s topic.
Aleksei sent
version 4
with a rewritten commit message that fixed the two inaccuracies
Tyler had found. It explained that the record of the last move of the
remote-tracking ref can be “never written, deleted, or expired by
gc”. The test now used setup_src_dup_dst and expired only the
remote-tracking reflog. Aleksei confirmed that it passed with both
the “files” and “reftable” backends.
Junio found both changes sensible, thanked Aleksei and Tyler, and said he would mark the patch for ‘next’.
Conclusion
The fix itself was a single line, but the discussion went well beyond
it. Reviewers asked why zero was the right value, and the patch was
then backed by concrete scenarios and measurements, ending with the
principle that a wrong answer is worse than a slow one. The thread
also showed that bugs caused by uninitialized variables can hide for
years, and that compiler options like -ftrivial-auto-var-init=pattern
help to reveal them. It also provided an opportunity to clarify the
project’s stance on Assisted-by: trailers and AI-assisted
contributions.
The patch was merged into the ‘master’ branch on October 6, 2026. It
will be part of the upcoming Git 2.98.0 release, and the release notes
say it will later be merged to ‘maint’ too. Tyler’s related
--force-if-includes fixes were still in ‘seen’ at the time of
writing.
Developer Spotlight: Pablo Sabater
Editor’s note: This edition features a retrospective interview with a contributor who contributed to Git through a mentoring program. We hope the reflections shared by the GSoC contributor will provide an insightful perspective that benefits the community. As always, we welcome your thoughts and feedback!
-
Who are you and what do you do?
I’m Pablo Sabater, a Computer Science and Engineering undergraduate from Spain. I study at the University of Murcia but I’m currently living in Lisbon studying at NOVA FCT. I’m into low-level systems programming, mostly C, apart from Git.
Apart from coding I really enjoy cooking.
This summer I was a GSoC contributor at Git, mentored by Karthik Nayak and Chandra Pratap.
-
How did you initially become interested in contributing to Git, and what motivated you to choose it as your GSoC project?
Paco told me about GSoC, and Git was one of the organizations that caught my attention the most, it’s a tool I use every day and I wanted to know how it really works. I started contributing around March 2026 with small patches (little time for the proposal deadline haha).
The project was completing remote-object-info for the
git cat-file --batch-command. It had already gone through Calvin Wan and Eric Ju, same as some series that I had merged at the beginning when I tried finding the best visual output as testing it would be “easier”, and I just like to see what I have worked on. That’s why I’ve also worked on the graph machinery. So, completing a command seemed very interesting and visual for me. -
How do you feel your contribution has impacted the Git community or the broader open source ecosystem?
Protocol v2 had the server side of object-info since 2021, but no client was using it. Now
git cat-file --batch-commandcan ask a remote for the size and the type of an object without downloading it. That’s useful for partial clones, large repos, and tools that only need metadata.However, sadly it is not an option that many forges have activated.
Outside of GSoC, I also added
--graph-lane-limitand visual root indentation togit log --graphand some tiny fixes. I don’t think they have huge impact but at least some?Maybe the best contribution is that when I’ve seen someone on the
#my-first-contributionchannel on Discord, I tried to review their patches quickly and help them out. -
Is there any aspect of Git that you now see differently after having contributed to it?
There is a lot of backward compatibility. Some parts are not very pretty to look at and now I get more interested in the commands I use.
-
How do you balance your contributions with other responsibilities like work or school?
Not as well as I’d have liked. Luckily I was in summer and I had no classes, but I tend to let things that I like absorb me. However I still enjoyed the summer with my friends, sometimes I worked in advance to not work in some days, and some other day I brought the laptop to camping.
-
Can you share how GSoC helped enhance your technical and non-technical skills (like communication, project management, etc.)?
Technically, I learned how Git works internally, and Git has some very good parts that I have also learned from and helped improve my C coding.
Non-technically, I improved how I review other people’s work.
-
What was your biggest takeaway or learning from GSoC that you now apply regularly in your work?
I was a frequent user of
git commit -m "", and after GSoC I enjoy making small commits with their full body and having linear histories on my own project (I even try to make my friends do the same). -
What was the biggest challenge you faced during your contributions to Git, and how did you overcome it?
Maybe fear of repercussions? I know it sounds ridiculous (more after meeting a lot of Git contributors). Everyone is so nice. In the beginning, though, the mailing list acts like an “evil filter”.
Regarding coding, I think usually things are easier when you start from scratch. This time, I was in a huge codebase of code that I didn’t know and had to pull a series not written by me from scratch.
-
Have you thought about mentoring new GSoC / Outreachy students?
Yes, I’d love to. I was planning to mentor Outreachy this year but I overestimated my time here in Lisbon and I had to drop out.
I hope to mentor in the future.
-
If you could get a team of expert developers to work full time on something in Git for a full year, what would it be?
I mean, everyone is already doing a lot of things, and I still don’t know a LOT of Git. I like to say that one doesn’t know what it lacks until they know what it has.
But I see interesting work on VFS and LFS, and I’d love good documentation throughout the codebase.
-
If you could remove something from Git without worrying about backwards compatibility, what would it be?
I don’t know, sorry.
-
What upcoming features or changes in Git are you particularly excited about?
I think that the one I’m most excited of is the pluggable backends. Even though I don’t work at any big corp that would use it, I’m sure that I’m going to have fun trying it.
-
What is your favorite Git-related tool/library, outside of Git itself?
b4, as it made the work of sending things to a mailing list so easy.
-
What is your toolbox for interacting with the mailing list and for development of Git?
I code on neovim as I like to keep most of my stuff on the terminal; to review others, I download the thread as
mboxand then use aerc to answer; to send my work I now use b4.One command that I didn’t know until recently that Git has on its codebase is
git clang-format --diff, for which I sadly don’t remember who told me about it. Before knowing about it, I always had style complaints on my series. -
How do you envision your own involvement with Git or other open source projects in the future?
I want to keep contributing to Git, become better at it and treat it as if it was my own project. I also want to get involved in other open source projects, for example I’m trying with a friend to build a proper e-ink simulator on top of open source hardware.
I see that Git, even though it is a huge project, the actual number of people that you see daily on the mailing list is in fact small. At Git Merge everyone knows each other. I want something like that.
And of course I would love to have an idea that leads into a big open source project with community.
-
What is your advice for people who want to start Git development? Where and how should they start?
I’d say that even if you are lazy, reading documentation will save so much time in the long run that it’s worth it. The people on the mailing list are very nice and to take their time, there is no joy in rushing things.
-
Would you recommend other students or contributors to participate in the GSoC, Outreachy or other mentoring programs, working on Git? Why? Do you have advice for them?
Totally, it’s one of the best experiences that I’ve had.
I want to mention Tian, Jayatheerth and Siddharth, the other 3 GSoC contributors to Git this summer, and of course Karthik and Chandra, my mentors.
Other News
Various
- Apple’s git still trusts the compromised eMudhra certificates (as of 28th October) by Dennis Jackson. The article provides workarounds for the problem.
- JJ Con 2026 Talks are Up
by Scott Chacon on Butler’s Log (GitButler blog).
The post includes a quick overview of each of them.
- GitButler helped host Git Merge 2026 in Lisbon, with which JJ Con 2026 was organized alongside (co-located). Other sponsors and hosts included Google Open Source and ERSC (East River Source Control).
- Jujutsu (
jj) is a Git-compatible version control system written in Rust, which was first mentioned in Git Rev News Edition #85, and most recently in Edition #139.
- Redesigning source control at Anthropic about Scion, their in-house version control system.
- Anthropic’s Scion is heavily inspired by Mononoke
and More on Anthropic’s Scion ripping off Mononoke
by Rain on their Sunshowers blog.
Since then, sufficient attribution
has been added to Anthropic’s blog post.
- Mononoke is the server built for Meta’s Sapling Source Control System, meant to scale up to accepting thousands of commits every hour across millions of files. Sapling was first mentioned in Git Rev News Edition #93.
- An outsider’s perspective on Scion and Mononoke by Varun Gandhi.
- Anthropic Threw Away Git. What Broke First Is the Part I Can’t Stop Thinking About. by Jackie Chen on their blog (Jackie Chen’s IT Workshop).
- A Git Forge Without a Center by Georg Friedrich on Entire’s Blog, about launching Entire, which is a Git forge for agent-human collaboration.
- Everyone is doing Git on S3 wrong by Enroute (where they build a highly performant Git server, written in Rust and backed by object storage).
- We want you to build the next Git platform on Cloudflare by Dina Kozlov, Dillon Mulroy, and Zebulon Piasecki: a followup to Artifacts: versioned storage that speaks Git.
- So long, Spokes: GitHub rewrites storage to restore reliability, just in time for agentic hordes by Joab Jackson in The Register.
- Migrate your site to the new git-pages backed Codeberg Pages now. We’re sunsetting Codeberg Pages v2, announcement by Andreas Shimokawa (Codeberg e. V.). Codeberg Pages v2 will be shut off completely on 2026-12-31.
- GhostAction Compromises About 1,900 GitHub Accounts, Targets Over 30,000 Repositories by Ravie Lakshmanan on The Hacker News.
- GitHub Actions workflow lockfiles in public preview.
- GitLab warns of max severity code execution vulnerability by Sergiu Gatlan on Bleeping Computer.
Newsletters
- This Week in Source Control: 28 October 2026
by Andrew Nesbitt.
This first issue covers the fortnight since 11 October.
Easy watching
- Git Merge ‘26
talks, starting with “SHA-256 at a Hyperscaler” by Emily Shaffer,
are available on YouTube, on the GitButler App channel.
- You can also read notes about the talks, distilled by Johannes Schindelin, alias Dscho, from the recording and its subtitles, mentioned in the previous edition of Git Rev News.
- JJ Con ‘26
talks (which was co-located with Git Merge ‘26),
starting with “jj Tool & Config Ecosystem” by André Arko,
are available on YouTube, on the GitButler App channel.
- The above-mentioned jj Tool & Config Ecosystem - André Arko talk [38:37], also available as the Beyond jj: config & tools ecosystem post by the author, and as slides on SpeakerDeck, was also mentioned in the previous edition of Git Rev News.
Light reading
- Git 3.0’s upcoming SHA-256 default will be a costly mistake
by Scott Chacon on Butler’s Log (GitButler blog).
The article cites Linus Torvalds, who said in 2005:
“I really think people should not consider the sha1 the “security”. The real security is in distribution.”
It mentions problems with submodules, with existing links, and with external libraries
(go-git, libgit2, JGit, Dulwich, gitoxide / gix) not being SHA256-ready,
and instead proposes independent tree hash headers in tag objects
(like Colin Waters’ git-evtag,
which was mentioned in Git Rev News Edition #60).
See also:- Looking forward to Git 2.56 — and 3.0 by Jonathan Corbet on LWN.net, where switch to SHA-256 in Git 3.0 is mentioned (that article was mentioned in Git Rev News Edition #139).
- SHA-256 at a Hyperscaler - Emily Shaffer talk from Git Merge ‘26.
- Johannes Schindelin’s (Dscho’s) summary of the Git Contributors’ Summit 2026 (also mentioned in previous edition) talks about SHA-256 support across the ecosystem being a blocker for v3.0 release, and SHA-1/SHA-256 interoperability work not being on the list.
- Breaking Changes: Git 3.0 documentation.
- Migrating Git repos to SHA-256 by Exa Skye on their personal website: Exa’s Corner.
- I got targeted
(in a project inquiry, with Markdown files provided via Dropbox folder…
with
.gitdirectory and activepost-checkouthook, to trigger when switching branches as suggested), by Frank Wiles on FrankWiles.com. - Making git hooks visible: A terminal prompt technique for zsh to see the status of git hooks. by Ned Batchelder on his blog. Inspired by Frank Wiles’ post linked above.
- Making git hooks visible in fish shell by Chris Rose on his Off By 1 blog. Inspired by Ned Batchelder’s post.
- Git is still awful, a rant (mainly) about Git error messages by Luke Plant.
- Scanning 7.25 Million Public Repositories on China’s Largest Git Platform (Gitee) for Secrets using both TruffleHog by TruffleSecurity and Kingfisher by MongoDB. By Ben Zimmermann, Independent Security Researcher, on MongoDB Builder Blog.
- Editing changelogs so people can actually use them
by Natália Kováč on DEV.to, talks about what needs to be extracted from
git log, and recommends a way of of structuring it, following the Keep a Changelog convention (which was mentioned in Git Rev News Edition #42). - Make git worktrees cheap for agents by Stanislav Panferov on his blog.
- Git worktrees using too much disk space? Copy-on-write can help.
by Kale Myrk on DEV.to, about Parhel,
a small Git extension in Rust that creates worktrees using copy-on-write (CoW).
- Compare Riftri - Lightweight Git workspaces for parallel development, using native copy-on-write backends, also written in Rust. It was mentioned in Git Rev News Edition #139.
- Compare Copy-on-write git worktrees by Josh Bleecher Snyder,
about creating
git-cow-worktree, a drop-in replacement forgit worktree addthat uses copy-on-write for the worktrees. Written in Go. It was mentioned in Git Rev News Edition #135. - See also Zit, a Git extension for many developers and coding agents changing one repository at the same time, with copy-on-write workspaces instead of worktrees, changes checked against what landed meanwhile, and each change’s reason kept.
- But please note that Git worktrees are not an isolation boundary for coding agents, as written by by Alex Chaplinsky on Fletch Blog, mentioned in Git Rev News Edition #138, and the article below.
- Worktrees do not remove the collision. They move it to merge time. by Nick Woodhead on Foremerge Blog.
- Ship Now, Finish Later:
gh stackKills Branch Gymnastics by Giorgio Boa on DEV.to.
Thegh stackextension was first mentioned in Git Rev News Edition #134, then as private preview. - A Missing Git{Lab,Hub} Feature: ‘grouped PRs’, a cousin to the recent ‘stacked PRs’ feature. By Zac Pullar-Strecker on their blog.
- What’s Wrong with GitHub by Jacob Bachmeyer and Richard Stallman.
- Spin up your own git forge with Mochi by Jeremy Magland on his blog.
- Pros and Cons of Self-hosting a Public Git Forge by Josh Sherman on Joshtronic, his personal website.
- The federated code forge
by Anirudh on Tangled Blog.
Tangled.sh is a new social-enabled Git collaboration platform built on top of the AT Protocol / ATProto (which powers BlueSky), first mentioned in Git Rev News Edition #125, and most recently in Edition #138. - Reading git status without running git by Spencer Uresk on the GitMon website. How a macOS menu bar app reads the index, refs and pack files directly, and uses the index’s cache-tree extension to avoid reading HEAD’s tree at all in the common case where nothing is staged.
- Manage Your Dotfiles with Nothing but Git, a guide from the terminal ninja website.
- Using multiple git remotes for true distributed version control by Otto Kekäläinen on Optimized by Otto blog.
- On Git Refs by Alex Kladov (matklad), on improving his mental model of Git.
- Maybe a better way to track the release history of a Git repo by Mark Dominus (陶敏修) on The Universe of Discourse blog.
- 55,181 Commits in 7 Days: Why We Moved Health Checks Out of Git by Derik Evangelista on Syntasso Blog. Sometimes there’s such a thing as too much of GitOps.
- How big is a Git commit? by Dave Gauer, a card in Dave’s Virtual Box of Cards. Short answer: It depends (checked with some little experiments).
- Is There Life Outside of Git?
by Daniele Paletti. Mentions Jujutsu (
jj), Google’s Piper, Meta’s Sapling, and Antropic’s Scion. - You Can Hide Languages From GitHub’s Languages Bar
using the
linguist-detectablegitattribute. by Nelson Figueroa on his blog. - Using Codeberg’s git-pages deployment with git lfs
by Bastian Greshake Tzovaras on his blog.
Mentions Codeberg shutting down its old Codeberg Pages server
and migrating
to a
git pages-based alternative. -
The GitHub wiki is an anti-pattern (2022) by Michael Heap (@mheap) on his blog.
- Rare Git Hashes: Seeking alpha in the git log
by Dean Keinan on Finch Engineering blog.
Examines the question of how rare are (in Git repositories) SHA-1 hashes that embed
English words, repeated characters, repeated sequences of characters,
palindromes, and ascending and descending sequences.
Warning: includes live service, takes large amount of memory. - lgit: source control for the AI era,
about a version control system where the storage medium is a neural network
(replacing the storage layer with an MLP (Multi-Layer Perceptron)).
By Nico Brenner (with code).
Partly an experiment, partly a joke.
- Compare and contrast to a joke tool: git-llmfs - a Git filter that uses local LLM summaries as a compression mechanism for code files to save space in a Git repository (mentioned in Git Rev News Edition #137).
- git-afterlife: I Held a Séance for the Original flask.py by Pau López Núñez on DEV.to. The article talks about a small command-line tool, created for Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine that digs every deleted file out of a repository’s history, writes some statistics about its history and an epitaph and last words for the file, the latter written by an open-weight model (Gemma 3).
Scientific preprints
- Vedant Shah et al.: “GitSwarm: Decentralized Compounding Inference”. Many agents, one shared repository, and work that keeps building on itself. arXiv:2610.04862.
Git tools and sites
- LearnGit.io v2 is here.
A rethink of LearnGit from the ground up that makes progression easier & more intuitive.
LearnGit.io teaches Git
with animated visualizations of Git internals, added quizzes,
step-by-step interactive scenarios, and type-it-yourself exercises
with a terminal emulator showing real commands and a visualization of the full Git tree,
including branch pointers and commits.
The first two modules are open to anyone without an account.
LearnGit.io is free for students & educators.
LearnGit.io was mentioned in Git Rev News Edition #108, #127, and #136 (in passing).- Created by Jack Lot of The Modern Coder YouTube channel.
- FluxGit Git School is a free set of nine guided Git exercises and a playground, available in eleven languages. It uses an in-memory simulated repository, without accessing local files or connecting to real Git remotes. Exercises cover misplaced commits, reset recovery, deleted branches, detached HEAD, conflicts and divergent branches. The simulator supports a subset of Git commands. No account or installation is needed to practise. Each exercise connects to the relevant written guide where one exists; existing video tutorials are linked alongside them.
- Git-ing Over It is a browser-based
game that hands you a real broken repo and makes you figure out what to run,
the way you actually learn Git at work. Built by Ketuman Vishwakarma.
Progress lives only in the browser; it never syncs or leaves your device.
- Compare, for example, git-game and git-game-v2: a terminal game designed to test your knowledge of Git commands (mentioned in Git Rev News Edition #5), Learn Git Branching: also a browser-based visual and interactive way to learn Git on the web (first mentioned in Git Rev News Edition #30), and Oh My Git!: an open source game about learning Git, written using the Godot game engine (first mentioned in Git Rev News Edition #72).
- Git Game: a multiplayer card game whose rules are Git.
Ship commits to a shared
main. Pull before you push, blame the bugs you can’t see, and survivegit push --force. Free, in your browser, with nothing to sign up for. You can play against the bot, or in a room with your friends. - Gitualize is a web app to help you learn Git visually. Every Git command is animated step by step on the same small project — so you see what it really does to your files, your history and your remote.
- The Animated Git Cheat Sheet
is a website that uses git-sim
to build an animated Git cheat sheet you can customize,
with just the commands you need.
Git Sim was first mentioned in Git Rev News Edition #95. - fremforge is an European alternative to GitHub and GitLab:
Git hosting and CI/CD on one platform. One flat price, per seat, in EUR.
Hosted in Germany, uses Forgejo.
- See also other software forges hosted in Europe (and advertising it): Gitoro (mentioned in Git Rev News Edition #138), Pushin.eu in invite-only beta and CodeFloe with free functionality gated by quotas (both mentioned in Edition #139).
- Haxy is a self-hosted Git forge
that is local-first and text-based. Haxy has a text user interface (TUI)
that you can view in your terminal or on the web.
It stores project metadata (issues, pull requests, and discussions) in the repo,
and provide a TUI that is served over SSH, in addition to a web UI.
Written in Zig, under MIT license (Expat).
See also Haxy.net is live! — HAXY (git forge) devlog [7:31] video on YouTube. - Mochi Forge is a self-hosted Git forge, GitHub-shaped: repository browsing, in-browser editing, issues, pull requests, releases, Actions-style workflows, static sites, and Git LFS. One Node process, no database, nothing installed beside it but Git. Written in TypeScript, under Apache 2.0 license.
- walgitgub is walgit with a GitHub Enterprise Server facade — a Git server that is one binary in front of an object store (e.g., S3 or GCS bucket). Written in Rust, under MIT license.
- grubby is a static site generator for Git repos written in Ruby. Under GPL 3.0 license. This project is in an alpha state.
- NeoLeaf is the online collaborative LaTeX editor
that charges you absolutely nothing.
Unlimited real-time collaboration, native version control (Git) on GitHub or Codeberg,
and compilation on your own machine (with WASM / WebAssembly),
with no waiting queues, no artificial timeout limits, and no monthly fees.
- Compare with Aldine, a self-hosted, open-source LaTeX collaboration platform, an Overleaf alternative built for speed and simplicity (mentioned in Git Rev News #139).
- Promptuaria is a place
to write, publish and reuse software specifications as Markdown.
Each published version is immutable and has a permanent address;
Drafts stay private to their author until published.
Promptuaria is an early public service. Expect rough edges.
- Somewhat related: Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl (2025)
by Birgitta Böckeler on martinFowler.com, a part of the
Exploring Gen AI series.
Beside Kiro by Amazon, Spec Kit by GitHub, and Tessl by Tessl AI Ltd, mentioned in this article, there are now also spec-coding website, OpenSpec framework by Fission AI, specs.md framework by fabriqua.ai, SpecDeck service, and probably more…
- Somewhat related: Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl (2025)
by Birgitta Böckeler on martinFowler.com, a part of the
Exploring Gen AI series.
- memsaga: version control and two-way sync for your AI coding agent’s files, starting with Claude Code: what it remembers, how you configure it, and anything else you choose. Written in Rust, under MIT license.
- ADRs4AI (Architectural Deliberation Records for Artificial Intelligence)
is the template (repository starter),
a VS Code extension,
and Awesome ADRs4AI list.
The idea is to keep the thinking, the most valuable byproduct
of the collaboration between a human and an AI.
- But see git reset --hard, about restarts and learning from failure: keeping what it learned but “cleaning head”, mentioned in Git Rev News Edition #139.
- Mnemosyne is a version control for AI agent memory. Mnemosyne gives agent memory what Git gives code: commits, branches, merge, blame and bisect. Written in Rust and Python, under Apache 2.0 license.
- Git for Global Law by Lexifina: the law of every country as one Git history, each country’s record a submodule, every commit one law taking effect. An expansion of the same for the US Code. Semantic, searchable law on a global scale.
- Words To Data is a tool
that lets you and your agents manage the The U.S. Code, the laws that change it,
and the court opinions that cite it, as one dataset.
words_to_datais a Rust command and library. It builds a SQLite dataset from public sources, and it answers questions about that dataset. SLEUTH-pi is the official agent. It runs in the pi coding agent. Under MIT or Apache-2.0 license, at your option (dual-licensed). - Crenox is a statically compiled, zero-dependency Git pre-commit secret scanner and credentials detector written in Go, under AGPL 3.0 license. It automatically blocks commits of API keys, SSH private keys, cloud credentials, database connection strings, and other sensitive material before they are recorded in version control history. An alternative to Gitleaks (first mentioned in Git Rev News Edition #36), truffleHog (first mentioned in Edition #23), betterleaks, and git-secrets (first mentioned in Edition #25), focusing on lower resource utilization and local workflow integration.
- Gitby is a real-time coordination layer around Git.
It shows who is working on which file (after claiming it),
so your team can hand files over before two people edit the same one.
A file someone else holds is read-only in every editor, so nobody changes it by accident.
Gitby runs in your terminal (as TUI tool) and on the website. Supports GitHub.
Paid service, with 3 teammates per team in a free tier.
- Compare with the GitLive extension
for Visual Studio Code, JetBrain IDEs, Cursor, Windsurf, Trae, Antigravity, etc.
It provides preemptive merge conflict detection,
with gutter indicators in the editor
showing the lines that have been changed on other branches,
while the repository view compares your branch against all others
without needing to fetch.
GitLive is free for open-source projects; there is also a free plan with merge conflict detection limited to the 5 most recent branches, and no real-time sharing (you can share snapshots of your working tree changes), as compared to the premium plan.
GitLive was first mentioned in Git Rev News Edition #77 (as then a Visual Studio Code extension), and then in Edition #82.
- Compare with the GitLive extension
for Visual Studio Code, JetBrain IDEs, Cursor, Windsurf, Trae, Antigravity, etc.
It provides preemptive merge conflict detection,
with gutter indicators in the editor
showing the lines that have been changed on other branches,
while the repository view compares your branch against all others
without needing to fetch.
- AngKorGit is a native Git client for everyday work, with support for macOS, Windows and Linux. The engine is libgit2 through Rust, the window is the webview (not full web browser). Written in TypeScript and Rust, using the Tauri framework, under MIT license.
- Diffy is a native Git diff viewer built in Rust with GPUI Kit.
Review live changes, keep worktrees together,
and read GitHub pull requests without checking out a branch.
macOS is in beta; Windows and Linux are early alphas with limited hardware testing.
Under MIT license.
Mentioned in passing in Git Rev News Edition #132. - gitst: a real-time, glanceable Git status monitor for the terminal. Gitst shows in real-time what is happening to a Git repository (local as well as remote) as it happens: changed files, commits, pushes, fetches, merges, and rebases. It typically sits in one pane of a multi-pane terminal setup (using tools like Dantty, tmux, screen, herdr, WezTerm, iTerm2, etc.). Written in Rust, under MIT license.
- uhegit provides Git status for your entire workspace — see what’s uncommitted, what’s unpushed, and what task to do next across all your projects. Written in Rust, under MIT license.
- git-found is a Git credential helper for people with more than one GitHub account. It checks which of your accounts can reach a repo and gives Git that account’s token. Written as a Bash shell script, under MIT license.
git-cl(Git Changelists) is a command-line tool that brings changelist support to Git, inspired by Subversion. It adds a pre-staging review layer that lets you organise modified files into named groups before staging or committing. Changelists can be stashed selectively and promoted to dedicated branches — enabling a late-binding branching workflow, where the branch decision follows the code, not the other way around. Written in Python, under BSD-3-Clause license. Available as git-changelists on PyPI.- gsw — Git Smart Switch is an fzf-powered branch picker sorted by recent commits, with live log preview, remote toggle, and safe delete. A single Bash script, under MIT license.
- git-dupe is a CLI tool to manage second Git repository for the files in a checkout that are yours and not the project’s: notes, plans, scratch scripts, editor settings, the instructions and skills you keep for a coding agent. The files stay where their tools expect them in the working tree. Their history lives in a repository of their own. Written in Rust, under MIT license.
- grip is a
per-pushGit hook that won’t let you push code you can’t explain. It quizzes you on your own diff before allowing the push. Works with Claude Code, Codex, Cursor. Written in Python, under BSD-3-Clause license. - pretty-git-tree is a tool and a service (with examples) that turns a slice of Git history into different types of diagrams: arches, delta, Feynman diagram (particles), qubits, etc. Written in TypeScript, under MIT license.
- Phloem is an on-line service where you can watch a repository grow like a slime mold. Paste a public GitHub repository (optionally providing a GitHub token), or upload a Git log instead (with specified invocation): folders become junctions, files become food, and every commit feeds the network. Written in TypeScript, under MIT license.
- StateTrack provides
Infrastructure Change Intelligence — Git history for live servers.
A config edit, a package upgrade, a stopped IIS app pool,
or a row flipped in
settings_dbis captured as a reviewable diff with an actor attached, seconds after it happens. Dashboard for GitDevOps. Written in Go, under Apache 2.0 license. - monolog is a keyboard-driven personal backlog that lives in a Git repo you own — no cloud, no account, plain-text data. Written in Go, under MIT license.
- Hold My Docs (HMD) is a browser-based place to write, find and share documentation: a personal knowledge base, a team’s internal guides or a public docs site. Pages are Markdown files in a Git repository, so you can back them up or edit them with other tools. Written in Go, under MIT license.
Releases
- Git for Windows v2.56.0(4), v2.56.0(3), v2.56.0(2)
- go-git 6.0.0-beta.1
- gitoxide 0.61.0, 0.60.0
- Grit 0.5.26, 0.5.25, 0.5.24, 0.5.23, 0.5.22, 0.5.21, 0.5.20, 0.5.19, 0.5.18, 0.5.17, 0.5.16, 0.5.15, 0.5.14, 0.5.13, 0.5.12, 0.5.11, 0.5.10, 0.5.9, 0.5.8, 0.5.7, 0.5.6, 0.5.5, 0.5.4, 0.5.3, 0.5.2, 0.5.1
- Gitea 28.2.0, 28.1.0
- Gerrit Code Review 3.14.5, 3.15.0-rc0, 3.15.0-rc1, 3.15.0-rc2, 3.15.0-rc3, 3.15.0-rc4
- GitHub Enterprise 3.22.2, 3.21.7, 3.20.9, 3.19.13, 3.18.16
- GitLab 19.6, 19.5
- GitKraken 12.6.1, 12.6.0
- GitHub Desktop 3.6.10, 3.6.9, 3.6.8, 3.6.7
- lazygit 0.66.2, 0.66.1, 0.66.0
- GitButler 0.23.1, 0.23.0
- delta 0.20.1, 0.20.0
- difftastic 0.72.0
- Kinetic Merge 1.24.0, 1.23.0, 1.22.2, 1.22.1, 1.22.0, 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.2, 1.21.1, 1.21.0, 1.20.0
- git-credential-oauth 0.18.0
- git-lfs 3.8.1
Credits
This edition of Git Rev News was curated by Christian Couder <christian.couder@gmail.com>, Jakub Narębski <jnareb@gmail.com>, Markus Jansen <mja@jansen-preisler.de> and Kaartic Sivaraam <kaartic.sivaraam@gmail.com> with help from Pablo Sabater, Okhuomon Ajayi, Björn Fock, Štěpán Němec, FluxGit, Jack Lot, and Spencer Uresk.