我怎样才能将一个分支的特定文件合并到Git中的另一个分支

我有一个Git仓库中的2个分支,让我们打电话给他们,开发和testing。 我在单个文件somecode.js中进行了更改。 两个分支都改变了一些code.js。 这两个分支有显着的分歧(但可控),所以直接的“合并”是不够的。

我已经尝试http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/但它不合并两个文件的内容。 你基本上只是写在文件,而不是实际合并文件的内容。

我也试过了:

git checkout -b newbranch git checkout test somecode.js git commit -m "somecode changes from newbranch" git checkout dev git merge newbranch 

 git checkout -m test somecode.js 

(我真的很希望-m合并,但它似乎没有为我工作…)

我以为我接近我所需要的,但后来我意识到,它只是快速转发意味着它没有合并的提交,它在testing中写在原始文件。

所以,重申一下,我怎样才能将一个分支的特定文件合并到另一个分支,而不用在我使用git合并的分支上写文件。

我想你喜欢用

 git checkout -p 

在你的情况

 git checkout dev git checkout -p test somecode.js 

你可以交互地应用差异。

 git checkout dev git show test:somecode.js > somecode.js.theirs git show $(git merge-base dev test):somecode.js > somecode.js.base git merge-file somecode.js somecode.js.base somecode.js.theirs 

通过这种方式,您可以手动将testing分支上的一些code.js三向合并到dev分支上的somecode.js中。

或者..您可以创build一个临时分支,并进行所需的更改并从中进行壁球合并。 这是'git的方式'够了吗? 🙂

 git checkout -b test/filtered $(git merge-base dev test) git diff ..test -- somecode.js | git apply git add -- somecode.js git commit -m "Updated somecode.js" git checkout dev git merge --squash test/filtered git branch -D test/filtered 

我认为git merge-file是你正在寻找的。 从手册页:

 git merge-file incorporates all changes that lead from the <base-file> to <other-file> into <current-file>. The result ordinarily goes into <current-file>. git merge-file is useful for combining separate changes to an original. Suppose <base-file> is the original, and both <current-file> and <other-file> are modifications of <base-file>, then git merge-file combines both changes.