我在 git 中移动文件后(使用 git mv
),查看该文件的日志只显示包括移动在内的提交和移动之后的提交。
有什么方法可以查看旧名称下应用于文件的提交吗?在下面的示例中,我希望在完成移动后在 git log
中看到提交 b04033bdc44f1 和 8ca40d563ce5d。
$ git init
Initialized empty Git repository in /Users/ben/code/git_mv_example/.git/
$ touch foo
$ git add foo
$ git commit -m "Initial commit"
Created initial commit 8ca40d5: Initial commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
[master*]$ echo "abcdefg" > foo
[master*]$ git commit -a -m "edited foo"
Created commit b04033b: edited foo
1 files changed, 1 insertions(+), 0 deletions(-)
$ git log foo
commit b04033bdc44f1eb3477270b4b7ca727377d8c03a
Author: Ben Brinckerhoff <ben@devver.net>
Date: Tue Jun 2 13:26:53 2009 -0600
edited foo
commit 8ca40d563ce5d07d965bfb75a01b9c23378fd321
Author: Ben Brinckerhoff <ben@devver.net>
Date: Tue Jun 2 13:26:15 2009 -0600
Initial commit
$ git mv foo bar
[master+]$ git commit -a -m "renamed foo to bar"
Created commit 2bccdf6: renamed foo to bar
1 files changed, 0 insertions(+), 0 deletions(-)
rename foo => bar (100%)
$ git log bar
commit 2bccdf6fc65b9da5b279d9f1117e436549dd3a7b
Author: Ben Brinckerhoff <ben@devver.net>
Date: Tue Jun 2 13:27:14 2009 -0600
renamed foo to bar
$ git log foo
fatal: ambiguous argument 'foo': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
这不可能吗?或者 git log
是错误的命令吗?
最佳答案
'git-log -M
' 将提供带有重命名信息的提交历史记录,如前所述 in GitFaq "Why does git not "track" renames ?"
Git 中的 diff
机制支持自动检测重命名,这是通过 '-M
' 切换到 git-diff-*
命令系列。
重命名检测机器被git-log
使用和 git-whatchanged
.
Git 还支持一种有限形式的跨重命名 merge 。分配责任的两个工具,git-blame
和 git-annotate
两者都使用自动重命名检测代码来跟踪重命名。
作为一个非常特殊的案例,'git log
' 1.5.3 版及更高版本具有“--follow
”选项,允许您在给定单个路径时跟随重命名。
在你的例子中:
F:\prog\git\test\rename>git log --follow bar
commit 81f52b91eb2fc7ad18051c93f3e4d583f27c15ca
Author: VonC <>
Date: Tue Jun 2 21:54:43 2009 +0200
renamed foo to bar
commit 71aff26ace6ab249ab2042d1e5d20377486ce478
Author: VonC <>
Date: Tue Jun 2 21:54:19 2009 +0200
edited foo
commit c893199da767eddac6a547b940557435ade4d18c
Author: VonC <>
Date: Tue Jun 2 21:53:51 2009 +0200
initial commit
注意:所有这些都是可能的,因为在重命名为 bar 之前,您没有彻底修改 foo
的内容。如果内容完全不同,--follow
选项将无法获取所有历史记录。
关于git - 在 git 中,您可以查看文件移动后应用于文件的旧提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941466/