使用Git difftool+Beyond Compare时本地缺失文件的替代方案咨询
解决Git Difftool对比本地缺失文件无法保存的问题
方法1:临时从dev分支拉取文件到master工作区(无需提前提交)
直接执行以下命令,把dev分支的src/foo.hpp拉到当前master的工作区:
git checkout dev -- src/foo.hpp
此时master工作区会生成src/foo.hpp,再运行git difftool dev,Beyond Compare就能正常加载本地文件,修改后可直接保存到工作区。后续如果不想保留修改,执行git restore src/foo.hpp即可撤销。
方法2:修改Difftool配置,自动处理缺失文件场景
针对你的Beyond Compare配置,修改.gitconfig中的bc4命令,加入逻辑判断处理/dev/null的情况:
[difftool "bc4"] cmd = if [ "$REMOTE" = "/dev/null" ]; then mkdir -p $(dirname "src/foo.hpp"); cp "$LOCAL" "src/foo.hpp"; "\"/mnt/c/Program Files/Beyond Compare 4/BComp.exe\" \"$(wslpath -aw \"src/foo.hpp\")\" \"$(wslpath -aw \"$LOCAL\")\" /lefttitle=\"本地文件(src/foo.hpp)\" /righttitle=\"Dev分支文件\""; else "\"/mnt/c/Program Files/Beyond Compare 4/BComp.exe\" \"$(wslpath -aw \"$LOCAL\")\" \"$(wslpath -aw \"$REMOTE\")\" /lefttitle=\"$(wslpath -aw \"$LOCAL\")\" /righttitle=\"$(wslpath -aw \"$REMOTE\")\""; fi
这个配置会先判断$REMOTE是否为/dev/null,若是则自动在master工作区创建对应目录并复制临时文件到目标路径,再启动Beyond Compare对比本地文件和dev分支的文件,修改后可直接保存到src/foo.hpp。
方法3:用Git命令直接导出dev分支的文件内容
如果只是需要获取dev分支的src/foo.hpp内容到master工作区,执行:
git show dev:src/foo.hpp > src/foo.hpp
这会将dev分支的该文件内容导出到master工作区,之后就能正常使用difftool对比修改,同样无需提前提交。
内容的提问来源于stack exchange,提问作者nowox
相关产品推荐
相关产品推荐

