如何在提交中显示每个文件的文件内容?
例如,假设提交有20个文件已更改。现在,我正在为每个文件使用git show *commit*:*file_path*
20次。
有没有办法只用一个git命令获取所有这些信息?
答案 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*
希望这有帮助!