我有一个有多个分支的项目。我可以使用此命令查看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
答案 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
以外的文件可能会发生冲突。解决这个问题需要通过有趣的提交,生成仅限于对有趣文件所做的更改的补丁,并按顺序手动应用这些补丁,如果我们在这里讨论很多提交,这可能会有点单调乏味......