git 解决冲突 —— git stash 当前修改
如果修改了本地的内容后,直接 git pull
提示合并冲突信息 error: Your local changes to the following files would be overwritten by merge. Please commit your changes or stash them before you merge.
此时可以先使用 git commit
或 git stash
来将当前的修改保存起来,也就是对应的 git commit
之前和之后的修复冲突。
在文件合并发送冲突时,需要合并一些代码,且不想将此时的修改进行提交,可以使用 git stash
来对当前的修改进行暂存,具体操作过程如下。
1、暂存当前工作目录的修改
git stash
git stash
会将当前工作目录的所有修改进行暂存,并将工作目录恢复到未修改之前的状态,即最后一次提交的状态,此时再进行 git pull
操作(这个命令其实相当于先将有冲突的文件进行备份后,然后再将其revert
)。
2、拉取远程代码仓内容
git pull
3、恢复暂存区的修改
git stash pop
该命令会将暂存区中的修改弹出,并合并到当前工作目中,此时会出现冲突信息以及标识和提示,需要进行手动的修改冲突文件。
可以使用文本编辑器打开冲突的文件进行修改,也可以使用 TortoiseGit 来编辑修改冲突文件。在此使用 vimdiff
打开冲突文件,并解决冲突
依次对所有冲突的文件进行修改编辑,合并其中的内容。此时相当于先将远程仓库的内容拉取到本地后,再将本地的修改添加进去。
4、标记冲突已解决
git add <fixedFile>
解决完对应文件冲突后,需要使用以上的命令来标记该文件的冲突已解决。然后可以继续进行编辑或直接提交,这种方式是没有额外的 Merge 提交信息。
5、查看当前工作目录状态
git status
查看工作目录的状态,是否有未解决的冲突文件,或未提交的修改等。
6、提交本地修改
git commit -m "Message for this change"
提交本地的修改
【总结】
git stash list
:显示所有的暂存数据git stash clear
:清除所有的暂存数据,在解决冲突后默认是不会清理对应的暂存数据,可以是用该命令进行清除。git stash show
:显示默认的暂存做了哪些修改,默认是第一个,如果有多个,也可以在后面加上具体的索引,如显示第二个,即可以在 show 后面加上: stash@{1}git stash drop stash@{$index}
:会将暂存列表中索引为 index 的暂存丢弃掉git stash
操作只是对已被 git 追踪的文件起作用,如果有的文件还没有 Versioned 将不会起作用。