git - 在 git 中,您可以查看文件移动后应用于文件的旧提交吗?

标签 git

我在 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-blamegit-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/

相关文章:

git - git子模块中的提交如何触发持续集成中的构建?

bash - 如何将变量注入(inject) git submodule foreach?

git - 需要一个策略将 Intellij IDEA 项目文件放入 Git

git - 如何使用 Bitnami Gitorious 堆栈通过 HTTP 克隆 git 存储库?

git - 如何在 Jenkins 电子邮件中包含 git changelog?

c - "git log -1 fullpath/myfile"与 libgit2

git - splinter 的 Git 树

windows - 无法在 Windows 中退出 Git 提交

git - 什么是 git 边界提交

推送到远程时 git push 卡住了