当我使用git-mv在git中移动一个文件时,状态显示该文件已被重命名,即使我改变了一些部分,它仍然认为几乎是相同的(这很好,因为它让我可以跟踪它的历史)。
当我复制一个文件时,原始文件有一些我想与新副本相关联的历史记录。
我试过移动文件,然后尝试在原来的位置重新 checkout -一旦移动git不会让我 checkout 原来的位置。
我试过复制一个文件系统,然后添加文件- git将其列为一个新文件。
有没有什么方法可以让git记录一个文件复制操作,就像它记录一个文件重命名/移动的方式一样,其中的历史可以追溯到原始文件?
2条答案
按热度按时间t0ybt7op1#
Git不做重命名跟踪也不做复制跟踪,这意味着它不会记录重命名或复制。它所做的是重命名和复制检测。您可以通过使用
-M
选项在git diff
(和git show
)中请求重命名检测,可以通过使用-C
选项在更改的文件中请求额外的复制检测,并且可以使用-C -C
在所有文件中请求更昂贵的复制检测。参见git-diff手册页。-C -C
表示-C
,-C
表示-M
。-M
是--find-renames
的快捷方式,-C
表示--find-copies
,-C -C
也可以拼写为--find-copies-harder
。您还可以通过将
diff.renames
设置为布尔true值(例如:true
或1
),你也可以通过将其设置为copy
或copies
来请求git进行复制检测。参见git-config手册页。同时检查
git diff
的-l
选项和相关的配置变量diff.renameLimit
。git log <pathspec>
在Git中的工作方式不同:这里<pathspec>
是路径分隔符集合,其中path可以是(子)目录名。在重命名和复制检测发挥作用之前,它过滤并简化了历史记录。如果你想跟踪重命名和复制,请使用git log --follow <filename>
(目前有点限制,只适用于单个文件)。i7uq4tfw2#
如果由于某种原因,你不能像Jakub Narbski的回答那样打开复制检测,你可以强制Git在三次提交中检测复制文件的历史记录:
--no-ff
将新分支合并到原始分支。这是Raymond Chen。接下来是他的程序。假设文件名为
SomeFile.cpp
,您希望将副本命名为SomeOtherFile.cpp
:请注意,这可以在Windows上的 Git Bash 中执行。