Is it possible to cherry-pick a commit from another git repository?
The answer, as given, is to use format-patch but since the question was how to cherry-pick from another folder, here is a piece of code to do just that:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
Explanation from Cong Ma comment Aug 28 '14
git format-patch command creates a patch from some_other_repo's commit specified by its SHA (-1 for one single commit alone). This patch is piped to git am, which applies the patch locally (-3 means trying the three-way merge if the patch fails to apply cleanly).
You'll need to add the other repository as a remote, then fetch its changes. From there you see the commit and you can cherry-pick it.
Like that:
git remote add other https://example.link/repository.git
git fetch other
Now you have all the information to simply do git cherry-pick
.
When done, you may want to remove the remote again, if you don't need it any more, with
git remote remove other
More info about working with remotes here: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
Here's an example of the remote-fetch-merge.
cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB
Then you can:
git cherry-pick <first_commit>..<last_commit>
or you could even merge the whole branch(only if you really need to merge everything)
git merge projectB/master
You can do it, but it requires two steps. Here's how:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
Replace <remote-git-url>
with the url or path to the repository you want cherry-pick from.
Replace <branch>
with the branch or tag name you want to cherry-pick from the remote repository.
You can replace FETCH_HEAD
with a git SHA from the branch.
Updated: modified based on @pkalinow's feedback.
Here are the steps to add a remote, fetch branches, and cherry-pick a commit
# Cloning our fork
$ git clone [email protected]:ifad/rest-client.git
# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git
# Fetch their branches
$ git fetch endel
# List their commits
$ git log endel/master
# Cherry-pick the commit we need
$ git cherry-pick 97fedac
Source: https://coderwall.com/p/sgpksw