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

Git-如何在提交中显示每个文件的文件内容?,git,Git,如何在提交中显示每个文件的文件内容 例如,假设提交更改了20个文件。现在,我正在为每个文件使用git show*commit*:*file\u path*20次 有没有一种方法可以在一个git命令中获得所有这些信息?您可以以交互方式重新设置提交的基础并挤压它们。然后对该提交哈希执行git显示。例如,您可以执行以下操作: git rebase -i HEAD~20 # your terminal will display either nano editor or vim. The format

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

例如,假设提交更改了20个文件。现在,我正在为每个文件使用
git show*commit*:*file\u path*
20次


有没有一种方法可以在一个git命令中获得所有这些信息?

您可以以交互方式重新设置提交的基础并挤压它们。然后对该提交哈希执行git显示。例如,您可以执行以下操作:

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*

希望这有帮助

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

您可以通过以下方式查看您拥有的功能:

$ 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会在新的分支名称
tmpbranch
下签出
HEAD
提交。如果不添加
--detach
获取分离的头。每次使用原始提交散列都会获取分离的头。)

您是在查找已更改文件的内容还是已更改文件的列表?已更改文件的内容。我已经在使用
git diff--name only commit
获取已更改文件的列表。然后,您可以通过查看git reflogo撤消更改。这是个好主意。我没有这样想。我会尝试一下。谢谢。如果您愿意,请告诉我有什么问题吗?她有一次提交20个文件,而不是20次提交一个文件,不是吗?是的,你是对的吸血鬼。一次提交,20个文件。对不起。谢谢,我担心我会这样做。好吧,你也可以总是使用一个shell脚本循环:
用于p1 p2 p3中的路径…pN;git显示$commit:$path>/tmp/dir/$path;完成
gitshow
的主要缺点是它不通过过滤器运行文件(这也是它的主要优点)。我只是认为简单的临时工作树更容易。
$ rm -rf /tmp/tmpbranch
$ git worktree prune