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

从其他分支检出文件夹未同步删除文件,如何自动同步所有变更?

解决Git分支间文件夹全量同步(含删除文件)的问题

我完全懂你遇到的麻烦——用git checkout DEV -- TSTGIT确实只会同步新增和修改的文件,压根不会管目标分支里存在但源分支已经删掉的文件。要实现无需交互的全量同步,这几种方法绝对靠谱:

方法一:先清除目标文件夹,再检出源分支内容

这是最直接的思路,先把UAT分支上的TSTGIT文件夹删掉,再从DEV分支拉取完整的文件夹内容:

# 确保当前在UAT分支上执行
rm -rf TSTGIT/
git checkout DEV -- TSTGIT

这样就能1:1复刻DEV分支上TSTGIT的当前状态,包括那些在DEV里已经被删除的文件,也会同步从UAT分支移除。要是担心误删,可以先备份一下:

mv TSTGIT TSTGIT_backup

方法二:用git restore替代git checkout(Git 2.23+适用)

Git 2.23版本之后引入了git restore命令,比checkout的路径操作逻辑更清晰。加上--source指定源分支,再用--staged和--worktree参数,可以同时更新暂存区和工作区,自动处理删除操作:

git restore --source=DEV --staged --worktree TSTGIT/

这条命令会强制把TSTGIT文件夹的状态完全对齐到DEV分支,不管是新增、修改还是删除的变更,都会自动同步。

为啥git checkout DEV -- TSTGIT不处理删除?

其实是Git的设计逻辑问题——针对路径的git checkout操作,只会把源分支存在的文件同步到目标分支,它的定位是“补全/更新”而非“完全覆盖”,所以不会主动删除目标分支里有但源分支没有的文件,这就是你看不到删除操作被同步的原因。

额外小技巧:给频繁操作加Git别名

要是你经常需要跨分支同步文件夹,可以把命令做成Git全局别名,用起来更方便:

git config --global alias.sync-folder '!f() { rm -rf "$2" && git checkout "$1" -- "$2"; }; f'

之后只要输入一行命令就能完成同步:

git sync-folder DEV TSTGIT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:52:21