git - 当目录已经移动到不同目录时如何在git中 merge 文件

标签 git merge

我曾在从 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/

相关文章:

git - 防止作者在 github 上 merge 自己的代码

git - 在这种情况下如何使用 Git 处理共享代码?

merge - Stata合并改变我的值(value)观?

sql - 合并 PostgreSQL 中的行

git safe rebase 或 "try rebase, fallback to merge"

css - 使用导入合并 CSS 文件

windows - 在 Windows 上使用 Hudson 的 Git 插件克隆/获取存储库时出现问题

git - git 中有没有办法 check out 除 1 或 2 之外的所有文件?

git show HEAD^ 似乎不起作用。这是正常的吗?

python - 子列表具有共同元素的列表的合并列表