在运行git log --graph --oneline -all
时,我仅看到与某个分支(本地和源)或标记相关联的提交(以及父提交和父提交等)。
也就是说,如果我在分支上重置为先前的提交并进行新的提交,则会创建新的历史记录行。现在,如果我将新的本地历史记录线与原点合并,则会看到旧的历史记录线不再显示在图形中(除非标记了旧的历史记录提示)。
即使查询整个回购日志似乎也没有帮助*pList
因此,您是否想知道git log / graph Picks(shows)是否仅与某些分支或标签相关联?有人可以确认或纠正。
编辑-遵循RomainValeri的回答
来自git docs:
git-log-显示提交日志
以及实际观察结果,以及-RomainValeri的答案
git log --graph --oneline --all
输出所有分支/标记历史记录
所以有什么方法可以用git log或任何其他替代命令/工具查看每次提交的日志(包括悬空的提交,即那些与任何分支/标签无关的提交)。
答案 0 :(得分:1)
是的,默认情况下,它需要HEAD
,但您可以将其作为参考:
git log --graph --oneline
# outputs history backwards from HEAD
git log --graph --oneline branch-1
# outputs only branch-1 history
git log --graph --oneline --all
# outputs all branch histories
要在下面发表您的评论:对于--all
,这并不意味着它需要所有提交,而是所有引用。因此将浏览所有refs/
目录(也将浏览HEAD
)
在新作用域后编辑:
要查找丢失的(悬空的)提交,请使用fsck
git fsck --lost-found
最后,要链接两者,您可以嵌套命令。
git log --graph --oneline $(git fsck --lost-found | sed -E 's/dangling (tree|commit|blob|tag) //')
答案 1 :(得分:1)
尚不清楚,但是更新之后,您的主要问题似乎是:
所以有什么方法可以用git log或任何其他替代命令/工具查看每次提交的日志(包括悬空的提交,即那些与任何分支/标签无关的提交)。
简短的回答(仍然是最准确的)是:并非如此。
如果您检出了悬空的提交(即HEAD
已从所有引用中分离出来,则可以看到该历史记录)。您可以从reflogs
(回购分支和HEAD
过去指向的地方的本地记录)中查看历史记录,以查看任何当前引用都无法访问的历史记录。还有其他类似的例外。您甚至可以给git一个特定的提交ID,以查看导致该提交的历史记录。
但是您确实必须告诉git log
从哪里开始步行;它并非旨在查找悬空的提交并在那里开始散步。
在得出结论之前,以及“不是真的”在大多数情况下都是“正确”的原因,我想指出的是,如果您有无法达成的承诺到--all
为止,那么gc
就从该提交下方撤出地毯是一个时间问题-因为据其所知,此类提交尚未使用。大多数git
命令所做的假设日志都相同:可以从ref(分支,标签等)访问有用的提交,因此即使禁用了gc
,也避免了删除此类提交(不是很好)想法),您仍然会永远尝试说服git与他们合作。
因此,唯一合理的建议是,在编写要保留的代码时,不要养成以分离的头部状态工作的习惯;如果您要保留新的更改,然后意识到自己处在分离状态,请创建一个分支。
但是对于一个技术上较完整的答案,我会注意到git有一个命令,其命令 用来查找悬空的提交。您可以使用git fsck
定位无法访问的对象(假设尚未被gc
清除),然后将生成的SHA ID值提供给log
。您甚至可以组装脚本来完成此任务。
答案 2 :(得分:1)
由于问题本身并未引起人们的关注,目前恐怕这有点混乱。您从git log
开始进入git gc
领域。 :-)
Git具有可见引用,例如HEAD
,分支名称和标签名称。但是Git还具有不可见引用,例如reflogs和 invisible 引用。最后一个特别棘手:
暂时忽略git worktree add
,让我们看一下不可见的引用。这些是索引中的条目!它们直接引用Blob对象(仅),但它们出于git gc
的目的使这些Blob保持活动状态。
现在让我们投入git worktree add
。添加工作树时,添加的工作树将获得自己的索引,自己的HEAD
和自己的一组特定于工作树的特殊引用(ORIG_HEAD
,git bisect
refs,依此类推)。 git gc
和git fsck
命令必须检查所有这些引用。在Git 2.5中,git worktree
第一次进入时,他们没有加入!直到Git 2.15才解决。这样做的结果是,当git gc
运行时,它可能会丢弃正在某些添加的工作树中使用的数据:仅存储在添加的工作树的索引中的对象,或仅从添加的工作树可访问的提交,树的分离的HEAD丢失了,可以在修剪结束后(默认= 14天)进行GC处理。
您可以让git log
与-g
一起进入引用日志,也可以让它与--all
一起进入所有常规引用。但是,--all
标志仅查看 this 工作树的特定于工作树的引用。同时git fsck
和git gc
必须查看所有引用,包括reflog和不可见的和按工作树引用。如果您的Git在2.5到2.15之间,则此行将被破坏,因此请注意不要长时间使用添加的工作树。 (我自己被这个特定的错误咬住了。幸运的是,添加的工作树没有任何重要意义。)
运动(可在不窥视来源的情况下发现):refs/stash
是每个工作树,还是全局的? (我自己不知道答案。)
答案 3 :(得分:0)
有什么方法可以查看每个提交的日志(包括悬空的提交,即那些与任何分支/标签无关的提交)
通常,在命令中添加--reflog
足以查看上个月左右所做的每次提交或放弃的提交,而不管它是否在当前历史记录中。
可以生成和放弃提交而无需创建reflog条目,但是很难想象您为什么要寻找这些提交。找不到所有鬼提示的方法,--reflogs
因为很久以前就被抛弃了,或者是由自己认为不需要讨厌的reflog的本地工作流/脚本生成的,所以是
git fsck --connectivity-only --unreachable --no-dangling