首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并时git如何处理重命名的文件?

合并时git如何处理重命名的文件?
EN

Stack Overflow用户
提问于 2019-01-04 06:12:50
回答 1查看 1.7K关注 0票数 1

有人能描述合并时git如何处理重命名的文件吗?

当合并重命名文件提交时,我面临一个问题。

前任:

in master

提交1:添加b.txt

我的主文件夹视图:

代码语言:javascript
复制
b.txt

特征中的

提交1:添加b.txt this is not the same commit, just same change

提交2:将b.txt移动到my文件夹/b.txt it show renamed file in git ui

我的功能文件夹视图:

代码语言:javascript
复制
myfolder/b.txt

当我在师父的时候

代码语言:javascript
复制
git merge feature

我以为我能拿到这个:

合并后的主文件夹视图:

代码语言:javascript
复制
myfolder/b.txt

但是git并没有删除b.txt,而是删除了我的最终结果:

代码语言:javascript
复制
b.txt  
myfolder/b.txt  

我不知道为什么,我在特性分支中的提交2不是已经删除了b.txt吗?为什么它还在我合并的主人里。

顺便说一句,如果我只是在特性分支中选择提交2,那么它很好地工作(删除b.txt).But --它看起来不像是合并一个分支的正确方法。

更新:

通过way2,如果我使用重基而不是合并,它将给我“正确”的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-04 06:42:58

这些评论确实指出了在git中处理重命名的一些细微差别,但它们并没有真正解决您所看到的原因。

当git进行合并时,它不会单独查看分支的提交。相反,它关注三件事:合并基(大致上是最近的公共祖先);“我们的”提交(您要合并的分支的尖端);以及“它们的”提交(您要合并的分支的尖端)。

它将"base“与"our”进行比较,以确定“我们的更改”,并看到您创建了b.txt。它将“基本”与“他们的”进行比较,以确定“他们的变化”,而这正是事情不像你所希望的那样。因为它不查看中间状态,所以它不知道您创建了b.txt,然后将它移动到myfolder/b.txt;它只知道在分支过程中创建了myfolder/b.txt

所以变化的联合是“创建b.txt和创建myfolder/b.txt",并且没有冲突,所以两者都是。

有趣的是,虽然mergerebase通常产生相同的结果,并且只在它们产生的历史中被认为是不同的,但是在这种情况下,重基是非常罕见的,因为它确实会单独查看每个提交的更改,从而产生更直观的结果。

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

https://stackoverflow.com/questions/54033863

复制
相关文章

相似问题

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