合并分支并保留旧版本时,如何重命名更改的文件?

时间:2019-05-23 09:59:01

标签: git branch git-branch git-merge

假设我的主分支上有以下文件

char file[80];
sprintf(file,"%s%s",name,extension);

及其某个分支上的更新版本(基于$ 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

但是,对于大量文件而言,这很不好概括。我该如何实现?

1 个答案:

答案 0 :(得分:1)

Git并没有内置任何功能。

您可以使用'timezone' => env('TIME_ZONE', 'UTC'), 处理索引中的一些情况,而无需解决任何冲突的更改。但是请注意,even git read-tree's 3-way merge在某些情况下只会选择某个文件的两个端点版本之一:如果某个文件 F的合并基础版本(将树#1插入索引的插槽#1中) 匹配其他两个之一(临时插槽2或3),并且不匹配 other F 的版本在两个暂存槽中,git read-tree会将三个版本折叠成一个零级零槽,并保留修改后的文件。

换句话说,给定您的示例中git read-tree有两个不同的内容,我们首先需要知道:合并基础版本怎么说?如果{{ 1}}与两个分支提示版本之一完全匹配,那么 all 的Git合并操作将自动获取另一个版本。只有当这三个都不同时,Git才会将所有三个都保留在索引中,以便您可以使用Git的一些内置帮助程序来达到所需的结果。

如果这与您的需求不符,则您将不得不构建自己的程序来处理各种树木。请注意,您可以创建自己的临时索引并使用truth.txt进行填充,然后在所使用的许多临时索引文件(当然还有真实索引文件)上使用truth.txt来比较实体。这为您提供了一种快速的方法来确定git read-tree在读入任何两个索引文件的任何两棵树中是相同还是不同。

(当然,您可以不使用Git的任何内部组件来完成所有这些工作:只需在单独的工作树中检出有问题的提交,然后比较工作树文件即可。)