我通常没有使用git重命名的问题,但我遇到了一个非常困难的问题,我正在尝试解决.
由于各种原因,我的情况是我们有一个文件dir1/file.由于很久以前的决定,它完全是错误的地方,需要转移到dir2/file.
但是,有很多代码需要更改,出于各种原因,我们必须将文件保留在新位置和旧位置一段时间.
所以,自然(ish)方法是这样做:
git mv dir1/file dir2/file
git commit -a
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好:
> git diff master --name-status --find-renames
R100 dir1/file dir2/file
Run Code Online (Sandbox Code Playgroud)
那么我们呢
ln -s ../dir2/file dir1/file
git commit -a
Run Code Online (Sandbox Code Playgroud)
但这发生了
> git diff master --name-status --find-renames
A dir2/file
T dir1/file
Run Code Online (Sandbox Code Playgroud)
如果任何人改变dir1/file了主人并且我试图拉它,我会被告知存在合并冲突dir1/file1并dir2/file1保持不变.我想通过阅读git跟踪内容的其他帖子,但它似乎跟踪文件名和内容.完全忽略了内容已经移动的事实.
那么我怎么能得到git来识别我实际上已经重命名了一个文件然后添加了一个新文件,它恰好与旧文件同名?
注意:我不想做多次推送.有几个这样的文件受到影响,并且有人对其中一个并行进行更改的可能性非常高,并且无法保证他们能够执行拉动以获得重命名然后拉动以获得软链接.
另外的例子.我正在从python模块中删除一个函数,该模块__init__.py本来就不应该在那里,__init__.py应该是空的.这也没有被发现作为重命名.即使新文件__init__.py的内容与原始文件的内容99%相同,并且新__init__.py内容的内容与旧内容的0%相同.一切都很好,直到我添加一个具有相同名称的文件.
我试图找到 2 个提交 ID 的差异。当我 git diff 时,它会打印文件的更改状态。“M”的意思是“修改”。“D”的意思是“删除”。“A”的意思是“添加”。但是“R087”代表什么?
git diff f0d1122b af122334 --name-status
M service/user_feature/search_user_feature_redis.h
D service/user_feature/search_user_feature_tair.cc
A service/user_feature/user_feature_tair.cc
R087 service/user_feature/search_user_feature_tair.h service/user_feature/user_feature_tair.h
D thirdparty/easy/BUILD
Run Code Online (Sandbox Code Playgroud)