RE: Merge selected files or folders

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

 



Classification - ISMS: Offen | VS: OFFEN



> -----Original Message-----
> From: Junio C Hamano <gitster@xxxxxxxxx>
> Sent: Thursday, March 21, 2024 6:51 PM
> To: Richard Kerry <richard.kerry@xxxxxxxxxx>
> Cc: git@xxxxxxxxxxxxxxx
> Subject: Re: Merge selected files or folders
> 
> Richard Kerry <richard.kerry@xxxxxxxxxx> writes:
> 
> > I'd like to merge only certain files, or folders, from another branch.
> > What command or options should I be looking at to get this done?
> 
> If you are using the verb "merge" in the way Git uses, then there is
> *no* option to do so and that is very much deliberate, as allowing such a operation
> will break your history.
> 
> A "merge" commit in Git records the fact that *all* changes that were done in each
> parent since the merged branches diverged have been considered and the tree
> recorded by the merge commit is the result.  Hence, if you later change your mind
> and "merge" other changes from the same branch, it will result in no change at all,
> by definition.
> 
> But if you are porting some changes made on another branch to the current
> branch, and then planning to record the result as a regular single parent commit,
> then there is no fundamental reason to forbid such an operation.  It is what cherry-
> pick ought to be able to do, even though I do not think it accepts a pathspec to limit
> currently.
> 
> Assuming a history of this shape:
> 
>       x---x---X (that other branch)
>      /
>     O---o---o---o---H	(current branch)
> 
> such a "cherry-pick" would essentially be applying all the changes lead to X since
> the histories forked at O on top of H:
> 
>     $ git checkout H
>     $ O=$(git merge-base X H)
>     $ git diff $O X | git apply
>     $ git commit -m "picked changes from branch X"
> 
> And if you want to limit the paths involved in the operation, the "git diff" step can be
> given a <pathspec> to limit the changes that are ported.
> 
>     $ git checkout H
>     $ O=$(git merge-base X H)
>     $ git diff $O X -- thisdir/ that/file | git apply
>     $ git commit -m "picked changes from branch X"

Isn't that the same as simply checking out the files/folders of "that other branch" and commiting the result ?

$ git checkout X -- this/dir that/file
$ git commit -m "picked changes from branch X"

Or am I missing something ?

> Teaching "git cherry-pick" to accept a pathspec and natively perform something like
> the above is left as an exercise.


Thanks,
Stefan




[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