如何用Bash命令强制拉取src目录下的多个Git仓库
批量忽略本地变更并拉取Git仓库代码
方案一:用git checkout .丢弃未暂存修改后拉取
可以通过sh -c在find的-exec中串联多个Git命令,实现先丢弃未暂存修改再拉取:
find . -mindepth 1 -maxdepth 1 -type d -exec sh -c 'echo "处理仓库:{}"; git -C {} checkout .; git -C {} pull' \;
- 说明:
git checkout .仅会丢弃工作区未暂存的修改,已暂存的变更不会被处理,若存在已暂存内容,后续pull仍可能触发冲突。
方案二:用git reset --hard彻底重置后拉取(更推荐)
如果需要完全清除所有本地变更(包括已暂存内容),确保本地代码和远程完全一致,用reset --hard更稳妥:
find . -mindepth 1 -maxdepth 1 -type d -exec sh -c 'echo "处理仓库:{}"; git -C {} fetch origin; git -C {} reset --hard origin/master; git -C {} pull' \;
也可以简化为(reset --hard后pull实际冗余,仅保留fetch+reset即可):
find . -mindepth 1 -maxdepth 1 -type d -exec sh -c 'echo "处理仓库:{}"; git -C {} fetch origin; git -C {} reset --hard origin/master' \;
- 说明:
git fetch origin先拉取远程最新代码到本地远程分支git reset --hard origin/master强制将本地当前分支重置为远程master分支状态,会永久丢弃所有未提交的工作区、暂存区变更- 若你的仓库默认分支是
main而非master,需将命令中的master替换为main
注意事项
- 两种方案都会永久删除本地未提交的修改,执行前务必确认这些变更无需保留
- 若不在
/src目录下执行命令,需将find中的.替换为/src
内容的提问来源于stack exchange,提问作者granduser
相关产品推荐
相关产品推荐

