Git如何仅提交指定跟踪目录的变更,排除其他跟踪目录?
分步提交不同目录变更的解决方案
提交dir2的所有变更(含已跟踪修改与未跟踪新增)
把dir2下所有变更加入暂存区:
git add dir2/这个命令会递归处理dir2下的所有内容:已跟踪文件的修改会同步到暂存区,未跟踪的新文件/子目录也会被添加进来。
提交暂存区中dir2的内容:
git commit -m "提交dir2目录的所有变更"注意:不要加
-a参数,否则Git会自动把所有已跟踪文件的修改(包括dir1的)加入暂存区,导致提交内容混入dir1的变更。
提交dir1的所有变更
完成dir2的提交后,用同样的逻辑处理dir1:
- 将dir1下所有变更加入暂存区:
git add dir1/ - 提交dir1的变更:
git commit -m "提交dir1目录的所有变更"
解决git commit dir2/ --dry-run包含dir1内容的问题
如果执行该命令时出现dir1的内容,本质是暂存区中已有dir1的修改。你可以先通过以下命令确认暂存区状态:
git diff --cached
根据情况处理:
- 若想保留dir1的修改到后续提交,直接按上面的步骤提交dir2即可(提交dir2不会影响暂存区里的dir1内容);
- 若想清空暂存区重新处理,执行:
之后再重新执行git reset HEADgit add dir2/和git commit。
进阶技巧:强制仅提交指定目录
如果担心暂存区已有其他内容干扰,可以用--only参数强制Git只处理dir2的内容:
git add dir2/ && git commit -m "提交dir2的所有变更" --only dir2/
内容的提问来源于stack exchange,提问作者NIck
相关产品推荐
相关产品推荐

