git中的stash | 青训营笔记

199 阅读2分钟

这是我参与「第三届青训营-后端场」笔记创作活动的第5篇笔记,是关于git和我实际项目开发过程中,我认为比较值得记记笔记的点,在实际的合中,尽管已经做了很好的工作划分,但是由于业务的互相调用,还是会存在冲突,所以在处理冲突时,如果自己的代码还没有写完,不值得进行提交,那么久可以用stash,这个命令非常有用,也是在实际联合开发中我经常用到 的命令,所以这里重点介绍一下这个git命令

stash的原理:

将本地没提交的内容进行缓存并从当前分支移除。缓存的数据结构为堆栈,先进后出。

git commit的内容不会被缓存, 但git add的内容会被缓存。 stash 只会操作被git追踪的文件,也就是说,如果有新增的文件,需要进行git add [文件名]让git追踪该文件,再进行stash就可以了。

stash的参数:

1、git stash / git stash save

git stash与git stash save是一样的,将没有提交的内容缓存并移除,而这条缓存名称为最新一次提交的commit的内容,如果没有本地提交则是拉远程仓库是的commit内容.

gitstashsave"缓存测试1"SavedworkingdirectoryandindexstateOnmaster:缓存测试1git stash save "缓存测试1" Saved working directory and index state On master: 缓存测试1 git stash save "缓存测试2" Saved working directory and index state On master: 缓存测试2

2、git stash list

返回缓存的列表

$ git stash list
stash@{0}: On master: 缓存测试2
stash@{1}: On master: 缓存测试1

3、git stash pop

将缓存堆栈中最新的缓存内容pop出来,并应用到当前分支上,且会删除堆中的该条记录。

$ git stash pop

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   nlog.config

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (895f6ee195fcc02e54f146b9249c04451be70f14)

$ git stash list

stash@{0}: On master: 缓存测试1

也可以pop指定堆栈中的某条记录。

git stash pop stash@{0}

4、git stash apply

与pop相似,但他不会在堆栈中删除这条缓存,适合在多个分支中进行缓存应用。

5、git stash drop / git stash clear

删除单个缓存

git stash drop stash@{0}

全清

git stash clear

6、git stash show

指定或最新缓存与当前分支差异。

git stash show stash@{0}

加上-p可以看详细差异。

7、git stash branch

指定或最新缓存创建分支。