繁体   English   中英

git-如何显示相对于当前分支创建的已更改文件列表

[英]git - how to show list of changed files relative to creation of current branch

我需要能够看到自创建当前分支以来已进行任何修改的文件列表,无论是提交的还是暂存的或只是在树中进行了更改。

我的情况是(按时间顺序)

1.  clone branch master from remote master
2.  make various changes,  adds and commits in my local master
3.  git branch myisolatedbranch
4.  git checkout myisolatedbranch
5.  make various changes,  adds and commits in myisolatedbranch
6.  git push --all  
             (creates myisolated branch in remote) 
             (don't know if this step 6 is relevant)
7.  make various changes,  adds and commits in myisolatedbranch
  1. 现在-我想看到一个简单的文件列表,这些文件现在在工作树中与在时间4时的工作树相比有所不同。即,我在myisolatedbranch中进行了哪些更改(不仅是提交而且有任何更改)

纯git状态告诉我所有与时间1相比不同的文件列表,即myisoatedbranch和master的总和中有什么不同,这也包括我在时间2更改的所有内容,这是我不想删除的许多文件看着。

根据git status的手册页,有一个可选的位置参数

[<pathspec>…​]

这可能可以帮助我-但令人沮丧的是,手册页没有任何关于此参数作用的说明。 (所以我的第二个问题是,此参数在此上下文中到底是做什么的?)

还是我应该尝试git log? 但是我认为报告只是提交。

在Git中,分支(或更确切地说是分支名称 )实际上几乎没有。 Git对它们的创建或任何历史一无所知。 它们或者现在存在,在这种情况下,它们指向(一个,单个)提交,或者它们现在不存在,仅此而已。 1个

另一方面,提交是永久的(有一些例外,因为否则您将永远无法进行临时提交,而Git进行了大量的临时提交)。 与提交,这是永久性的问题,只要他们到达 -a概念,需要大量的定义,所以我会忽略的时刻2 -is他们的名字是非常不友好的。 例如,考虑提交7446b8fa5ead8ce0990e8f2be3a2490eac8e199f

什么在所有的名字是gitty 7446b8fa5ead8ce0990e8f2be3a2490eac8e199f

好吧,您实际上可以在Google上搜索它:它是Git版本2.9.0,位于Git本身的Git存储库中。 但是“ v2.9.0”是一个友好的名称。 而且, v2.9.0是在Git仓库的Git的标签 ,而标签(并记住你和我)大丑7446 bqhatevwr

如果您想记住一个特定的提交,这就是您想要的,因为您想将当前版本与“我试图记住的那个特定的提交,无论它的丑陋的SHA-1哈希值是什么”进行比较,则标记为你想要什么。 给该提交标签,然后只要您想说“告诉我有关您记得的提交”,就可以将该标签名称提供给Git。


1关于这一点的怪异之处(即分支名称仅指向一个分支提示的提交)实际上是非常有用的 Git的工作方式是,当您在分支上并进行新的提交时,Git使新的提交将上一个分支提示作为其父提交,然后使分支名称指向新的提交。

因此,通过大量的努力(Git自动执行),有可能从任何分支提示的提交开始,并为该提交之前的每个提交建立图表。 请注意,这会告诉你一切关于所有这些承诺除了自己什么他们的名字 ,回来时,这些提交作了。 根据定义,分支名称始终在变化。 这就是为什么我们拥有标签名称的原因,而Git从来不会对其进行更改。 如果您将它们保留在周围,它们将为提交提供明智的名称(无论如何,对于“明智”的某些值,完全取决于您自己提出好名字的能力)。

2最后,可到达的概念归结为使用分支和标记名之类的东西作为提交图的网关。 一旦在该图中拥有一个对象的庞大丑陋哈希值,就可以使用现在已知的提交获取父提交ID,以查找更多提交。 然后,您可以使用那些提交ID查找更多的父ID,直到在图中找到每个提交为止。 (沿着这些路径查找对象,并使用树木查找blob对象的方法。带注释的标签也有标记对象。带注释的标记只是指向此类对象的标记名称。标记对象指向带标签的提交,而不是使标签直接指向提交。使用轻量级标签 ,标签名称直接指向提交。)

实际上存储在Git的对象数据库中(包含存储库的.git目录中)但上述方法无法访问的任何对象(提交,标签,树或Blob)都被标记为通过git gc进行垃圾回收 因此,可以随时随地进行临时提交,其中包括一些额外的保证,例如“对象徘徊14天”和“大多数名称都有reflog”等等,这样至少可以使它们可访问一个月,或者暂时保护它们免受死神的伤害-然后,如果您最终决定喜欢它们,请给它们提供外部名称,例如分支和/或标签名称。 如果您决定讨厌它们,只需放弃它们,最终git gc就会获得它们并为您收回磁盘空间。

使用git diff --name-only master来显示文件列表(或者您可以使用--stat标志来显示每个文件的更多统计信息)。 这将显示当前工作树与您离开master的最后一个位置(在您的示例中为4)之间的所有差异文件。 在这里查看更多。

关于git statuspathspec它只是过滤输出以仅显示特定目录中的文件。

暂无
暂无

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

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