我使用Eclipse从内部GitLab服务器检出了一个项目,然后我撤消了所有更改。当我从Eclipse查看历史时。 (团队>在历史中显示),它显示项目的完整历史记录。 现在我从终端进入相关项目。
/家庭/工作区/ projectX创建/
我试图通过以下命令获取2个日期之间的差异:
git diff --name-only master@{2015-10-10}..master@{2015-11-10} > /home/results/ProjectX/Changes.txt
它不会显示任何结果。它显示:
警告:“主人”的日志只能回到2015年11月10日星期二。
如何获得该日期范围内的所有差异?
除此之外,Eclipse如何从远程服务器请求其历史记录。如果我们可以从终端运行相同的命令,那应该可以。
答案 0 :(得分:2)
Git使用您的reflog解析master@{2015-10-10}
之类的日期,这似乎不会回溯到您正在搜索的范围内。但是,您可以使用rev-list
找到该日期范围的提交:
git rev-list --since='2015-10-10' --until='2015-11-10' master
您希望文件在该列表中最近和最早的提交之间进行更改,我们可以使用head
和tail
获取该提交。我想使用-n1
和--reverse
,但--reverse
在 -n
之后应用,所以我们不能。
first=$(git rev-list --since='2015-10-10' --until='2015-11-10' master | tail -1)
last=$(git rev-list --since='2015-10-10' --until='2015-11-10' master | head -1)
git diff --name-only $first..$last
设置变量和复制rev-list
感觉很笨拙,但我能想到的管道版本更糟糕。它选择第一个和最后一个提交,使用tr
将换行符转换为空格,使用..
将sed
替换为新的空格,然后将该对转移到git diff
。
git rev-list --since='2015-10-10' --until='2015-11-10' master | \
(head -n1 && tail -n1) | \
tr '\n' ' ' | \
sed 's/ /../' | \
xargs git diff --name-only