我曾在从 master 分支获取的分支上工作过一段时间。现在我需要 merge 我的更改。更改位于特定文件夹中,例如admin 这是我项目中的一个子目录。
当我从 master 分支获取最新版本时,这个目录被移动到另一个位置,例如主人/管理员。所以,现在当我尝试 merge 时,它会将所有与管理相关的文件显示为新文件。
我想避免任何手动 merge 工作,并希望有一种方法可以让 git 知道这不是新文件夹,而是已移动的现有文件夹。
最佳答案
So, now when I try to merge, it shows me all of the admin related files as new file.
Restore the old branch
并使用 git mv
而不是简单的 mv
命令移动文件。
为什么我必须使用 git mv 而不仅仅是 mv?
Git 不跟踪文件名。它将内容存储在 .pack
文件中,将文件名(元数据)存储在 .idx
文件中,它不是内容本身的一部分。
要更好地了解它,请阅读 git 如何存储文件名
https://git-scm.com/book/en/v2/Git-Internals-Git-Objects#Tree-Objects
Git 无法跟踪移动的文件,除非您使用 git mv
移动它们。
如果您只是简单地移动或重命名它们,git 会将它们作为新文件进行跟踪并删除旧文件。
如何跟踪移动文件的变化?
# you have to use the --follow flag
git log --follow ./path/to/file
关于git - 当目录已经移动到不同目录时如何在git中 merge 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791343/