仅合并 git 分支中的增量更改

Merge only delta changes in git branch

我们有 2 个 git 分支 - master 和 dev。 master 包含要部署到生产环境的文件,dev 只包含需要修改的文件。

在任何时候,master git 分支都会有 10 多个文件,而 dev 分支只有 1 个。

现在,问题是如果我们从 dev 合并 master,它会删除所有文件并只保留 dev 分支中可用的 1 个文件。

我们正在寻找的是保持所有来自 master 的文件不变,只更新来自 dev 的 1 个文件(类似于 rsync)。

知道我们如何在 git 中实现增量合并吗?

从本地 master 创建一个新分支,然后将文件检出到 dev 分支

$ git checkout master    # checkout master
$ git checkout -b dev2   # checkout new branch called 'dev2' with master history

$ git checkout dev -- <file-path> # checkout/update the file from 'dev' branch

现在,在 dev2 分支中你有

untouch all files from master and update only 1 file from dev

好像dev所有的文件都有,后来有一段时间只保留了1个文件,其他的都删了。

当您想应用从 devmaster 的提交时,您可以使用 git cherry-pick ${commit_from_dev}.

如果您打算使用 git merge,您应该从一开始就将 dev 创建为孤立分支。换句话说,dev 在创建时不应与 master 共享任何历史记录。

# at the point of creating dev
git checkout --orphan dev master
git rm ${unwanted_files}
git commit -m 'init dev'

# the first time to merge dev
git checkout master
git merge dev --allow-unrelated-histories