You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git变基时未变更的本地修改文件修改时间被更新,如何保留?

解决Git变基后本地修改文件时间戳被更新的问题

针对你使用Git 2.18.0时遇到的变基场景:本地修改文件(内容未被变基影响)时间戳仍被更新,进而触发全量构建的问题,提供以下几种可行方案:

1. 跳过无必要的变基操作(针对分支无提交变更场景)

如果待变基分支自上次变基后没有任何提交变更,可先判断分支与目标分支的差异,直接跳过变基,从根源避免时间戳被修改:

# 替换<target>为你要变基的目标分支(如origin/master)
if git diff --quiet <target> HEAD; then
    echo "当前分支与目标分支无差异,无需执行变基"
else
    git rebase <target>
fi

2. 手动暂存+恢复时保留时间戳

通过手动暂存本地修改、备份时间戳的方式,确保变基后文件修改时间不被覆盖:

步骤1:备份本地修改文件的时间戳

# 收集所有本地已修改文件的时间戳,保存到临时文件
git status --porcelain | grep '^ M' | awk '{print $2}' | while read file; do
    stat -c "%Y %n" "$file" >> .git_mtime_backup
done

步骤2:暂存修改并执行变基

git stash push -m "temp stash for rebase"
git rebase <target>

步骤3:恢复本地修改和原时间戳

git stash apply --index
# 恢复文件原时间戳
cat .git_mtime_backup | while read ts file; do
    touch -d "@$ts" "$file"
done
rm .git_mtime_backup

3. 变基后回滚文件时间戳

如果已经完成变基,且确认文件内容未发生变更,可从变基前的HEAD恢复文件的原时间戳:

# 遍历所有变基后仍处于修改状态的文件
git status --porcelain | grep '^ M' | awk '{print $2}' | while read file; do
    # 从变基前的HEAD(HEAD@{1})获取文件原时间戳并设置
    git show HEAD@{1}:"$file" > /tmp/git_temp_file
    touch -r /tmp/git_temp_file "$file"
    rm /tmp/git_temp_file
done

补充说明

你遇到的Git FAQ描述与实际行为的差异,是因为FAQ中“修改过的文件”指的是变基过程中Git主动修改内容的文件;而本地修改的文件在变基时会被暂存后恢复,这个恢复过程会触发文件重写,导致修改时间被更新为当前时间,属于Git处理本地修改的流程特性。

内容的提问来源于stack exchange,提问作者Maxim Yanchenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:26