如何查看最新git pull
执行的日期和时间?当出现问题时,我经常需要知道服务器上的代码何时更改。
12 回答
stat -c %Y .git/FETCH_HEAD
将为您提供该文件最后一次修改的 unix 时间戳。每次拉取或获取时,Git 都会写入 FETCH_HEAD 文件,即使没有可拉取的内容。
凭直觉,我尝试了“stat -c %y .git/FETCH_HEAD”,并得到了一个人类可读的时间打印输出:
> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500
此外,您可以添加
when = !stat -c %y .git/FETCH_HEAD
到[alias]
~/.gitconfig 文件中的部分(通过在任何 git repo 中运行以下命令行来自动执行此操作是最安全的)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
然后您可以随时使用新的“命令”找到此信息:
> git when
2015-02-23 15:07:53.086254218 -0500
[然后我想到做“man stat”,我发现“stat”程序还有很多其他可用的 % 参数。YMMV。]
该git show
命令显示最近提交的日期。这不是将提交拉到本地存储库的日期,但 Git 不会保留此类拉取信息。
您可以使用服务器上文件的 ctime(创建时间)找到上次拉取的时间。例如:
ls -lct
显示每个文件的 ctime,按最近的排序。
在非裸存储库(并且裸存储库git pull
对.git/logs
. 您可以使用git log -g
.
但是,尽管日志文件确实有时间戳,但似乎不会git log -g
打印它。但是,如果您看一下.git/logs/HEAD
示例,您会发现该格式非常易于解析 - 它包含 ref(或 HEAD)从什么更改、更改为、谁更改、何时以及活动消息。
git show -1 --stat
此 git 命令显示最新更改提交时间和日期以及消息
使用蟒蛇:python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
python -c "import os, datetime ;print datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime)"
或者
python3 -c "import os, datetime ;print(datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime))"
跨平台 (OSX/Linux) Bash 解决方案
@smooves
受到答案的极大启发: https ://stackoverflow.com/a/9229377/622276和评论。
但我正在维护自己的bash 提示 git 集成
来源在这里: https ://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
Windows 版 Git Bash 中的版本与 linux 版本相同。
我正在将跨平台选项编译为案例语句。因此,它将在我导航到的任何 git repo 上分叉一个提取过程,该过程自上次提取以来超过 15 分钟,因此我的提示脚本的其余部分知道我是否有东西要提取。
Git 雷达已经习惯了这一点,但它需要保存一个文件,其中包含最后一次获取调用的时间戳。这不会写入临时文件。
git rev-parse --show-toplevel
只是意味着如果我在 git repo 中的任何地方,它将获得 repo 根目录,以便我们可以引用.git
文件夹路径。
# No repo == no more work
local REPO_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
if [[ -n $REPO_ROOT && -e "$REPO_ROOT/.git/FETCH_HEAD" ]]; then
case $OSTYPE in
darwin*)
local LAST_FETCH="$(stat -f '%m' $REPO_ROOT/.git/FETCH_HEAD)"
local FETCH_THRESHOLD="$(date -v-15m +%s)"
;;
*)
local LAST_FETCH="$(stat -c %Y $REPO_ROOT/.git/FETCH_HEAD)"
local FETCH_THRESHOLD="$(date -d'15 minutes ago' +%s)"
;;
esac
# Fork fetch process in background
if [[ $LAST_FETCH -lt $FETCH_THRESHOLD ]]; then
git fetch --all --quiet --prune 2> /dev/null &
fi
fi
这是一个小的 git 包装器。使用名称git
和权限安装它chmod a+x git
。然后添加last_successful_fetch
到.git/info/exclude
.
当您想查看结果时,请使用stat last_successful_fetch
.
#!/bin/sh
# This script just invokes git as expected, plus one additional action:
# If there stands last_successful_fetch in .git/info/exclude, then
# this file will be touched in top dir.
"`which --all git | uniq | head -n 2 | tail -n 1`" "$@"
status=$?
if [ _"$1" = _pull -o _"$1" = _fetch ]; then
if grep last_successful_fetch "`git rev-parse --git-dir`/info/exclude" >/dev/null 2>&1; then
[ $status = 0 ] && touch last_successful_fetch
fi
fi
$ # for the latest pull even if there's nothing new
$ stat -c %y .git/FETCH_HEAD
2017-12-15 11:24:25.000000000 +0100
$
$ # for records of updated references
$ git reflog --date=iso
db2bba84 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2017-12-14 11:28:39 +0100}: pull: Fast-forward
37fe73ad HEAD@{2017-12-03 17:09:32 +0100}: pull: Fast-forward
c4107fcd HEAD@{2017-11-27 18:53:40 +0100}: clone: from https://github.com/macports/macports-base
$
$ # for a more detailed view of the latter
$ git log -g
commit db2bba84d5e8cd82ec94a19129deb91ef62287bb (HEAD -> master, origin/master, origin/HEAD)
Reflog: HEAD@{0} (me <me@machine.local>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <ryandesign@macports.org>
Date: Wed Dec 13 10:23:47 2017 -0600
portutil.tcl: Fix renames that supply the -force option
Treat $options as a list not as a string.
See: https://trac.macports.org/ticket/55492
[snip]
在我的情况下,我不得不返回获取倒数第二个 pull(previous-1),所以使用了这个 reflog 命令,注意 reflogs 默认在 90 天后过期。希望这对某人有帮助。
master ± -> git reflog --date=iso|grep pull
67718cc11 HEAD@{2022-01-25 10:14:31 +0530}: pull: Fast-forward
9bb64364a HEAD@{2021-12-13 18:22:17 +0530}: pull: Fast-forward
f5cf7c887 HEAD@{2021-11-29 13:08:14 +0530}: pull: Fast-forward
然后您可以签出该哈希并创建一个分支。(下面命令中的分离头)
git checkout 9bb64364a
正如用户所建议的那样:https ://stackoverflow.com/users/83646/smoove ,您可以通过检查 .git/FETCH_HEAD 的修改时间戳来找到最后一次在 repo 上调用 git pull 的时间:git 写入 .git/ FETCH_HEAD 文件每次你拉或取时,即使没有什么可以拉。
示例:{master} vinegupt@bhling69(/imsgit_local/work/vinegupt/ims_18.5a/ims_common)$ stat -c %y .git/FETCH_HEAD
2018-02-12 02:01:50.487160386 +0530