[英]How to get the files modified in a Git Push?
我想获取上次推送中已修改的所有文件。
推送可以有多个提交。
目前,我可以通过以下命令获取上次提交的修改文件:
git diff-tree --no-commit-id --name-only -r HEAD
你快到了 可以通过将当前的HEAD与origin分支进行比较来实现这一目标。 git diff-tree --no-commit-id --name-only -r HEAD..origin/master
git checkout master
git pull
touch addnewfile.txt
git add -A
git commit -am "added new empty file"
echo 'test' > addexistingfile.txt
git commit -am "added test in existing file"
git diff-tree --no-commit-id --name-only -r HEAD..origin/master
最后一条命令显示输出:
addnewfile.txt
addexistingfile.txt
git push
不会修改任何文件。
git push
添加或删除提交 。 提交具有文件快照。 提交没有更改,只有文件。
这是一个文件:
$ cat name-of-file
I am the contents of file name-of-file.
我对此文件做了哪些更改 ? 我给了您一个快照 ,我的问题是:进行了哪些更改? 我遗漏了哪些关键信息?
仔细考虑一下,然后继续阅读:给定两个快照,您将如何找到更改? git diff
帮助吗?
git diff
命令可以显示两个快照之间的变化 :
git diff <hash#1> <hash#2>
请注意,您必须选择两个提交哈希。 但是,您可以按name选择那些提交哈希。 在一些现有的Git存储库中,运行:
git rev-parse master
并查看出现哪个提交哈希。 然后运行git log master
。 git rev-parse
的输出和git log
的第一行之间有什么共同点?
gitrevisions文档中提供了完整的(如果压倒一切的)方式来生成Git哈希ID,但是对于日常工作而言,最有用的是分支名称(例如master
,标签名称(例如v2.1
)和远程跟踪名称(例如origin/master
。 该名HEAD
表示当前犯 ,1,您可以缩写它@
如果你喜欢。
1名称HEAD
也表示当前的分支名称 。 Git决定使用HEAD
谈论提交哈希ID还是谈论分支名称的方式是,某些命令需要分支名称,而其他命令则需要提交哈希ID。 git rev-parse
命令可以询问任何一个问题,但是默认值是查找哈希ID。 您可以使用git rev-parse --symbolic-full-name HEAD
询问分支名称,或者,如果您非常认真,可以在这种情况下使用git symbolic-ref HEAD
。
git diff-tree
是两次提交的git diff
的管道版本 您标识的命令git diff-tree
是从另一台计算机程序运行git diff
一种方法。 如果您正在运行git diff
来自己查看差异,则通常会使用Git所谓的瓷器命令,该命令以更抛光,面向用户的浴室部分(如水槽)命名。 如果您正在运行git diff
来获取差异以馈送到另一个计算机程序,则可能需要在此过程中分解并重新组装各种设备,执行Git所谓的plumbing ,在这里您将使用git diff-tree
比较两个具体的提交。
git diff-tree
命令具有一个特殊的额外功能:如果仅使用一个提交哈希ID或名称(如HEAD
解析为这样的哈希ID来运行它,Git将从该提交中提取父提交列表。 然后,Git将比较提交的父对象与该提交。 这就是运行git diff-tree options HEAD
时看到的。
要选择两个提交进行比较,只需在命令行上使用两个哈希ID或名称即可。
git diff
也可以比较其他东西 瓷器git diff
命令可以代替git diff-tree
来调用git diff-index
或git diff-files
plumbing命令。 这些使您可以将提交的内容与索引的内容进行比较,或者将提交的内容与工作树的内容进行比较,或者将提交的内容与工作树的索引进行比较。
请记住,Git始终具有每个文件的三个活动副本:
git show HEAD: path
获得HEAD
提交中的冻结副本。 git show : path
查看此副本。 当你运行git commit
,Git的封装了无论是在指数权的话 ,并冻结这些内容,以使新提交的快照。 这就是为什么您必须经常运行git add
原因。 git add
命令将某些工作树文件的内容复制到索引中,以更新甚至创建索引版本。
对Git而言,这是文件的索引版本。 提交的版本将冻结为提交,无法更改。 只要提交持续,它们就会持续。 每个文件的工作树版本都是您可以查看和使用的版本,但不是Git关心的版本。 每个文件的索引版本是Git进行新提交所需要的文件-进行新提交是Git存在的原因,因此Git关心提交和索引 。
工作树适合您。 Git不需要任何东西。 Git进行新提交需要与您一起使用和导入,并进行复制以更新索引。
所有这一切都是Git制作快照的方式以及原因。 Git不处理任何更改。 它制作快照。 您可以随时比较两个快照,以查看它们之间的区别。 您看到的内容取决于选择的两个快照。
您还可以将快照(提交)与建议的快照(索引)进行比较,或者将快照与工作树进行比较,或者将建议的快照(索引)与工作树进行比较。 git diff-tree
命令仅比较实际快照。 要获得其他比较,您需要使用其他水暖命令之一或瓷器git diff
。
git status
命令还会为您运行git diff
。 当您使用git status
,它实际上运行两个这样的差异。 一个将当前快照HEAD
与索引进行比较,并与提议的提交进行比较。 这是为提交而进行的更改的来源。 第二个比较将索引与工作树进行比较。 这是未进行提交的更改的来源。 索引和工作树都没有任何实际更改; git status
或git diff
显示的更改是比较实际快照(提交),建议快照(索引)或潜在快照(工作树)的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.