git - 让 Git 跟踪重命名和编辑的文件

标签 git version-control git-merge file-rename

关于在Git中重命名文件的问题have been asked之前,但我无法针对我的特定问题找到解决方案。

我已经移动并编辑了多个文件(我没有使用 git mv - 不幸的是现在已经太晚了)。现在我想要它,所以当我的同事从我的存储库中 pull 出时,对这些相同的文件进行了自己的编辑(不移动它们),它成功地将我的更改与他在文件的新位置中的更改 merge 。要成功 merge ,Git 显然需要知道这些文件是相同的。

Git 是否足够聪明,可以自行解决这个问题?似乎很难相信。如果是这样,我如何确定 Git 会选择特定的文件移动 - 即使内容已更改?

最佳答案

Git 实际上并不跟踪存储库中的重命名,它使用差异试探法来确定您是否将文件重命名为另一个文件。也就是说,如果您 git mv 一个文件,然后完全替换其中的内容,它被认为是重命名,您需要使用 git mv 来检测重命名。

例如:

% mv d.txt e.txt
% git rm d.txt
rm 'd.txt'
% git add e.txt
% git commit -m"rename without git mv"
[master f70ae76] rename without git mv
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename d.txt => e.txt (100%)
% git diff --summary --find-renames HEAD~1 HEAD
 rename d.txt => e.txt (100%)

同样的,git mv并不意味着文件会被重命名,它仍然会使用diff算法:

% git mv e.txt f.txt
% echo "Completely replacing f.txt" > f.txt
% git add f.txt
% git commit -m"git mv doesn't help here"
[master 068d19c] git mv doesn't help here
 2 files changed, 1 insertion(+), 14 deletions(-)
 delete mode 100644 e.txt
 create mode 100644 f.txt
% git diff --summary --find-renames HEAD~1 HEAD
 delete mode 100644 e.txt
 create mode 100644 f.txt

关于git - 让 Git 跟踪重命名和编辑的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785160/

相关文章:

objective-c - 对于 Cocoa 应用程序,哪些文件应该受到版本控制?

version-control - 如何清除我本地版本的 TFS 服务器知识?

Git Subtree Merging 在 merge 一个简单的上游更改时报告冲突

git - 以编程方式显示 merge 期间使用的所有 git rerere 分辨率

git 只检查整个项目的某些文件类型

git - 如何 pull 一个新的子模块

git - 如何创建并与其他开发人员共享 git 分支?

linux - 将本地仓库推送到远程不会使用 GIT 推送子模块文件

java - 管理俱乐部项目的版本控制?

默认情况下 git merge -Xignore-space-change