我已经阅读了关于在Git中合并的一些技巧:合并公共和私有分支,同时在两个分支和其他分支中保持某些文件完整,但没有找到解决方案.
在我的情况下,我觉得需要做相反的合并策略.在并行开发中,我必须在任意分支上保持一些文件相同.从另一方面来说,我不想做壁球或无提交合并,而差异很大,可能会破坏测试分支的当前状态.
我想要什么样的东西
git checkout testing
git merge config.xml -b development
要么 git merge config\*.xml -b development
我想这就像git merge-files ...
命令,但第二个文件是从分支传递的,而不是从文件系统传递的.可能吗?或者可能有一种解决方法?子模块?属性?
谢谢
mip*_*adi 49
你可以做几件事.
一,您可以挑选您想要的更改,这仅适用于一次提交.例如,如果只有触摸的变化config.xml
,你可以选择它
$ git cherry-pick $COMMIT_ID_YOU_WANT
Run Code Online (Sandbox Code Playgroud)
您也可以config.xml
从开发分支中获取:
$ git checkout testing
$ git checkout development -- config.xml
Run Code Online (Sandbox Code Playgroud)
这config.xml
将使您获得与开发分支中存在的版本相同的版本,但请注意,它不会引入文件更改的历史记录.
lum*_*idu 19
基本上你可以在这里阅读:http://www.gelato.unsw.edu.au/archives/git/0701/37964.html
简而言之,如果您只想应用由特定提交范围所做的更改(这也可以只是一次提交),只对一部分文件进行更改,则执行以下操作:
git diff commit1..commit2 filepattern | git apply --index && git commit
Run Code Online (Sandbox Code Playgroud)
这是一个包含逐步文档的存储库,以阐明部分合并的危险并显示正确的方法。
https://gitlab.com/bimlas/learning-by-testing-git-partial-merge/tree/doc
TL; DR:
合并必须是这样:分支机构的联合。如果您在不合并所有文件的情况下执行合并提交,并且您将尝试稍后合并相同的分支,则Git认为您在第一个合并提交中合并了所有内容,因此较早的提交无关紧要,它将跳过未合并的更改在第一次合并之前。
使用checkout
从一个分支复制到另一个文件:
git checkout BRANCH -- FILE
git commit -m "Partial merge"
Run Code Online (Sandbox Code Playgroud)
小智 5
可以对直接从 git-tree 中选取的文件进行合并。
我的建议是做类似的事情:
$ git ls-tree development -- config.xml
$ git show <blob-hash> > config.xml.development
然后得到共同的基础:
$ git ls-tree $(git merge-base HEAD development) -- config.xml
$ git show <blob-hash> > config.xml.base
最后:
$ git merge-file config.xml config.xml.base config.xml.development
不过,我没有对此进行测试。
使用像 zsh 这样的 shell,您可以避免将 blob 保存到临时文件中:
$ git merge-file config.xml =(git show <base-blob-hash>) =(git show <dev-blob-hash>)
归档时间: |
|
查看次数: |
39826 次 |
最近记录: |