Re: git-cherry-pick(1) -- path
- From
- Alejandro Colomar <alx@kernel.org>
- Date
- May 11, 2024, 11:46 UTC
- Message-ID
- <bpjfsabhstkbuvo6ksj3owoxvutgquripmqmqi63ykaquhky2u@r7mfrwucgnye>
- In-Reply-To
- <xmqqcypt61lo.fsf@gitster.g>
Hi Phillip, Junio,
On Fri, May 10, 2024 at 10:03:31AM GMT, Junio C Hamano wrote:
Show 16 quoted lines
> Phillip Wood <phillip.wood123@gmail.com> writes: > > >>> $ git format-patch --stdout -1 $ThatCommit -- $ThisPath | > >>> git am -3 > >> Hmmm, I hadn't thought of that; very interesting! > >> Although I have some concerns with git-am(1); basically that it's > >> almost > >> clueless when there's a conflict. > > > > "git am -3" should be fine here as you're guaranteed to have the > > necessary blobs available to create conflicts - this is what "git > > rebase --apply" does. > > Good thing to point out. "am -3" is just as good for this purpose > and "almost clueless" is a derogatory comment that requires an > apology ;-)
Huh, I am quite surprised by `git am -3`. I've tried it just now, and it's amazing. I certainly must apologize. :-)
I tried it yesterday, but the patches were from a different repo, and not available locally, so it really didn't do anything. But now I tried it within the same repo, and it's really nice!
Show 15 quoted lines
> > As far as the implementation goes I haven't thought too deeply but I > > suspect we'd want to create a couple of trees based on the commit we > > want to cherry-pick and its parent filtered by the pathspec and use > > those in the tree-way merge with HEAD. > > If we were to use the ort machinery, it may not be too bad to use > the pathspec only at the final writeout phase. That is, perform a > full cherry-pick in the in-core index, reset all the entries in the > in-core index back to HEAD that are outside the given pathspec, and > then write out the result to the working tree. That way, an old > change that was made to paths at the original location can be cherry > picked to a much newer tree after these paths have been moved to a > different location. Doing the same with the recursive machinery > would be missier but perhaps the more recent merge-tree that uses > the ort machinery to work purely in-core might be a good way to go.
I didn't understand the last part well, but I guess I may do when I start researching into it. :)
Apart from <builtin/revert.c>, do you recommend I look into any particular files?
Thanks!
And have a lovely weekend! Alex
-- <https://www.alejandro-colomar.es/> A client is hiring kernel driver, mm, and/or crypto developers; contact me if interested.