假设我在我的主分支上有以下文件
$ git checkout master
$ cat truth.txt
The Earth is flat及其在某些分支上的更新版本(基于master)
$ git checkout magellan-dev
$ cat truth.txt
The Earth is a globe现在,我希望将分支magellan-dev合并到master中,但将所有文件都更改为具有不同名称的新文件。看起来就像
$ git checkout master
$ git merge megellan-dev --some-magic-flag
$ ls
truth.txt truth.txt.magellan-dev我为单个文件找到的解决方案是手动重命名该文件并签出前面的文件。
$ git checkout master
$ git merge magellan-dev
$ mv truth.txt truth.txt.magellan-dev
$ git checkout HEAD^ truth.txt
$ git add truth.txt truth.txt.magellan-dev 但是对于更大数量的文件来说,这是很糟糕的概括。我怎样才能做到这一点?
发布于 2019-05-23 17:20:32
吉特没有任何东西可以做这件事。
您可以通过使用git read-tree在索引中进行合并来处理某些情况,而不需要解决任何冲突的更改。但是请注意,在某些情况下,'s 3-way merge只会选择某个文件的两个端点版本之一:如果某个文件F的合并基版本(插入索引的槽#1中的树#1 )与另外两个文件(暂存槽2或3)中的一个匹配,并且与另两个暂存槽中的F版本不匹配,则git read-tree将将这三个版本折叠到一个单一阶段--零槽,接受修改后的文件。
换句话说,考虑到truth.txt的两个不同内容的示例,我们首先需要知道:合并基版本是怎么说的?如果合并基本版本的truth.txt与两个分支提示版本中的一个完全匹配,那么所有Git合并操作都将自动接受另一个版本。只有当这三种情况不同时,Git才会将这三种情况保留在索引中,这样您就可以使用Git的内置助手来达到您想要的结果。
如果这与你的愿望不匹配,你就不得不建立自己的程序来处理各种各样的树木。请注意,您可以创建自己的临时索引并使用git read-tree来填充它,然后对您使用的多个临时索引文件(当然还有实际的索引文件)使用git ls-files --stage来比较实体。这为您提供了一种快速判断truth.txt在任何两个索引文件中读取的树中是否相同或不同的方法。
(当然,您可以不使用任何Git的内部组件来完成所有这些工作:只需在单独的工作树中查看有问题的提交,并比较工作树文件。)
https://stackoverflow.com/questions/56272706
复制相似问题