git-stash - 将更改隐藏在脏工作目录中
使用
git stash
时要录制工作目录和索引的当前状态,但想回到干净的工作目录。该命令保存您的本地修改并恢复工作目录以匹配HEAD提交。此命令隐藏的修改可以用 列出,用
git stash list
进行检查git stash show
,并用 恢复(可能在不同的提交之上)git stash apply
。git stash
不带任何参数的调用等效于git stash push
. 默认情况下,stash 被列为“WIP on branchname … ”,但您可以在创建时在命令行上提供更具描述性的消息。您创建的最新存储存储在refs/stash; 较旧的 stash 可以在此参考的 reflog 中找到,并且可以使用通常的 reflog 语法命名(例如,stash@{0}是最近创建的 stash,stash@{1}是它之前的那个,stash@{2.hours.ago} 也是可能的)。也可以通过仅指定存储索引来引用存储(例如,整数n等效于stash@{n})。
git stash list [<log-options>]
git stash show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]
git stash drop [-q|--安静] [<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-from-file=<文件> [--pathspec-file-nul]]
[--] [<pathspec>… ]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>
当你在做某事时,你会了解到上游的变化可能与你正在做的事情有关。当您的本地更改与上游更改不冲突时,一个简单的操作git pull
将让您继续前进。但是,在某些情况下,您的本地更改确实与上游更改发生冲突,并且git pull拒绝覆盖您的更改。在这种情况下,您可以将更改隐藏起来,执行拉取,然后取消隐藏,如下所示:
> git pull
...
文件 foobar 不是最新的,无法合并。
> git stash save '20211229'
> git pull
> git stash pop
(1)save
将您的本地修改保存到一个新的存储条目并将它们回滚到 HEAD(在工作树和索引中)。message
部分是可选的,并提供描述和隐藏状态。
> git stash save "20211229"
Saved working directory and index state On dev-test: 20211229
# git stash save <message>
(2)list
列出您当前拥有的存储条目。每个stash 条目都列出了它的名称(例如,stash@{0}是最新的条目,stash@{1}是之前的条目,等等)、条目创建时当前分支的名称,以及条目所基于的提交的简短描述.
> git stash list
stash@{0}: WIP on dev-test: b1234566 S011111-MI
stash@{1}: WIP on dev-test: b1234566 S011111-MI
(3)show
将存储条目中记录的更改显示为存储内容与首次创建存储条目时提交的差异
# 默认显示最新的,也就是stash@{0}
> git stash show
.../test/common/dao/StudentDao.java | 820 +++++++++++++++++----
.../test/common/dao/UserDao.java | 8 +-
.../test/common/util/StudentUtils.java | 205 +++++-
# 也可以指定看那个
> git stash show stash@{1}
(4)pop
从存储列表中删除单个隐藏状态stash@{index},并将其应用于当前工作树状态的顶部,即执行的逆操作,将放进去的内容取出来,出栈
# 默认取最新
> git stash pop
# 也可以指定index 进行取出
> git stash pop stash@{1}
(5) apply
像pop,但不会从存储列表中删除状态,还会存在,像java栈中的peek()方法。
> git stash apply
(6) clear
删除所有隐藏条目。请注意,这些条目随后将受到消减,并且可能无法恢复
# 危险操作,请注意都是舍弃的。
> git stash clear
(7)drop
从存储条目列表中删除单个存储条目。
> git stash drop stash@{1}