Visual Studio 2017中Git分支切换后预览内容异常的问题
如何用Git预览单个分支的纯净内容(附你的场景问题分析)
首先明确说:当然可以预览单个分支的纯净内容,不过你遇到的问题是因为没处理工作区的未提交修改就切换分支导致的,咱们一步步拆解:
你的场景问题出在哪?
当你在TestBranch上做了未暂存、未提交的修改后直接切换到master,Git会默认把这些未提交的修改“携带”到新分支的工作区——只要这些修改的文件在两个分支里都存在,而且和master分支的对应文件没有冲突。
这就导致你切换到master后,那个View文件还是你修改后的版本(因为修改在工作区里,没被仓库的master分支内容覆盖),所以运行应用时自然会显示修改后的文本,而不是master分支原本的内容。
怎么正确预览单个分支的纯净内容?
因为你用的是Visual Studio 2017自带的Git,不用命令行也能搞定,推荐这几种方法:
- 先提交/暂存当前修改:回到TestBranch分支,在VS的团队资源管理器里,把你修改的View文件暂存或者直接提交到TestBranch。之后再切换到master,工作区就会完全匹配master分支的仓库内容,运行应用就能看到纯净的master版本了。
- 暂存修改(Stash):如果不想立刻提交修改,在TestBranch分支下,右键团队资源管理器里的未提交修改,选择“暂存更改”里的stash选项(或者在Git菜单里找“Stash Changes”)。这会把当前未提交的修改临时存起来,切换到master后工作区就是纯净状态。之后回到TestBranch,再用“Unstash Changes”就能恢复之前的修改。
- 临时分支存修改:如果连暂存都不想用,可以创建一个临时分支(比如叫
temp-save),把修改提交到这个临时分支,然后切回master,同样能看到纯净内容。之后需要恢复修改时,切回temp-save分支即可。
核心原理
Git的工作区是共享的,切换分支时,只有那些在仓库里有差异的文件会被替换,但未提交的修改会保留在工作区(只要不冲突)。所以要预览某个分支的纯净内容,必须保证工作区的未提交修改被妥善处理(提交、暂存或者移到其他分支),这样切换分支后工作区才会完全同步到目标分支的仓库状态。
内容的提问来源于stack exchange,提问作者Rajeev Menon




