首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在合并分支和保留旧版本时重命名已更改的文件?

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

Stack Overflow用户
提问于 2019-05-23 09:59:00
回答 1查看 28关注 0票数 0

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

代码语言:javascript
复制
$ git checkout master
$ cat truth.txt
The Earth is flat

及其在某些分支上的更新版本(基于master)

代码语言:javascript
复制
$ git checkout magellan-dev
$ cat truth.txt
The Earth is a globe

现在,我希望将分支magellan-dev合并到master中,但将所有文件都更改为具有不同名称的新文件。看起来就像

代码语言:javascript
复制
$ git checkout master
$ git merge megellan-dev --some-magic-flag
$ ls
truth.txt truth.txt.magellan-dev

我为单个文件找到的解决方案是手动重命名该文件并签出前面的文件。

代码语言:javascript
复制
$ 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 

但是对于更大数量的文件来说,这是很糟糕的概括。我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的内部组件来完成所有这些工作:只需在单独的工作树中查看有问题的提交,并比较工作树文件。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56272706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档