协慌网

登录 贡献 社区

是否有可能从另一个 git 仓库中挑选一个提交?

我正在使用一个 git 存储库,该存储库需要来自另一个不了解任何内容的 git 存储库的提交。

通常,我会HEAD@{x}进行选择,但是由于此.git对此 reflog 条目(不同的物理目录)一无所知,我该如何选择它,还是可以?

我正在使用git-svn 。我的第一个分支使用trunk git-svn ,下一个分支使用 Subversion 分支上的git-svn

答案

给出的答案是使用 format-patch,但是由于问题是如何从另一个文件夹中挑选,下面是一段代码来做到这一点:

$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k

(来自@cong ma 的解释)

git format-patch命令从其 SHA 指定的some_other_repo提交中创建补丁(对于单个提交,则为-1该补丁通过管道传递到git am ,后者在本地应用补丁( -3表示如果补丁不能干净地应用,则尝试三路合并)。希望能解释。

您需要将另一个存储库添加为远程存储库,然后获取其更改。从那里您可以看到提交,并且可以对其进行挑选。

像那样:

git remote add other https://example.link/repository.git
git fetch other

现在,您拥有所有信息,可以简单地执行git cherry-pick

有关在此处使用遥控器的更多信息: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

这是 remote-fetch-merge 的示例。

cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB

那么你就可以:

git cherry-pick <first_commit>..<last_commit>

或者你甚至可以合并整个分支

git merge projectB/master