Looking forward to Git 2.56 – and 3.0
Recorded: Sept. 22, 2026, 2:51 a.m.
| Original | Summarized |
Looking forward to Git 2.56 — and 3.0 [LWN.net] LWN.net ContentWeekly EditionArchivesSearchKernelSecurityEvents calendarUnread commentsLWN FAQWrite for us
User: | Log in / Looking forward to Git 2.56 — and 3.0 Welcome to LWN.net The following subscription-only content has been made available to you By Jonathan CorbetSeptember 18, 2026 What's in Git 2.56 The Git 2.56 release contains something over 700 non-merge commits; it $ git history drop commit-id This command will cause the identified commit to be removed from the The git status The git refs There are a number of minor usability tweaks. The new Beyond that, there is the usual long list of bug fixes, refactorings, and After 2.56? In early September, Git maintainer Junio Hamano asked the community what the This is an important question, because 3.0 will contain a number of Git has long included defenses against the known SHA-1 attacks, and few Non-experimental support for SHA-256 has existed in Git since the 2.42 release in 2023, That said, carlson has posted one Another significant change that has been waiting for the 3.0 release is the This mechanism works, but becomes increasingly inefficient as the number of The Git 2.45 release As it turns out, libgit2 will not be a blocker here; Patrick Steinhardt let it be known that he has Finally, as mentioned by carlson, there is the Rust question. The project After listing these concerns, carlson suggested that they probably should I think anyone else who is not already extremely far along on Similarly, I am not aware of anyone who is seriously undertaking That led to his conclusion that, most likely, designating the next release What will actually happen has not, yet, been announced publicly; that is to post comments GitHub Posted Sep 18, 2026 14:34 UTC (Fri) Ah, the fact that GitHub doesn't support SHA-256 almost makes me want to go and convert all my repos so they are harder to mirror to GitHub. 😛 GitHub Posted Sep 18, 2026 17:34 UTC (Fri) There was the https://git-merge.com conference yesterday, brian carlson showed a GitHub SHA-256 repo: https://github.com/bk2204/talk-rust-in-git Sorry/glad to be the bearer of bad/good news! GitHub Posted Sep 18, 2026 23:49 UTC (Fri) That was one of the stranger experiences I've had with reading slides from a conference presentation . . . Very interesting to read (and I suspect the actual talk would have been more so) - it's not often you get to see that sort detail about Rust/C interoperability in such a well-established project. GitHub Posted Sep 19, 2026 14:19 UTC (Sat) I tried but couldn’t find the slides there; the site is charming but a bit of an eyesore. Could you give a link? Thanks! GitHub Posted Sep 20, 2026 0:19 UTC (Sun) Clone the repo, and follow the instructions in the README - you'll need some ruby tooling (specifically the bundle/bundler tool, which should be part of any distro ruby packages), and you'll need to be willing to install a bunch of shit into the local directory, but the end result is an HTML file you can load with the actual presentation. GitHub Posted Sep 20, 2026 1:20 UTC (Sun) Wow, that’s a … remarkably unhelpful way to distribute slides. I might just for the novelty, but wow. GitHub Posted Sep 20, 2026 11:10 UTC (Sun) I think you can just open presentation.adoc GitHub Posted Sep 21, 2026 7:13 UTC (Mon) It's not very different from how most FOSS is distributed: in its preferred form of modification, i.e. source code :-) Submodules with different hash types Posted Sep 18, 2026 16:42 UTC (Fri) Are there any plans for supporting submodules with different hash algorithms from the parent repository? I've been using SHA256 for most new repos, but I had to convert one back to SHA1 because I needed to include an existing GitHub repository as a submodule. Submodules with different hash types Posted Sep 21, 2026 4:46 UTC (Mon) That could be tricky because it would make git tree objects (~= directories) a hybrid of SHA-1 and SHA-256 objects? Just thinking out loud sorry. Submodules with different hash types Posted Sep 21, 2026 10:03 UTC (Mon) This is the first thing that blew up for me when trying the repo linked from this comment. This was due to an unusual workflow (every repo I clone gets added to a parent module that indexes everything), but it is the kind of thing that would block popular repos from making the transition to sha256. One wishlist item I should have raised long ago Posted Sep 18, 2026 17:06 UTC (Fri) I've long wanted a way to distinguish integration branches from development branches. We currently enforce this by making everyone use fork-based workflows so as to not pollute the main repository (finally acknowledged by forges with their "only copy the HEAD branch" checkbox…that also ignores tags or any active release-maintenance branches). Only recently the obvious solution is to have refs/heads/ for integration branches and refs/topics/ for development branches. One wishlist item I should have raised long ago Posted Sep 18, 2026 18:34 UTC (Fri) I'm not sure I follow the logic here - a branch is a branch, no? The notion of "integration" and "development" branches is a higher-level process distinction, not a technical one. It doesn't quite seem right to embed that high-level distinction into the VCS. One wishlist item I should have raised long ago Posted Sep 18, 2026 19:05 UTC (Fri) Effects this would have: It might not have to be enforced, but if there was the space to have another top-level namespace of refs to do so, defaults would still work well. One wishlist item I should have raised long ago Posted Sep 18, 2026 19:35 UTC (Fri) This looks more like a forge concept than a low level git concept to me. One wishlist item I should have raised long ago Posted Sep 18, 2026 21:24 UTC (Fri) Ok, but I've come to prefer having roots of at least the data model in the base instead of forcing interaction through the forge to enforce things like this. One wishlist item I should have raised long ago Posted Sep 19, 2026 0:44 UTC (Sat) Base git is the plumbing, not the porcelain. There are porcelain pieces nowadays, but they don't define git's model. One wishlist item I should have raised long ago Posted Sep 19, 2026 8:50 UTC (Sat) Yeah, but it's helpful if the plumbing lets you consistently implement a model that can work regardless of the specific porcelain individual developers prefer. For instance it would be helpful to be able to mark branches as "this is going to rebase or otherwise have history changes" versus "I promise not to rewrite this branch's history". Then the porcelain can default to warning or protecting you from accidentally doing things you didn't intend, flag up the difference in its UI, and so on. One wishlist item I should have raised long ago Posted Sep 19, 2026 4:52 UTC (Sat) No-rewind enforcement based on "is integration" instead of doing server-side name-based enforcement Given that you propose "is integration" to ultimately resolve to a ref name prefix check (i.e. "is refs/heads/"), it seems to me that you are suggesting to replace server-side name-based enforcement with... server-side name-based enforcement? :-) One wishlist item I should have raised long ago Posted Sep 20, 2026 0:16 UTC (Sun) Yes, the server would, ultimately, still be the enforcer. But your tools can say "hey, that rebase you did looks fishy; did you mean to create a topic instead of rebasing all of release-1.x onto main?" before you push. One wishlist item I should have raised long ago Posted Sep 21, 2026 5:13 UTC (Mon) Your definition of "integration branch" still feels vague but now I wonder whether jj's "[im]mutable" commits would help in your use case? https://news.ycombinator.com/item?id=42938561 PS: every time something is missing or awkward in jj, you can find it fixed in jj ;-) Except the "all your projects/bases are belong to us" Google CLA - jj's only major regression compared to git :-( One wishlist item I should have raised long ago Posted Sep 21, 2026 11:40 UTC (Mon) I think the core aspect that's missing currently is having the remote able to provide configuration information about its policies with respect to naming of its branches and acceptable operations for them. Last I heard, there isn't a suitable trust level for information that may be from a malicious server but that you'd like to pay attention to anyway. refs vs reftables Posted Sep 19, 2026 1:26 UTC (Sat) What’s the reftables equivalent for 'echo commitid >.git/refs/heads/foo'? I found some plumbing-or-below things over the years that make working with git much easier (this one in particular is nice for resetting a branch, whether checked-out or not, to a previous commit). refs vs reftables Posted Sep 19, 2026 7:26 UTC (Sat) git update-ref on leaving behind Posted Sep 19, 2026 1:27 UTC (Sat) I’ve got to make it known that GNU CVS is still here for y’all on platforms without Rust, and that it will not be taking either Rust or “AI” slop. -- de-facto CVS maintainer on leaving behind Posted Sep 19, 2026 7:35 UTC (Sat) Presumably, to people who have been using Git for the past 15+ years and want to avoid Rust, a no-Rust Git fork would be far more useful than a completely different VCS. on leaving behind Posted Sep 19, 2026 13:17 UTC (Sat) To people who have been using git and want to keep using it, and happen to be on a platform without Rust, the most useful thing would be a port of Rust. Which would be welcome. on leaving behind Posted Sep 19, 2026 16:41 UTC (Sat) The 2.99.x releases will be maintained long term without the need for rust. on leaving behind Posted Sep 19, 2026 18:45 UTC (Sat) I am happy hear that you exist! Is there an inkling of a time plan for when the 1.12 branch will leave preview status and be declared stable? /Waited 20 years. Or am I looking at the wrong repository when I look at savannah.gnu.org? on leaving behind Posted Sep 19, 2026 19:27 UTC (Sat) If I remember correctly, he never got access to the savannah stuff and just maintains it in Debian [1]. [1] https://tracker.debian.org/pkg/cvs on leaving behind Posted Sep 21, 2026 13:49 UTC (Mon) Yeah, the Savannah stuff did not work out, and I couldn’t handle Windows anyway, so I’m maintaining it in MirBSD and Debian. I’ve been on the 1.12 series since… 2004 or so? but did not merge the unstable changes past 1.12.13 because I got regressions when testing them. (I should look around the other distros to see if they have worthwhile patches, again, some day.) on leaving behind Posted Sep 19, 2026 21:32 UTC (Sat) I salute you, cousin. I'm on Subversion and will stay on it forever. on leaving behind Posted Sep 21, 2026 13:50 UTC (Mon) That… certainly takes dedication. But if it works for you… on leaving behind Posted Sep 21, 2026 16:38 UTC (Mon) I remember one day when I typed "cvs -d yesterday -d today", and CVS responded "I know nothing about yesterday. I know nothing about today." Quite a philosophical sentiment, and rather startled me before I realized what I'd done wrong. git add --resolved Posted Sep 19, 2026 7:51 UTC (Sat) From the announcement: Tha last sentence is what makes me happy. git add --resolved Posted Sep 20, 2026 0:10 UTC (Sun) That's awesome to see. Requested for vim-fugitive here. git add --resolved Posted Sep 20, 2026 17:21 UTC (Sun) I would love for this to be the default behavior for git add in 3.00... And an opt-in default for now through a config option, please (hopefully it already has this, can't check right now) Yellow cards Posted Sep 19, 2026 14:04 UTC (Sat) I can't believe nobody's yet commented on the pun > Slowing down development can be a yellow-card-level annoyance, leading to a desire to do something about the refs. Usually we're limited to hurling abuse at them from the stands ... now we can send patches! Yellow cards Posted Sep 19, 2026 15:04 UTC (Sat) Now there's an idea, `git refs yellow-card [rule]` to quickly make a hook to give a warning but allow the operation, `git refs red-card [rule]` to quickly make a hook to deny the operation... Yellow cards Posted Sep 19, 2026 16:21 UTC (Sat) Having those sub commands exist and do anything at all would be a hilarious Easter egg. --delete-merged Posted Sep 20, 2026 10:02 UTC (Sun) The new --delete-merged option to git branch will remove local branches that have been merged into their remote tracking branches. I'm really looking forward to this, so I can drop my own local scripts for doing this. Merge commits can't be that hard to edit Posted Sep 20, 2026 11:01 UTC (Sun) [git history drop] still refuses to work if the history contains merge commits I thought “How hard could it be?” and wrote a concept (link not guaranteed to exist in the future): #!/bin/sh I probably just added another pitfall on top of what git-filter-branch already has, but whatever!
Copyright © 2026, Eklektix, Inc. |
The Git 2.56 release introduced several incremental improvements, including the addition of the drop subcommand to the experimental git history toolbox, which aims to remove commits from history while replaying subsequent commits, although this feature currently encounters issues with merge commits. Furthermore, the git status command now suggests git pull commands to update behind branches, improving user workflow, and the git refs command gained new subcommands to manipulate references at a lower level, including create, delete, update, and rename operations. Usability tweaks included the introduction of the --delete-merged option for local branches merged into their remote tracking branches, and improvements to conflict resolution with git add by only staging files where conflicts have been explicitly resolved. Beyond these specific features, the release included standard bug fixes, refactorings, and performance enhancements, suggesting a solid release while prompting a discussion about future development priorities. The anticipation for Git 3.0 is driven by significant, long-standing architectural decisions, most notably the transition from the SHA-1 hash function to SHA-256 by default, which addresses concerns over the perceived weakness of SHA-1 for repository integrity. While Git has provided support for SHA-256 since 2023, the full transition has been hindered by interoperability challenges, particularly concerning major hosting platforms like GitHub, where support for SHA-256 remains incomplete. This transition is predicated on the critical importance of using a more secure hashing mechanism to prevent potential history modifications. Another major architectural change slated for Git 3.0 is the implementation of the reftable mechanism, which seeks to enhance performance and space efficiency in storing references. Git currently stores references in a file-based system, which becomes inefficient when dealing with repositories containing a large number of references, such as the Android repository which has over eight hundred thousand refs. The reftable mechanism, introduced in Git 2.45, uses a binary file optimized for faster access and better space efficiency. While this change should not introduce visible consequences for typical Git users, it raises potential concerns for external software packages accessing Git repositories, such as libgit2. However, developers have indicated that support for SHA-256 and reftables is being integrated, suggesting the transition should be manageable. Discussions surrounding the future of Git also highlight several developer wishlist items that touch upon the separation between core plumbing and user-facing features. There is a desire to introduce a finer distinction between integration branches and development branches, possibly through ref naming conventions, to inform potential history modification behaviors such as no-rewind enforcement for integration branches. Furthermore, there is ongoing discussion about the role of Rust within the Git project, where trials exist but mandatory adoption for building Git is not yet finalized for the next major release. There is also a debate regarding submodule support with mixed hash types, where developers have expressed concerns that enforcing a uniform hash standard might complicate workflows for repositories that must reference both SHA-1 and SHA-256 objects. Overall, the consensus among contributors suggests that proceeding with the 3.0 release is the most pragmatic choice, allowing the project to move forward while acknowledging that some legacy repositories or specific workflows may continue to operate with older mechanisms. |