创建包含2个分支之间目录差异的新分支

时间:2014-07-21 20:58:13

标签: git git-branch

我有一个有多个分支的项目。我可以使用此命令查看branch2上的提交,但不能查看branch1上的提交:

git log branch1..branch2 path/to/dir

我想创建一个branch1的新分支,其中包含执行上述命令时显示的提交。

例如:

在branch1上:

git log path/to/dir
  commit1
  commit2

在分支2上:

git log path/to/dir
  commit1
  commit2
  commit3
  commit4    

然后我上面提到的命令将返回以下内容:

git log branch1..branch2 path/to/dir
  commit3
  commit4

我想找到一种方法来创建一个基于branch1基础的新分支,让我们称之为integration-branch,其中包含这两个提交。

git log可能不是这里正确的第一步,但它有助于我说明我想要完成的任务。我认为有git merge的高级形式允许将分支部分合并到另一个分支。

我的另一个选择是先从integration-branch创建branch1,然后从branch2合并path/to/dir

的更改

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望创建一个新的分支,该分支从branch1开始,仅包含 来自branch2的提交path/to/dir。最好的方法是使用git cherry-pick。以下是我将如何做到这一点:

// create a new branch to work on
$ git checkout -b newbranch branch1
// grab the commit IDs we want and cherry-pick them
$ git cherry-pick $(git log --pretty=format:%H --reverse branch1..branch2 -- path/to/dir)

如果未被选择的提交尝试对那些违反补丁前提条件的文件进行更改,因为已经跳过了干预提交,则path/to/dir以外的文件可能会发生冲突。解决这个问题需要通过有趣的提交,生成仅限于对有趣文件所做的更改的补丁,并按顺序手动应用这些补丁,如果我们在这里讨论很多提交,这可能会有点单调乏味......