Git - 如何在提交中显示每个文件的文件内容?

时间:2016-10-14 19:52:43

标签: git

如何在提交中显示每个文件的文件内容?

例如,假设提交有20个文件已更改。现在,我正在为每个文件使用git show *commit*:*file_path* 20次。

有没有办法只用一个git命令获取所有这些信息?

2 个答案:

答案 0 :(得分:1)

最简单的方法是检查该提交,然后查看这些文件(并忽略任何其他文件)。请注意,您可以查看其他工作树,例如,使用git worktree add(自Git 2.5版开始提供,从2.6.x开始大部分都可靠,但最好是2.8+):

$ git worktree add /tmp/tmpbranch HEAD~3
Preparing /tmp/tmpbranch (identifier tmpbranch)
HEAD is now at ...
$ ... work with files in /tmp/tmpbranch ...

你可以看到你拥有的东西:

$ git worktree list
/home/torek/[path]    d22d10a [master]
/tmp/tmpbranch        b6fc8a3 (detached HEAD)

并像这样清理:

$ rm -rf /tmp/tmpbranch
$ git worktree prune

请注意,您可以将新工作树放在任何位置,但我会把它放在当前工作区之外的某个地方(甚至是/ tmp这样的地方),以避免让自己感到困惑。

(我称之为tmpbranch,但使用HEAD~3作为提交说明符导致它变为分离。没有它,Git会检查新分支下的HEAD提交名称tmpbranch。提交分支名称作为提交说明符,检查新工作树中的分支,除非您添加--detach以获取分离的HEAD。使用原始提交哈希应该得到一个每次都离开HEAD。)

答案 1 :(得分:0)

你可以交互式地修改你的提交并压缩它们。然后为那个提交哈希做git show。例如,您可以执行以下操作:

git rebase -i HEAD~20
# your terminal will display either nano editor or vim. The format will be as such
# pick *commit_hash* *commit_message*
# pick *commit_hash* *commit_message*
# pick *commit_hash* *commit_message*
# pick *commit_hash* *commit_message*

#change all of your 'pick' to 's' (s means squash). Start from the bottom and go up
#Save your changes on which ever editor you are using. Git will prompt you to name your squash commit
# Then just do git show *commit_hash*

希望这有帮助!