【问题标题】:Merging diff between two git branches and applying it to working copy合并两个 git 分支之间的差异并将其应用于工作副本
【发布时间】:2012-12-30 07:55:51
【问题描述】:

我有一个开发存储库和一个部署存储库。部署代码时,代码库从 dev 中签出,rsync'd 到部署工作副本,并提交到部署存储库。因此,这些存储库是独立的,但相似。

在 dev 上,我有一个分支。我想将该分支“应用”到部署工作副本。换句话说,我想将分支上的所有提交(不包括合并)重播到部署存储库(如果可能,在一次提交中),或者在分支和主服务器之间进行差异并将其应用于部署工作副本。

我认为类似的 svn 命令应该是:

svn merge $SVN_REPO/trunk $SVN_REPO/branch/dev_branch deploy_dir

... deploy_dir 甚至不需要是工作副本。

这可能吗?

【问题讨论】:

  • 只需添加另一个远程存储库并执行常规合并?
  • 有一些存储库异常使这复杂化,包括错误的 rebase。尝试常规合并最终会导致几乎每个文件都发生冲突。

标签: git merge branch


【解决方案1】:

一种方法是从另一个 repo 获取分支:

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

【讨论】:

  • diff/patch 方法效果很好,因为我想忽略一些祖先异常。由于添加了一些图像,因此我使用了 git diff --binary c1 c2 > something.patch
  • 有趣的是没有“git merge --ignore-ancestry”或者类似上面svn命令的东西。
  • @Tim 是的,合并不起作用。你应该试试cherry-pick。
  • 补丁方法效果很好!我认为它更简单。 (但保存到主目录而不是 git 目录中的某个位置)
  • 救命答案!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2016-08-25
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2013-12-02
相关资源
最近更新 更多