我正在使用一个git存储库,需要从另一个git存储库提交,该存储库对第一个一无所知。
通常我会在reflog中使用HEAD@{x}进行筛选,但因为这个.git不知道这个reflog条目(不同的物理目录),我如何才能筛选它,或者我可以吗?
我使用git-svn。我的第一个分支使用Subversion repo中继的git-svn,下一个分支在Subversion分支上使用git-svn。
我正在使用一个git存储库,需要从另一个git存储库提交,该存储库对第一个一无所知。
通常我会在reflog中使用HEAD@{x}进行筛选,但因为这个.git不知道这个reflog条目(不同的物理目录),我如何才能筛选它,或者我可以吗?
我使用git-svn。我的第一个分支使用Subversion repo中继的git-svn,下一个分支在Subversion分支上使用git-svn。
当前回答
下面是一个远程获取-合并的例子。
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
其他回答
我的情况是,我有一个裸回购,团队推动,和一个克隆的旁边。Makefile中的这组行对我来说是正确的:
git reset --hard
git remote update --prune
git pull --rebase --all
git cherry-pick -n remotes/origin/$(BRANCH)
通过保持裸回购的主人是最新的,我们能够挑选对裸回购发布的建议更改。我们还有一种(更复杂的)方法来挑选多个分支来进行合并审查和测试。
如果“一无所知”意味着“不能用作遥控器”,那么这并没有什么帮助,但是当我在谷歌上搜索这个工作流时,这个SO问题出现了,所以我想我应该做出贡献。
对于这种情况,必须为一些本地化验证“精心挑选”提交。 对于相同的存储库签出,也可以是本地提交(即尚未推送到服务器)。
E.g.
Repo1类似于repo2 repo1的分支b1 - HEAD在本地进行了2次提交(包括commit_x)。 Repo2有分支bb1 -需要挑选commit_x。
为此,
$ CD repo2
Repo2 $ git获取<path_to_repo1>
Repo2 $ git cherry-pick <commit_x>
在上面的例子中,commit_x现在是可识别的并被提取(通过fetch的帮助)。
答案,正如给出的,是使用format-patch,但由于问题是如何从另一个文件夹中选择,这里有一段代码来做到这一点:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
来自conma评论14年8月28日的解释
Git format-patch命令从some_other_repo的提交中创建一个补丁 由其SHA指定(单独提交时为-1)。这个补丁是 管道到git am,它在本地应用补丁(-3表示尝试 如果补丁应用不干净,三路合并)。
您需要将另一个存储库添加为远程存储库,然后获取其更改。从那里您可以看到提交,您可以选择它。
像这样:
git remote add other https://example.link/repository.git
git fetch other
现在您已经有了所有信息,可以简单地进行git优选。
完成后,如果你不再需要它,你可能想要再次移除它
git remote remove other
更多关于使用遥控器工作的信息,请访问:https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
你可以在一行中完成,如下所示。希望你在git存储库中,需要精心挑选的更改,并且你已经签出了正确的分支。
git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533
#
git获取[分支URL][分支的cherry-pick from] && git cherry-pick[提交ID]