有时当前分支只想同步远程某个目录的最新内容,其它文件保持不动。不必整分支 merge / rebase,直接把指定路径从远程引用检出即可。
用法
先把远程更新拉下来:
git fetch origin
再只把某个目录更新成远程分支上的版本,例如从 origin/pre 更新 lua/:
git checkout origin/pre -- lua/
等价的新写法:
git restore --source=origin/pre -- lua/
也可以指定单个文件或多个路径:
git checkout origin/pre -- lua/ config.json
效果
- 工作区和暂存区里,这些路径会变成
origin/pre上的内容 - 其它目录、文件不受影响
- 变更已经 staged,确认没问题后直接提交:
git commit -m "sync lua/ from origin/pre"
注意
origin/pre要先fetch过,本地才有这个引用- 这是「用远程某版本覆盖本地这些路径」,会丢掉这些路径上未提交的本地改动;有改动先备份或 stash
- 这不是 sparse checkout,只是一次性按路径检出,不会改变之后
pull的范围