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

如何用Git恢复仅修改A.json的文件夹变更,排除同时改B.json的情况

实现Git修改文件的选择性恢复脚本

针对你的需求,完全可以通过Bash脚本实现。核心思路是先获取所有已修改的文件,按文件夹分组后判断修改情况,只恢复仅修改了A.json的文件夹。

脚本代码

#!/bin/bash

# 获取所有已修改的文件路径列表
modified_files=$(git diff --name-only)

# 用关联数组存储每个文件夹的修改文件类型(A/B)
declare -A folder_change_status

# 遍历每个修改文件,记录对应文件夹的修改状态
for file in $modified_files; do
    folder_path=$(dirname "$file")
    file_name=$(basename "$file")

    if [[ "$file_name" == "A.json" ]]; then
        folder_change_status["$folder_path"]+="A"
    elif [[ "$file_name" == "B.json" ]]; then
        folder_change_status["$folder_path"]+="B"
    fi
done

# 遍历所有有修改的文件夹,执行选择性恢复
for folder in "${!folder_change_status[@]}"; do
    status=${folder_change_status["$folder"]}
    # 仅当文件夹下只有A.json被修改时,执行恢复
    if [[ "$status" == "A" ]]; then
        echo "正在恢复文件夹: $folder"
        git checkout "$folder"
    fi
done

脚本说明

  1. 获取修改文件:git diff --name-only会输出所有已修改但未提交的文件路径,过滤掉diff的具体内容,只保留路径信息。
  2. 分组记录修改状态:通过dirname提取每个文件的父文件夹路径,用关联数组记录每个文件夹下修改的是A.json还是B.json——如果同时修改两个文件,数组值会是AB,仅修改A则是A。
  3. 执行选择性恢复:遍历所有有修改的文件夹,仅当状态为A时,执行git checkout恢复该文件夹的所有内容。

使用注意事项

  • 请在Git仓库的根目录下执行脚本
  • 首次测试时,可以注释掉git checkout "$folder"这一行,先查看echo输出的恢复列表是否符合预期,确认无误后再取消注释执行实际恢复
  • 脚本支持嵌套子文件夹,无论层级多少,都会正确识别每个文件的直接父文件夹

内容的提问来源于stack exchange,提问作者Wenda Jiang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:18:08