为什么git diff在两个日期之间没有工作?

时间:2015-11-18 13:48:20

标签: eclipse git

我使用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如何从远程服务器请求其历史记录。如果我们可以从终端运行相同的命令,那应该可以。

1 个答案:

答案 0 :(得分:2)

Git使用您的reflog解析master@{2015-10-10}之类的日期,这似乎不会回溯到您正在搜索的范围内。但是,您可以使用rev-list找到该日期范围的提交:

git rev-list --since='2015-10-10' --until='2015-11-10' master

您希望文件在该列表中最近和最早的提交之间进行更改,我们可以使用headtail获取该提交。我想使用-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