Re: Trimming 'deadheads' (TREESAME 2nd parent) from revision walks?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dscho,
On 05/10/2021 11:53, Johannes Schindelin wrote:
> 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}^

If I remember rightly, the ever-green script needs to go to special
lengths to ensure that it gets the topographic (DAG) sort order, rather
than the default chrono - time ordered commit searching, which was part
of the deadheads question.

I need to learn the dot trick to avoid the quoting needed for the spaces
in the commit message title! It always slips my mind. I've added a
pseudo alias for the command style (I can never remember what I named
it.. but its easy to look up all aliases..) I also never remember that
"Start.the" subject line..
>
> (Of course, you still have to find out the first-parent-treesame merge
> commits that you want to replace.)

I was thinking of cases beyond the current Git-for-Windows, that other
maintainers may start to use where keeping the 'deadheads' is a valid,
or even required, part of their real-world projects, hence the idea of a
`--deadheads` variant of 'first-parent'.
>
> 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}^

Useful.
>
> 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)`.

That's a useful clean up tip. Thanks!

>
> Ciao,
> Dscho
Thanks
Philip



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux