我在一个新项目中使用 Git,该项目有两个并行的——但目前处于试验阶段——开发分支:
master
:导入现有代码库加上一些我通常确定的修改exp1
:实验分支#1exp2
:实验分支 #2
exp1
和 exp2
代表两种截然不同的架构方法。在我走得更远之前,我无法知道哪个(如果有的话)会起作用。当我在一个分支中取得进展时,我有时会进行对另一个分支有用的编辑,并且只想 merge 这些。
将有选择的更改从一个开发分支 merge 到另一个开发分支,同时保留其他一切的最佳方法是什么?
我考虑过的方法:
git merge --no-commit
然后手动取消暂存大量我不想在分支之间共享的编辑。将常用文件手动复制到临时目录,然后通过
git checkout
移动到另一个分支,然后再从临时目录手动复制到工作树中。上述内容的变体。暂时放弃
exp
分支并使用两个额外的本地存储库进行实验。这使得手动复制文件变得更加简单。
所有这三种方法都显得乏味且容易出错。我希望有更好的方法;类似于过滤器路径参数的东西,可以使 git-merge
更具选择性。
最佳答案
tl;dr
git checkout source_branch -- path/to/file
# resolve conflicts if any
git commit -am '...'
我遇到了与您上面提到的完全相同的问题。但是我发现this在解释答案时更清楚。
总结:
检查要 merge 的分支的路径,
$ git checkout source_branch -- <paths>... Hint: It also works without `--` like seen in the linked post.
或有选择地 merge 帅哥
$ git checkout -p source_branch -- <paths>...
或者,使用重置,然后使用选项 -p
添加,
$ git reset <paths>...
$ git add -p <paths>...
最后提交
$ git commit -m "'Merge' these changes"
关于git - 我如何有选择地 merge 或从 Git 中的另一个分支中挑选更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449541/