我 希望 看到 我 的 git 历史 记录 中 修改 过 的 文件 名 , 但 不 包括 一 次 提交 。
当 我 使用 命令 时 :git log --oneline
, git 返回 以下 提交 :
问题 出 在 提交 0810c44
上 。 这个 提交 是 因为 它 是 一 个 同步 提交 , 它 包含 了 很多 更新 的 文件 , 但是 我 当前 的 任务 并 不 需要 这些 文件 ( 它 包含 了 很多 要 与 我 的 本地 存储 库 同步 的 文件 ) 。
我 希望 看到 所有 文件 名 从 当前 的 HEAD 更改 为 以前 的 提交 ( 例如 , 824be3b
) , 但 在 提交 0810c44
被 省略 的 方式 , 我 怎么 能 做到 这 一 点 ?
# # Git 以 文本 形式 返回 :
git log --oneline
第 一 个
5条答案
按热度按时间tkclm6bt1#
我没有一个简单的命令给你,但这里有一对夫妇的“变通”的解决方案,应该实现你的最终目标。
如果没有你想要的那么多提交,从一个没有这些提交的分支开始,在那里,你可以创建一个新的临时分支,然后git只挑选你想看到结果的提交,然后对临时分支运行你的命令。
如果有很多提交需要查看结果,而只有一个提交需要忽略,那么你可以尝试类似于上面的策略,但是从当前分支创建一个包含所有提交的分支,然后还原当前提交。同样,这样会留下一个包含所需提交的分支-运行命令获取所需文件的列表,然后跳回你的实际分支。
pb3s4cty2#
我不认为有一种方法可以使用git log来排除某个提交,但是要列出在多个提交中修改过的所有文件,可以使用
git diff
,再加上恢复特定的提交,应该可以达到预期的效果。假设我们要排除两个提交,
6a3c93a
和8cee864
,我们可以创建一个新分支,还原这两个提交,然后运行git diff:注意
c.txt
从列表中被删除了,但是d.txt
仍然显示出来--因为它在提交90b7155
时被修改了,而我们想要包含它。虽然恢复历史提交可能会导致冲突,但为了列出修改过的文件,这不是问题,因为它只表明文件在稍后的阶段被修改过。我不会麻烦解决它们,我实际上会提交恢复而不进行任何编辑。最终结果仍然会显示这些文件为修改过的,这是我们想要的结果。
7uzetpgm3#
我理解你的需求,但这似乎违背了git的设计,有两个重要原则:
git跟踪的是内容,而不是文件
②原始提交的散列唯一标识了以该提交为根的整个数据结构的状态
这听起来有点复杂,例如,您想排除0810c44,但您的9dfe1b9记录的修改内容是基于0810c44的,换句话说,9dfe1b9之所以是9dfe1b9,是因为0810c44。
如果0810c44的内容不同(或者甚至如您所期望的那样没有0810c44),9dfe1b9将不是9dfe1b9,而是另一个完全不同的节点(或哈希)
所以,我理解你的需要,但它看起来不太可能通过git内部命令来解决。
wyyhbhjk4#
如果是一组你从来不感兴趣的文件,不管它们是由哪个提交更改的,你可以使用pathspec表达式来排除这些文件:
nszi6y055#
使用
git rev-list
列出提交哈希,从列表中删除目标提交,然后使用git show
查看每个单独的提交:您可以通过将
--oneline
替换为--format=""
来完全删除任何提交的内容(并且只保留文件列表