合并两个Git分支之间的差异并将其应用于工作副本

7
我有一个开发仓库和一个部署仓库。在部署代码时,会从开发仓库检出代码库,将其同步到部署工作副本中,并提交到部署仓库。因此,这些仓库是分离但相似的。
在开发仓库中,我有一个分支。我想要将该分支“应用”到部署工作副本中。换句话说,我想要重播分支上的所有提交(不包括合并)到部署仓库(如果可能的话,一次提交),或者获取分支和主干之间的差异,并将其应用到部署工作副本中。
我认为类似的svn命令如下:
svn merge $SVN_REPO/trunk $SVN_REPO/branch/dev_branch deploy_dir

“deploy_dir”甚至不需要是一个工作副本。
这种可能性存在吗?

1
只需添加另一个远程仓库并执行常规合并即可吗? - zerkms
有一些存储库异常情况正在使这个问题变得复杂,包括错误的变基。尝试常规合并会导致几乎每个文件都出现冲突。 - Tim Trinidad
1个回答

19

一种方法是从其他仓库中获取分支:

cd <deploy-path>
git remote add devel <devel-path>
git fetch devel

git cherry-pick devel/master...devel/branch  # Assuming your branch is based on master

另一种方法是创建一个补丁,然后应用它:
git diff commitid1 commitid2 > something.patch
cd deploy
git apply something.patch

1
差异/补丁方法运作得非常完美,因为我想忽略一些祖先的异常。由于添加了一些图像,所以我使用了 git diff --binary c1 c2 > something.patch - Tim Trinidad
有趣的是,Git 没有类似于上面 SVN 命令中的 "git merge --ignore-ancestry" 或类似的命令。 - Tim Trinidad
@Tim,合并不起作用。你应该尝试使用cherry-pick。 - nishantjr
1
补丁方法非常有效!我认为它更简单。(但是保存在主目录而不是git目录内部) - Brian Hong
1
救命之答案!! - hunter_tech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接