我怎样才能将一个分支的特定文件合并到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.