有许多问题试图将 CVS 的能力映射cvs diff -D "1 days ago"
到 git:
如何使用 Git 获取两个日期之间发生的所有提交之间的差异?
但是根据我对这个问题的评论的理解:
执行git diff --name-only master@{"5 day ago"} master
是您机器本地的,无法解决合并到 master 的问题。
我在想我需要使用git whatchanged
并基于另一个问题(Bash script to extract filenames from git whatchanged)也许
git show --pretty="format:" --name-only HEAD^
但充其量我似乎在想我必须编写一个有点脆弱的脚本来解析特定日期内特定参考的各种 git 输出,然后将这些参考重定向到其他 git 命令以隔离在这些参考中修改了哪些文件,最后 concat结果。
我很震惊 git 还没有提供这个功能,因为我觉得它是一个基本的特性,特别是因为从我上面提到的问题来看,git 并没有完全重现 CVS 的美妙优势,cvs diff -D "1 days ago"
如果 CVS 有git 上的东西,那么好吧,我对人性失去了所有的信心。
有人可以证明我错了吗?有没有办法可靠地查询 master 中的任何文件是否在一段时间内通过合并或提交进行了更新?
问题
这是我所做的导致我来到这里的:
- 对您的存储库进行多次提交并将它们推送到源
- 现在获取裸存储库并使用
cp -r --preserve
- 从此复制的裸存储库中,执行
git clone copy_of_everything
- 在
copy_of_everything
运行中git diff --name-only master@{"5 day ago"} master
或自从您在步骤 1 中提交这些提交以来已经过了多久。
你会发现,至少我做到了,git diff --name-only master@{"5 day ago"} master
因为你执行了克隆,所以找不到任何未完成的提交。
这似乎是无法接受的。那里的日志以长格式告诉我我需要知道的内容,但是我所知道的没有一两个命令可以告诉我自某个日期以来哪些文件已被修改。
更新 1
sleske 的评论似乎一针见血。git diff --name-only master@{"5 day ago"} master
,基于 reflog 是一个坏主意,因为它基于对存储库状态的本地修改。
那么有没有不错的选择?
另外,感谢用户:qqx 首先用这个问题将我指向这个方向。
更新 2
有。sleke(现已接受)的回答解释了原因。
简而言之,我需要执行:
git diff --name-only $(git log --until="1 days ago" -n1 --format=%H master ) master
恢复了对人性的信仰。