一尘不染

如何在 Git 中选择性地合并或选择来自另一个分支的更改?

javascript

我在一个新项目上使用 Git,该项目有两个并行的——但目前是实验性的——开发分支:

  • master: 现有代码库的导入以及我通常确定的一些修改
  • exp1: 实验分支 #1
  • exp2: 实验分支#2

exp1exp2代表两种截然不同的架构方法。在我走得更远之前,我无法知道哪个(如果有的话)会起作用。当我在一个分支中取得进展时,我有时会进行一些对另一个分支有用的编辑,并且只想合并那些。

将选择性更改从一个开发分支合并到另一个分支的最佳方法是什么?

我考虑过的方法:

  1. git merge --no-commit然后手动取消暂存大量我不想在分支之间通用的编辑。
  2. 手动将公共文件复制到临时目录中,然后git checkout移动到另一个分支,然后将更多手动文件从临时目录中复制到工作树中。
  3. 上面的一个变种。暂时放弃exp分支并使用两个额外的本地存储库进行实验。这使得手动复制文件更加简单。

所有这三种方法似乎都很乏味且容易出错。我希望有更好的方法;类似于过滤器路径参数的东西,它会使git-merge选择性更强。


阅读 314

收藏
2022-02-21

共1个答案

一尘不染

我遇到了与您上面提到的完全相同的问题。

概括:

  • 查看要合并的分支的路径,

```
$ git checkout source_branch –

Hint: It also works without -- like seen in the linked post.
```

  • 或选择性地合并帅哥

$ git checkout -p source_branch -- <paths>...

或者,使用 reset 然后使用选项添加-p

    $ git reset <paths>...
    $ git add -p <paths>...
  • 最后提交

$ git commit -m "'Merge' these changes"

2022-02-21