Junio C Hamano <gitster@xxxxxxxxx> writes: > Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: >> On Wed, Apr 17 2019, Giuseppe Crinò wrote: >> >>> The feature I'm asking is to add an extra-step during rebasing, >>> checking whether there's a reference to a commit that's not going to >>> be included in history and asks the user whether the heuristics is >>> correct and if she wants to update those references. >>> >>> Scenario: it can happen for a commit message to contain the ID of an >>> ancestor commit. A typical example is a commit with the message >>> "revert 01a9fe8". If 01a9fe8 and the commit that reverts it are >>> involved in a rebase the message "revert 01a9fe8" is no longer valid >>> -- the old 01a9fe8 has now a different hash. This will most likely be >>> ignored by the person who's rebasing but will let the other people >>> reading history confused. >> >> This would be useful. Done properly we'd need some machinery/command to >> extract the commit id parts from the free-text of the commit >> message. That would be useful for other parts of git, e.g. as discussed >> here: >> https://public-inbox.org/git/xmqqvaxp9oyp.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxx/ > > That's a helpful input. > > But in general we do not have an infrastructure to systematically > keep track of "this commit was rewritten to produce that other > commit", so even if a mention of an old/superseded commit can be > identified reliably, there is no reliable source to rewrite it to > the name of the corresponding commit in the new world. > > For that mapping, we'd need something like the "git change/evolve" > Stefan Xenos was working on, which hasn't materialized. Well, what about limiting changes and rewriting only to the commits being rewritten by [interactive] rebase? I mean that we would rewrite "revert 01a9fe8" only if: a.) the commit with this message is undergoing rewrite b.) the commit 01a9fe8 is undergoing rewrite in the same command We could use the infrastructure from git-filter-branch for this. It is serious limitation, but that might be good enough for Giuseppe Crinò use case. Though for example there is a question what to do if referred-to commit (01a9fe8 in the example) is simply dropped, or is gets split in two? Ask user? Another possibility would be to provide a command line option to rebase which would automatically generate replacements (in git-replace meaning) from old pre-rebase name to new post-rebase name (assuming no splitting, no dropping commits). This would make references just work... well, as long as refs/replace/* are in place (they are not copied by default). On the other hand some of our performance-improving features, like the commit-graph, do not work if there are replacements. Best, -- Jakub Narębski