如何在Git推送中修改文件?

如何在Git推送中修改文件?,git,gitlab,Git,Gitlab,我想获取上次推送中修改的所有文件 推送可以有多个提交 目前我可以通过以下命令获取上次提交的修改文件: git diff-tree --no-commit-id --name-only -r HEAD 你就快到了。 可以通过将当前磁头与原点分支进行比较来实现这一点。 git-diff-tree--无提交id--仅名称-r头..源代码/主代码 例子 最后一个命令显示输出: addnewfile.txt addexistingfile.txt git push不会修改任何文件 git push添加

我想获取上次推送中修改的所有文件

推送可以有多个提交

目前我可以通过以下命令获取上次提交的修改文件:

git diff-tree --no-commit-id --name-only -r HEAD
你就快到了。 可以通过将当前磁头与原点分支进行比较来实现这一点。
git-diff-tree--无提交id--仅名称-r头..源代码/主代码

例子 最后一个命令显示输出:

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>
然后查看哪个提交散列出现。然后运行
git log master
git rev parse的输出与
git log的第一行之间有什么共同之处

在中生成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称之为管道的操作,在这里您将使用
git diff tree
来比较两个特定的提交

git-diff-tree
命令有一个特殊的额外特性:如果您仅使用一个提交哈希ID或解析为此类哈希ID的名称(如
HEAD
),git将从该提交中提取父提交列表。然后Git将区分提交的父级和该提交。这就是运行
git diff tree options HEAD
时所看到的

要选择两个要比较的提交,只需在命令行上使用两个哈希ID或它们的名称

普通
git diff
也可以比较其他东西 使用
git-diff
命令可以调用
git-diff-index
git-diff-files
管道命令,而不是
git-diff-tree
。这些允许您将提交的内容与索引的内容、工作树的提交或工作树的索引进行比较

提交、索引和工作树 请记住,Git在任何时候都有每个文件的三个活动副本:

  • HEAD
    提交中的冻结副本可通过
    git show HEAD:path
    获得
  • 工作树副本是可以查看和编辑的普通文件。Git并没有真正使用这个文件
  • 在这两个副本之间,Git保留它将放入下一次提交的文件的副本。此副本位于Git所调用的索引、暂存区域或缓存中。您可以使用git show:path查看此副本
当您运行
git commit
时,git会立即打包索引中的内容,并冻结这些内容以生成新的提交快照。这就是为什么您必须经常运行
git add
。git add
命令将某些工作树文件的内容复制到索引中,更新甚至创建索引版本

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

工作树是给你的。Git什么都不想要也不需要它;这是Git进行新提交所需要的,供您使用、使用和复制以更新索引

摘要:提交是快照;差异比较快照 所有这些都是Git制作快照的方式和原因。Git不处理更改。它制作快照。您可以随时比较两个快照,看看它们之间有什么不同。您看到的内容将取决于您选择的两个快照

您还可以将快照(提交)与建议的快照(提交)进行比较
git diff <hash#1> <hash#2>
git rev-parse master
git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT