Intro
暂存本地仓库中的改动
常用命令说明(以purchase-view为例)
# git help stash中的内容
git stash list [<options>]
git stash show [<options>] [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m|--message <message>]
[--] [<pathspec>...]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>
stash push
将变更内容暂存入堆栈
# stash前先修改本地文件
➜ purchase-view git:(test) echo 'add something' >> README.md
➜ purchase-view git:(test) ✗ echo '// add something2' >> babel.config.js
- stash所有改动(push可省略)
➜ purchase-view git:(test) ✗ git stash
- stash指定文件(push不可省略)
➜ purchase-view git:(test) ✗ git stash push README.md
➜ purchase-view git:(test) ✗ git stash push babel.config.js
- stash unstaged的文件(—keep-index/-k)
# "README.md"已经add
➜ purchase-view git:(test) ✗ git status
On branch test
Your branch is up to date with 'origin/test'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
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: babel.config.js
➜ purchase-view git:(test) ✗ git stash push --keep-index
Saved working directory and index state WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
➜ purchase-view git:(test) ✗ git status
On branch test
Your branch is up to date with 'origin/test'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
- 同理,还有[-u|—include-untracked] [-a|—all]参数可以控制stash push的内容
stash list
展示stash中的堆栈内容
# 承接stash push中"stash指定文件"
➜ purchase-view git:(test) git stash list
# 结果展示如下
stash@{0}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
stash@{1}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
stash show
展示stash中某条记录信息
# 承接stash push中"stash指定文件"
➜ purchase-view git:(test) git stash show stash@\{0\}
babel.config.js | 1 +
1 file changed, 1 insertion(+)
# 支持传入git diff的参数修饰,例如: "-p" ==> 展示文件内容
➜ purchase-view git:(test) git stash show stash@\{0\} -p
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
modified: babel.config.js
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
@ babel.config.js:53 @ module.exports = {
]
]
};
// add something2
stash drop
删除stash堆栈中指定的某次记录。如果没有指定记录,则移除栈顶的一条。
# 承接stash push中"stash指定文件"
➜ purchase-view git:(test) git stash drop stash@\{1\}
# drop后查看当前的堆栈,只剩一条记录
➜ purchase-view git:(test) git stash list
stash@{0}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
stash clear
清空stash堆栈。⚠️不可找回,操作前须谨慎。
stash pop
将stash堆栈中指定的某次记录应用到当前代码库并删除。如果没有指定记录,则使用栈顶的一条。
# 承接stash push中"stash指定文件"
➜ purchase-view git:(test) git stash pop
On branch test
Your branch is up to date with 'origin/test'.
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: babel.config.js
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (16f64a42190a46c8d11541313f9a5b6d4ac1c9ef)
➜ purchase-view git:(test) ✗ git stash list
stash@{0}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
stash apply
对当前仓库的操作同pop,但不删除stash堆栈的记录。
# 承接stash push中"stash指定文件"
➜ purchase-view git:(test) git stash apply
On branch test
Your branch is up to date with 'origin/test'.
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: babel.config.js
no changes added to commit (use "git add" and/or "git commit -a")
➜ purchase-view git:(test) ✗ git stash list
stash@{0}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
stash@{1}: WIP on test: e82c8f29 Merge branch 'feature/ISC-8693' into 'test'
E.G.
• 本地仓库存在修改的时候需要更新远端仓库代码;
• 本地仓库存在修改的时候需要切换仓库;
• 本地代码分多次提交测试。