Git操作:如何从指定分支的单个目录拉取提交至当前分支
仅同步指定目录的分支变更
前提准备
确保当前处于branch1分支:
git checkout branch1
如果branch1的directory1有未提交的本地修改,先暂存:
git stash
方法一:直接拉取目标目录的最新状态
适合不需要保留branch1中directory1本地修改,只想同步branch2里directory1当前最终状态的场景:
- 从
branch2拉取directory1的内容到当前分支:
git checkout branch2 -- directory1/
- 提交变更:
git add directory1/ git commit -m "同步branch2中directory1的最新内容"
方法二:选择性合并涉及目标目录的提交
适合需要保留branch2中directory1的提交历史,或者branch1的directory1有自己的修改需要合并的场景:
- 查看
branch2领先于branch1且涉及directory1的所有提交(可选,用于确认变更来源):
git log branch1..branch2 -- directory1/
- 批量应用这些提交中仅涉及
directory1的变更(-n参数表示不自动提交,方便处理冲突):
git cherry-pick -n branch1..branch2 -- directory1/
- 若有冲突,手动解决后执行提交:
git add directory1/ git commit -m "从branch2 cherry-pick directory1的相关变更"
方法三:合并分支但仅保留目标目录变更
适合需要记录分支合并关系,但完全忽略directory2变更的场景:
- 用
ours策略合并branch2,此策略会保留branch1的所有内容,忽略branch2的变更:
git merge -s ours branch2
- 拉取
branch2中directory1的内容覆盖当前分支的对应目录:
git checkout branch2 -- directory1/
- 修改合并提交,纳入
directory1的变更:
git add directory1/ git commit --amend --no-edit
后续操作
如果之前暂存了本地修改,恢复:
git stash pop
内容的提问来源于stack exchange,提问作者coder-coder
相关产品推荐
相关产品推荐

