繁体   English   中英

如何在Git Push中修改文件?

[英]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-indexgit diff-files plumbing命令。 这些使您可以将提交的内容与索引的内容进行比较,或者将提交的内容与工作树的内容进行比较,或者将提交的内容与工作树的索引进行比较。

提交,索引和工作树

请记住,Git始终具有每个文件的三个活动副本:

  • 可以通过git show HEAD: path获得HEAD提交中的冻结副本。
  • 工作树副本是您可以查看和编辑的普通文件。 Git并没有真正使用此文件!
  • 在这两个副本之间,Git保留文件的副本,该副本将放入您下一次提交的文件中。 该副本位于Git所谓的索引暂存区缓存中 您可以使用git show : path查看此副本。

当你运行git commit ,Git的封装了无论是在指数权的话 ,并冻结这些内容,以使新提交的快照。 这就是为什么您必须经常运行git add原因。 git add命令将某些工作树文件的内容复制索引中,以更新甚至创建索引版本。

对Git而言,这是文件的索引版本。 提交的版本将冻结为提交,无法更改。 只要提交持续,它们就会持续。 每个文件的工作树版本都是您可以查看和使用的版本,但不是Git关心的版本。 每个文件的索引版本是Git进行新提交所需要的文件-进行新提交是Git存在的原因,因此Git关心提交索引

工作树适合您。 Git不需要任何东西。 Git进行新提交需要与您一起使用和导入,并进行复制以更新索引。

摘要:提交是快照; diff比较快照

所有这一切都是Git制作快照的方式以及原因。 Git不处理任何更改。 它制作快照。 您可以随时比较两个快照,以查看它们之间的区别。 您看到的内容取决于选择的两个快照。

您还可以将快照(提交)与建议的快照(索引)进行比较,或者将快照与工作树进行比较,或者将建议的快照(索引)与工作树进行比较。 git diff-tree命令仅比较实际快照。 要获得其他比较,您需要使用其他水暖命令之一或瓷器git diff

git status命令还会为您运行git diff 当您使用git status ,它实际上运行两个这样的差异。 一个将当前快照HEAD与索引进行比较,并与提议的提交进行比较。 这是为提交而进行的更改的来源。 第二个比较将索引与工作树进行比较。 这是未进行提交的更改的来源。 索引和工作树都没有任何实际更改; git statusgit diff显示的更改是比较实际快照(提交),建议快照(索引)或潜在快照(工作树)的结果。

您可以使用以下内容:

git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT

或者有在詹金斯的功能变更可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM