我正在从主分公司工作的分支上工作一段时间。现在我需要合并我的更改。更改位于特定文件夹中,例如admin这是我项目中的子目录。
当我从主分支机构获取最新信息时,此目录将移至另一个位置,例如主/管理员。所以,现在当我尝试合并时,它会将所有与管理员相关的文件显示为新文件。
我想避免任何手动合并并想要一种方式,以便我可以让git知道这不是新文件夹,而是已移动的现有文件夹。
答案 0 :(得分:3)
所以,现在当我尝试合并时,它会将所有与管理员相关的文件显示为新文件。
Restore the old branch
并使用git mv
移动文件,而不是简单的mv
命令。
Why do i have to use git mv and not just mv?
强> Git不跟踪文件名。它将内容存储在.pack
文件中,文件名(元数据)存储在.idx
文件中,而不是内容本身的一部分。
要更好地了解它,请阅读git存储文件名如何 https://git-scm.com/book/en/v2/Git-Internals-Git-Objects#Tree-Objects
除非您使用git mv
移动文件,否则Git无法跟踪移动的文件。
如果您只是移动或重命名它们,git会将它们作为新文件进行跟踪,并删除旧文件。
How to track changes of the moved files?
强> # you have to use the --follow flag
git log --follow ./path/to/file
答案 1 :(得分:2)
Git 2.18(2018年第二季度)应该促进这种合并。
重命名检测逻辑" diff
"在" merge
"中使用的家庭具有
学会猜测:
x/a
,x/b
和x/c
都移至z/a
时,
z/b
和z/c
,x/d
也可能
想转移到z/d
x
'移至' z
' 。 请参阅commit 1de70db,commit 05cf21e,commit 277292d,commit a35edc8,commit c04ba51,commit 2f682e2,commit bd42380,{{3} },commit fd53b7f,commit 6e7e027,commit bc71c4e,commit 18797a3,commit 64b1abe,commit 79c4759,commit 9c0743f,commit 5b047ac, commit f6f7755,commit e95ab70,commit 96e7ffb,commit 7fe40b8(2018年4月19日)commit ffc16c4。
(由Elijah Newren (newren
)合并于Junio C Hamano -- gitster
--,2018年5月23日)
您可以在commit c67de74中看到与移动文件夹合并的新测试。
详细介绍了以下情况:
###########################################################################
# SECTION 1: Basic cases we should be able to handle
###########################################################################
# Testcase 1a, Basic directory rename.
# Commit O: z/{b,c}
# Commit A: y/{b,c}
# Commit B: z/{b,c,d,e/f}
# Expected: y/{b,c,d,e/f}
预期结果是将分支B
合并到A
。
这包括更复杂的用例:
# Testcase 1f, Split a directory into two other directories
#
# Commit O: z/{b,c,d,e,f}
# Commit A: z/{b,c,d,e,f,g}
# Commit B: y/{b,c}, x/{d,e,f}
# Expected: y/{b,c}, x/{d,e,f,g}
底线是:
所以,现在当我尝试合并时,它会将所有与管理员相关的文件显示为新文件
Git 2.18不再是这种情况。
答案 2 :(得分:0)