解决方案有三种:git
第一种:(强烈不推荐,要被骂)无视,直接commit本身的代码。缓存
git commit -m "your msg"app
第二种:stash(强烈推荐方式)ide
stash翻译为“隐藏”,以下操做:工具
git stash
git pull
git stash pop
而后diff一下文件,看看自动合并的状况,并做出须要的修改。idea
git stash: 备份当前的工做区的内容,从最近的一次提交中读取相关内容,让工做区保证和上次提交的内容一致。同时,将当前的工做区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工做区的相关内容。因为可能存在多个Stash的内容,因此用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的全部备份,能够利用这个列表来决定从那个地方恢复。翻译
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。3d
3第三种 (强烈不推荐,应为会把你本身写的东西给覆盖掉了,不推荐)硬覆盖:放弃本地修改,直接用git上的代码覆盖本地代码:版本控制
git reset --hard
git pullcode
补充在 idea 中的上述操做:
第一步:右键项目名称->git->repository-> stash changes 而后填信息就能够备份了
第二步:右键项目名称->git->repository->pull
第三步:右键项目名称->git->repository->unstash changes
第三步中可能出现Your local changes would be overwritten by merge等等状况,是由于你更pull下来的文件中你在本地保存以前有修改,
出现这种状况,点击Your local changes would be overwritten by merge下面的view,一个文件一个文件的选择,选择的时候有三个文件,
左中右,中是结果文件,左是pull下来大的文件,右是本身本地修改的文件,若是要用pull下来的文件,则选择accept left,若是要保存本地修改的,则选择accept right便可
方法 2 stash:
方法 3 硬覆盖:
经常使用git stash命令:
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要能够的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示作了哪些改动,默认show第一个存储,若是要显示其余存贮,后面加stash@{$num},好比第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,若是想显示其余存存储,命令:git stash show stash@{$num} -p ,好比第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},若是要使用其余个,git stash apply stash@{$num} , 好比第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复以前缓存的工做目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工做目录下,默认为第一个stash,即stash@{0},若是要应用并删除其余stash,命令:git stash pop stash@{$num} ,好比应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :
删除全部缓存的stash
说明:新增的文件,直接执行stash是不会被存储的,举例以下:
如上图:在git status 那一步很明显能够看出来,我修改了README,添加了新文件abc.txt,而后执行了git stash save后,在执行git stash list 能够看到刚才的save是的信息,而后使用git stash show ,只显示了README的改动被存起来了。
咱们知道,执行了git statsh 之后,被存起来的在当前目录再执行git status 就看不到了,可是咱们如今再执行git status,以下:
这个文件还在,说明没有被存起来。说白了就是没有在git 版本控制中的文件,是不能被git stash 存起来的。
那要怎么办呢,这个文件我也想存起来,很明显,先执行下git add 加到git版本控制中,而后再git stash就能够了,以下:
最后一步能够看出来,这个新增文件已经被stash了。
这个时候再执行下git status ,被存起来的在当前目录就看不到了,以下:
这个时候,想切分支就不再会报错有改动未提交了。
若是要应用这些stash,直接使用git stash apply或者git stash pop就能够再次导出来了。
总结下:git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,可是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。
参考的一个连接中说到了如下,我摘录此处备份下(就是只stash一部分文件):
常规 git stash 的一个限制是它会一下暂存全部的文件。有时,只备份某些文件更为方便,让另一些与代码库保持一致。一个很是有用的技巧,用来备份部分文件: