VS Code中Staged changes的含义、产生原因及无法操作的解决办法
解答
什么是Staged Changes
Git的文件变更流转分为三个独立区域:工作区(你当前编辑文件的本地目录)、暂存区(也叫Index,是提交前的临时存储区)、本地仓库。Staged Changes指的就是已经通过git add命令添加到暂存区、等待下一步提交到本地仓库的所有变更内容,这部分变更已经被Git标记为待提交状态。
合并冲突时无法操作Staged Changes的原因
- 执行跨分支合并触发代码冲突后,Git会先自动处理所有无冲突的文件变更,默认将这部分内容直接放到暂存区,也就是你在「Changes by stages」标签页看到的内容
- 存在合并冲突的文件会停留在工作区,被Git标记为冲突状态
- VS Code的暂存区变更展示面板默认不会提供「接受/拒绝」的操作入口,只有尚未进入暂存区的冲突文件,才会展示合并选择的交互按钮,所以你只能查看差异无法操作。
对应解决方法
处理暂存区的自动合并内容
- 若确认暂存区的自动合并结果符合预期,无需额外操作,等冲突全部解决后一起提交即可
- 若需要修改暂存区的内容,执行命令将指定文件撤回工作区调整:
git reset HEAD <需要调整的文件名>
调整完成后重新执行git add <文件名>加入暂存区即可。
处理合并冲突完成合并
- 在VS Code左侧源代码管理面板,找到标记为both modified的冲突文件并打开
- 文件内会标注冲突内容段,格式如下:
<<<<<<< HEAD 你当前所在分支的代码内容 ======= 被合并分支的代码内容 >>>>>>> 被合并分支的分支名
- 手动编辑保留需要的代码,删除
<<<<<<<、=======、>>>>>>>三行冲突标记 - 所有冲突处理完成后,执行
git add <冲突文件名>把解决后的文件加入暂存区 - 执行
git commit完成合并操作即可。
解决git add .误加不需要代码的问题
git add .的默认逻辑是将当前目录下所有未被.gitignore规则忽略的变更全部加入暂存区,误加后按场景处理:
- 尚未执行
git commit提交:执行git reset HEAD <不需要的文件名>即可将对应文件从暂存区撤回工作区,不会修改文件的实际内容 - 已经执行了提交操作:执行
git reset --soft HEAD~1撤回最近一次提交,所有变更会保留在暂存区,再按上面的方法移除不需要的文件后重新提交即可 - 日常使用建议优先用
git add <指定文件名/目录路径>添加需要提交的变更,不要默认使用git add .;同时把不需要纳入版本管理的文件、目录规则写到项目根目录的.gitignore文件中,从根源避免误加。
内容的提问来源于stack exchange,提问作者Yohesky Portillo
相关产品推荐
相关产品推荐

