From: Taylor Blau <me@ttaylorr.com>
To: git@vger.kernel.org
Subject: [NOTES 03/11] The future of history rewriting - rebase, replay and history (+Change-IDs)
Date: Mon, 6 Oct 2025 15:18:37 -0400 [thread overview]
Message-ID: <aOQWDdVn4wDeZtlH@nand.local> (raw)
In-Reply-To: <aOQVeVYY6zadPjln@nand.local>
Topic: The future of history rewriting
Leader: Phillip Wood
11:30am-12:00pm PT
* Number of methods of history rewriting
* What do we want the future UI and operations to look like and be easy
* Want good commit histories
* JJ always in Elijah's edit mode demo, always interactive rebase.
* Always easy to rewrite commits.
* Always rebase descendants
* Use commands instead of verbs on rebase command
* Git would have a hard time adopting the ‘always rebasing' model
* For new users, git rebase is too complicated for simple use cases.
* Top level commands to easily do common operations
* ‘Git history'?
* Git history vs git replay
* Replay is plumbing used by server.
* History is porcelain used by user.
* Elijah - Building on rebase depends on sequencer
* Underpinnings more important than naming
* Lots of backwards compatibility assumptions
* Hooks and dependencies are pervasive, hard to clean up.
* When update-refs was added, it broke hooks
* Don't want to keep doing that.
* Wants to move beyond sequencer (git history uses sequencer)
* Sequencer frequently updates the work tree, not desirable
* Git history can move to use Git replay
* A cleaner version of git history would be nice so others can try it out
* Git replay is lacking features needed for git history
* Trying landing experimental version with sequencer underpinnings
* No promise of compatibility
* Phillip - users noticed when he broke Sequencer Hooks
* Disable hooks with flags?
* Way forward - land UI then iterate on underpinnings?
* Sequencer depends on shell parseable state files
* Lots to cleanup
* Minh - does this help solve problem of server rewriting history (ie force
push), leaving clients with incompatible forks?
* Out of scope
* Maybe change id is the more relevant conversation
* Conversation ended up on ChangeID
* Change ID loses predecessor tracking, which is more precise
* Hard to propagate without Mercurial style logs
* Mercurial predecessor graphs are independent of commits
* Change IDs would also help with first class conflicts
* Finding range-diffs is cheaper
* Range-diffs used fairly widely
* Git, rust, most mailing list flows
* Change IDs useful for tracking across repos, bugs, etc.
* Why are change IDs stalled in the mailing list?
* Disagreement on tracking predecessors
* Requires a protocol change
* Sending predecessors over protocol has lots of implications
* Gitster - disagreement on what it means to be a predecessor
* Parent? Cherrypick?
* Brian - changeId should be deterministic. Reject non-well formed ids
* Workflows rely on repetition
* ChangeIds should be optional, disableable.
* May track too much information unintentionally across commits, projects.
* Gitster - needs to be possible to expose changeId, predecessor without
exposing private information about private repos.
* ChangeID exposes less than predecessors do
* JJ can't access predecessors from ChangeID
* When rewriting commits, maybe we don't want the predecessor to be
viewable (eg secret keys)
* JJ can bump changeId when rewriting
* Gerrit keeps ChangeID in commit body
* Rebase and Cherrypick don't support arbitrary key:value pairs in commit
body
* ChangeID should propagate to be useful
* Eg across mailing list
* Can Git more generally and globally support headers in the commit?
* ChangeID should be more 1st class than other headers.
* Hard for client to tell when a ChangeID should change.
* Recent JJ commits were pushed with ChangeIDs
* Colleague branched off. Rewriting ids would have been useful.
* Squashes, amends etc lead to ambiguity about which ChangeID to keep.
* JJ keeps the parent.
* Gitster thinks it would be nicer for ChangeIDs to be kept even when
there are 2.
* When commits split, the children get 2 new ChangeIDs instead of keeping
old one.
next prev parent reply other threads:[~2025-10-06 19:18 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-06 19:16 Notes from the Git Contributor's Summit, 2025 Taylor Blau
2025-10-06 19:18 ` [NOTES 01/11] SHA-256 and interoperability work Taylor Blau
2025-10-06 19:18 ` [NOTES 02/11] First-class conflicts in Git? Taylor Blau
2025-10-06 19:18 ` Taylor Blau [this message]
2025-10-06 19:18 ` [NOTES 04/11] Rust Taylor Blau
2025-10-06 19:19 ` [NOTES 05/11] Pluggable object databases Taylor Blau
2025-10-06 19:19 ` [NOTES 06/11] Repository maintenance long-term goals Taylor Blau
2025-10-06 19:19 ` [NOTES 07/11] Change-ID Header in Git Taylor Blau
2025-10-06 19:20 ` [NOTES 08/11] Resumable fetch / push Taylor Blau
2025-10-06 19:20 ` [NOTES 09/11] Git 3.0 Taylor Blau
2025-10-06 19:20 ` [NOTES 10/11] How can companies respectfully engage contractors to work on Git? Taylor Blau
2025-10-06 19:20 ` [NOTES 11/11] Conservancy 2025 updates Taylor Blau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aOQWDdVn4wDeZtlH@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).