我需要能够看到自创建当前分支以来以任何方式修改过的文件列表,无论是已提交还是暂存或仅在树中更改。
我的情景是(按时间顺序排列)
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
普通git状态告诉我所有文件的列表与时间1相比有所不同,即myisoatedbranch和master的总体不同,其中还包括我在时间2更改的所有内容,这是我做的很多文件不想看。
根据git status的手册页,有一个可选的位置parm
[<pathspec>…]
这可能会帮助我 - 但令人沮丧的是,手册页对此参数的效果无话可说。 (所以我的第二个问题是,这个参数在这种情况下究竟做了什么?)
或者我应该尝试git log?但我认为报告只提交。
答案 0 :(得分:2)
在Git中,分支 - 或更确切地说,分支名称 - 实际上几乎没有。 Git对他们的创作一无所知,或者除了一些例外,他们的历史。它们或者现在存在,在这种情况下它们指向(一个,单个)提交,或者它们现在不存在,而且它就是它。 1
另一方面,提交是永远的(有一些例外,因为否则你永远不能进行临时提交,而Git会进行临时提交的批次)。提交的问题,只要它们可达,就是永久性的 - 一个需要大量定义的概念,所以我暂时忽略 2 - 他们的名字是非常不友好的。例如,考虑提交7446b8fa5ead8ce0990e8f2be3a2490eac8e199f
。
嗯,你实际上可以谷歌它:它的Git版本2.9.0,在Git本身的Git存储库中。但是&#34; v2.9.0&#34;是一个很多更友好的名字。并且, 如果你想记住一个特定的提交 - 你想要什么,因为你想要将你当前的版本与我想要记住的特定提交进行比较,无论它是什么大丑陋的SHA-1哈希是&#34;然后标签就是你想要的。给那个提交一个标签,然后你就可以把这个标签名称给Git,只要你想说'#34;告诉我你记得的那个提交&#34;。 1 关于这一点的奇怪之处 - 分支名称仅指向一个分支提示 - 它实际上非常有用。 Git的工作方式是当你进入一个分支并进行 new 提交时,Git会让新提交的前一个分支提示为 parent 提交,然后使分支 name 指向新提交。 因此,可以通过大量的工作(Git自动化)从任何分支提示开始,并在提交之前构建每个提交的图表。请注意,这会告诉您关于所有这些提交的所有内容除了他们的名称 之后的所有内容,当提交这些提交时。根据定义,分支名称总是在变化。这就是为什么我们有标签名称,Git从不改变自己。如果你保留它们,它们将为提交提供合理的名称(对于某些价值的#34;明智的&#34;无论如何,完全取决于你自己提出好名字的能力)。 2 reachability 的概念最终归结为使用分支和标记名称之类的东西作为提交图中的网关。一旦你有一个对象的大丑陋哈希开始在这个图中,你使用你现在已知的提交来获取父提交ID,以便找到更多的提交。然后,您可以使用这些提交ID查找更多父ID,直到您在图中找到每个提交。 (在此过程中,您使用这些对象来查找树对象,并使用树来查找 blob 对象。还有用于带注释标签的标记对象。带注释的标记只是一个指向这样一个对象的标记名。标记对象指向标记的提交,而不是让标记直接指向提交。使用轻量级标记,标签名称直接指向提交。) 任何对象提交,标记,树或blob - 实际上存储在Git的对象数据库中(在包含存储库的7446b8fa5ead8ce0990e8f2be3a2490eac8e199f
v2.9.0
是Git的Git存储库中的标记,该标记是(并且记得你和我)那个丑陋的7446 bqhatevwr。.git
目录中),但不能可达通过上述方法,通过git gc
标记为垃圾收集。因此,只要您愿意,就可以进行临时提交 - 有一些额外的保证,例如&#34;对象逗留14天&#34;和#34;大多数名字都有reflogs&#34;等等,要么让它们至少可以保持一个月,要么暂时保护它们免受死神的伤害 - 然后,如果你决定喜欢它们,那么给它们外部名称,如分支和/或标记名称。如果您决定讨厌它们,那么您只需放弃它们,最终git gc
将收获它们并为您提供磁盘空间。
答案 1 :(得分:0)
使用git diff --name-only master
显示文件列表(或者您可以将--stat
标志用于每个文件的更多统计信息)。
这将显示当前工作树和您离开的最后一个位置master
之间的任何差异文件(在您的示例中似乎为4)。
查看更多here。
关于pathspec
中的git status
- 它只是过滤输出以仅显示特定目录中的文件。