一、git中没有提交到本地仓库的改变内容会带到别的分支
git 切换分支时会把未add或未commit的内容带过去,这样可能造成代码覆盖的问题,这个在工作中会经常遇到!
二、对本地仓库的文件进行了修改,但没有提交到本地仓库,切换分支时会造成代码覆盖
master分支和dev01分支都存在a.txt这个文件,在master分支修改了a.txt后,并没有提交到本地仓库,这个就会造成代码覆盖的问题。
此时切换到dev01分支就会提示会造成代码覆盖
点击smart checkout解决代码覆盖
如果不保留左边master分支的内容,从dev01分支再切回master分支,会发现master分支没有提交到本地仓库的内容全部没有了。具体保留左边还是右边的内容按实际情况。
三、git stash和git unstash的使用
git stash会将提交到暂存区和对本地仓库已有文件进行了修改但是没有提交的内容进行临时存储。不能对未添加到暂存区的内容进行临时存储。
下图是使用git unstash展示可以临时存储的内容
git stash不能指定哪些文件进行临时存储,只能git进行自动识别。
四、 Shelve Changes和Unshelve
Shelve Changes和Unshelve可以指定哪些文件进行临时存储。
4.1、对文件进行临时存储
git 切换分支时会把未add或未commit的内容带过去,所以切换分支之前要进行文件的临时存储。具体的操作见下图
4.2、文件进行临时存储后,改动的内容就在当前分支不存在了
对比临时存储前和临时存储后的文件:
临时存储前改动和新增的文件
临时存储后新增和修改后的文件就不存在了
4.3、 Unshelve操作释放临时存储的文件
git在切换回当前分支时可以通过 Unshelve操作,恢复当前的分支新增和修改的内容。
使用 Unshelve操作后,当前分支的新增和修改的内容就恢复了。
4.4、总结:
1、 在当前分支master切换到dev01分支时,新增和修改的内容容易造成代码覆盖,所以在切换到dev01分支前,使用Shelve Changes将新增和修改的内容进行临时存储。
2、在dev01分支处理完之后,可以直接切换回master分支,在master分支进行Unshelve操作可以释放临时存储的文件。
3、Shelve Changes只能对新增和修改的内容进行临时存储,不能对未提交到暂存区的内容进行临时存储
4、Shelve Change可以对指定的文件夹进行临时存储