当我们在开发项目的时候,突然来一个变更需要修改,但你又不想提交,这时我们除了将当前项目提交(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 list
查看之前缓存的所有stash
git stash list
-------------------------
stash@{0}: On masterOrder: masterOrder
stash@{1}: On devOrder: devOrder
git stash show
查看某一次stash
信息 修改了哪些文件
git stash show
查看某一次stash
信息 修改了哪些文件
git stash show stash@{0}
-------------------------
gulpfile.js | 1 +
1 file changed, 1 insertion(+)
git stash show -p ‘stash@{0}’
查看某一次stash
信息 查看修改文件里修改的内容
-## git设置用户名和邮箱
+## git配置 设置用户名和邮箱
* `git config --global user.email xxx@163.com` 配置用户邮箱
-* `git config --list 或 git config -l` 查看全局配置
+* `git config --list 或 git config -l` 查看git系统配置
+* `git config --global -l` 查看git全局配置
+* `git config --global --unset user.name` 删除全局配置
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
it 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
等命令行工具可以不用加
git stash apply stash@{1}
----------------------
unknown option: -encodedCommand
git tag 标签
项目的版本管理中,每当一个release版本发布时,需要做一个记录,以便以后需要的时候重新打包这个版本,这时候就用到tag这个功能.
- **添加标签 **
git tag -a v1.1 -m "Release version" -a v1.1 标签名称 -m 后面时注释
- 查看所有标签
git tag --list
- 提交标签到远程服务器
git push origin --tags // 提交所有tag至服务器端
git push origin v1.1 // 提交某个tag至服务器端
注:git push origin master操作不会推送标签到服务器端。
- **切换到某个标签 **
git checkout [tagname]
切换到某个tag
时, 不处于任何分支,处于有利状态,也未版本回退,请不要再次tag
上修改,修改bug
可以基于此tag
创建分支并提交
- 查看某个标签信息
git show v1.1
- **删除标签 **
git tag -d v1.1
- 删除远程服务器标签
git push origin :refs/tag/v1.1
git 撤销更改
- 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改。
git checkout -- <filename>
git checkout -- . (所有修改文件)
- 将工作区中的文件的修改撤销,只撤销还没有add到暂存区的文件,不会撤销暂存区的文件,只放弃了修改的文件,新增和删除的不会被放弃
- 本地新增或删除了一堆文件(并没有git add到暂存区),想放弃修改
git clean -f <filename>
- 移除本地新增,修改或删除的未add的文件
- 本地修改/新增了一堆文件,已经
git add
到暂存区,想放弃修改。
git reset [HEAD] <filename>
git reset [HEAD] .
或者 git 高版本可用
git restore --staged <filename>
- 本地通过git add & git commit之后,但还未git push,想要撤销此次commit
git reset commit_id
git reset --hard commit_id
- 撤销git push到远程的代码 (谨慎操作)
首先在本地仓库使用
git reset –hard [commit_id]
git reset –hard [commit_id]
将本地仓库重置为需要撤销的版本,然后使用
git push origin -f
进行提交,这样可以强制远程仓库与本地仓库一致
- 撤销commit注释(修改commit注释) 最近一次提交
git commit --amend -m '备注信息'
即可覆盖上次信息合并为一次提交