当我们在开发项目的时候,突然来一个变更需要修改,但你又不想提交,这时我们除了将当前项目提交(commit
)后切换(checkout
) 到其他分支外,我们还可以先将当前的修改暂存(stash
)起来,然后再切换(checkout
)到其他分支,而不需要提交(commit
),这样就可以减少一个 commit
git stash 暂存文件
git stash 或 git stash save ‘注释’ 暂存修改
1、文件已经被git跟踪,只是修改了代码(而不是新增加文件),我们可以使用git stash或git stash save “注释” 来暂存修改。
2、如果有新添加的文件,那么就需要添加参数 -a(会把隐藏的文件或.gitnore忽略的文件也暂存)慎用
-u 只暂存未跟踪的文件
- 添加 -a 参数 (git stash -a 或 git stash save -a “注释”)
慎用
- 先 git add . 然后再使用 git stash 或 git stash save “注释” 来暂存修改
- 添加 -u 参数 (git stash -u 或 git stash save -u “注释”)
推荐
注: stash@{id}里面的id默认从0开始
git-stash文档
git stash list 查看之前缓存的所有stash
1 | $ git stash list |
git stash show 查看某一次stash信息 修改了哪些文件
git stash show -p ‘stash@{0}’ 查看某一次stash信息 查看修改文件里修改的内容
1 | $ git stash show stash@{0} |
git stash apply 取出暂存区的stash 但不在stash list中删除
git stash apply
不指定stash 则默认取出第一条stash暂存git stash apply stash@{1}
取出指定stash
git stash drop 删除暂存区的stash
git stash drop
不指定stash 则默认删除第一条stash暂存git stash drop stash@{1}
删除指定stash
git stash pop 取出并删除暂存区的stash
git stash pop
不指定stash 则默认取出并删除第一条stash暂存git stash pop stash@{1}
取出并删除指定stash
git stash clear 清空stash列表中所有的stash
如果你使用的是vscode中windows的powershell命令行,则需要注意操作某个指定的stash时, 'stash@{1}' 需要加上引号,否则会有如下问题,使用git bash命令行或者cmder等命令行工具可以不用加
1
2
3git stash apply stash@{1}
----------------------
unknown option: -encodedCommand
stash drop 误删恢复
1 | 1. git fsck --lost -found :查看最近移除的文件 |
git tag 标签
项目的版本管理中,每当一个release版本发布时,需要做一个记录,以便以后需要的时候重新打包这个版本,这时候就用到tag这个功能.
- 添加标签
git tag -a v1.1.0 -m "Release version"
-a v1.1.0 标签名称 -m 后面时注释
- 查看所有标签
git tag --list
提交标签到远程服务器
1
2
3git push origin --tags // 提交所有tag至服务器端
git push origin v1.1.0 // 提交某个tag至服务器端
// 注:git push origin master操作不会推送标签到服务器端。切换到某个标签
git checkout [tagname]
切换到某个tag时, 不处于任何分支,处于有利状态,也未版本回退,请不要再次tag上修改,修改bug可以基于此tag创建分支并提交
- 查看某个标签信息
git show v1.1.0
- 删除标签
git tag -d v1.1.0
- 删除远程服务器标签
git push origin :refs/tag/v1.1.0
git 撤销更改
- 本地修改了一堆文件(并没有使用
git add
到暂存区),想放弃修改。git checkout -- <filename> 或 git checkout -- . (所有修改文件)
将工作区中的文件的修改撤销,只撤销还没有add到暂存区的文件,不会撤销暂存区的文件,只放弃了修改的文件,新增和删除的不会被放弃
- 本地新增或删除了一堆文件(并没有
git add
到暂存区),想放弃修改git clean -f <filename>
移除本地新增,修改或删除的未add的文件
git回退
- 本地修改/新增了一堆文件,已经
git add
到暂存区,想放弃修改。git reset [HEAD] <filename> 或 git reset [HEAD] .
或者 git 高版本可用git restore --staged <filename>
- 本地通过
git add & git commit
之后,但还未git push
,想要撤销此次commitgit reset commit_id 或 git reset --hard commit_id
- 撤销
git push
到远程的代码 (谨慎操作)首先在本地仓库使用git reset –hard [commit_id]将本地仓库重置为需要撤销的版本,然后使用git push origin -f 进行提交,这样可以强制远程仓库与本地仓库一致
- 撤销commit注释(修改commit注释) 最近一次提交
git commit --amend -m '备注信息'
即可覆盖上次信息合并为一次提交
参考资料
git各种情况的版本回退
Git撤销修改
Git中文网-GitLab中文网 - Git安装、git使用、git下载、git中文
非常不错的git-tips
三年 Git 使用心得 & 常见问题整理