Re: Trimming 'deadheads' (TREESAME 2nd parent) from revision walks?
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Oct 5, 2021, 10:53 UTC
- Message-ID
- <nycvar.QRO.7.76.6.2110051244000.395@tvgsbejvaqbjf.bet>
- In-Reply-To
- <01fe28d8-2887-bc42-c91b-c3237b5186a7@iee.email>
Hi Philip,
On Sat, 18 Sep 2021, Philip Oakley wrote:
> Is there a method within `git rev-list` to trim side branch merges where > the merge's tree is identical to the first parent's commit-tree?
Yes, there is, but it is not as easy as a command-line option: `git replace`.
For example, to pretend that the most recent merging-rebase in Git for Windows was (almost) a regular rebase, you replace the "Start the merging-rebase" commit with a graft that only keeps its first parent:
git replace --graft HEAD^{/^Start.the} HEAD^{/^Start.the}^(Of course, you still have to find out the first-parent-treesame merge commits that you want to replace.)
If you want to do that only temporarily, you can use a throw-away namespace instead of the refs/replace/ one:
export GIT_REPLACE_REF_BASE=refs/philipoakley/
git replace --graft HEAD^{/^Start.the} HEAD^{/^Start.the}^Before:
[...] | > | | 23e09ef1080 Merge 'remote-hg-prerequisites' into HEAD |/| | | | > | | 0221569db1c Always auto-gc after calling a fast-import transport | > | | f189282dcfc remote-helper: check helper status after import/export | > | | 158907ceb87 transport-helper: add trailing -- | > | | 6e34e54050c t9350: point out that refs are not updated correctly |/ / / > | | 7b2b910b080 Start the merging-rebase to v2.33.0 |\ \ \ | |_|/ |/| | | > | 508bb26ff90 (tag: v2.33.0-rc2.windows.1) Merge pull request #3349 from vdye/feature/ci-subtree-tests [...]
After:
[...] | > | | 23e09ef1080 Merge 'remote-hg-prerequisites' into HEAD |/| | | | > | | 0221569db1c Always auto-gc after calling a fast-import transport | > | | f189282dcfc remote-helper: check helper status after import/export | > | | 158907ceb87 transport-helper: add trailing -- | > | | 6e34e54050c t9350: point out that refs are not updated correctly |/ / / > | / 7b2b910b080 (replaced) Start the merging-rebase to v2.33.0 | |/ |/| > | 225bc32a989 (tag: v2.33.0, upstream/maint, mirucam/maint, gitgitgadget/snap, gitgitgadget/maint) Git 2.33 [...]
You can always clean up _all_ replace objects via `git replace -d $(git replace -l)`.
Ciao, Dscho