git status 与 git stash

git 在切换分支时候不想提交文件,怎么办? git提供了文件储存功能

实际的应用场景是这样:假设你有分支master和develop。master用来release版本,develop用来开发。master上release了版本1,然后develop继续开发。如果你在develop上开发到一半的时候,release的版本1发现了bug。这个时候,你develop分支有未提交的修改,然后你需要切换到master上的版本1进行修复。这个时候切换到master分支,肯定是不需要把develop分支上的修改带过去的。

1. git status 命令 -- 展示工作树状态

当执行 git status 的时候,返回结果大致可分为3个部分:

拟提交的变更:这是已经放入暂存区,准备使用 git commit 命令提交的变更
未暂存的变更:这是工作目录和暂存区快照之间存在差异的文件列表
未跟踪的文件:这类文件对于 Git 系统来说是未知的,也是可以被忽略的

如果在 git status 命令后面加上 --ignored选项,还会列出被忽略的文件。 例如:

$ git status --ignored
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working\
 directory)
Untracked files:
  (use "git add <file>..." to include in what will be committed)
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

还有一种简洁的输出格式,即添加 --short 选项,例如

$ git status --short
 D apple.c
 M hello.c
A  world.c
AD world_bak.c
?? 123.txt

git status --short 也可以简单写成 git status -s

这种输出每一行的格式是 XY PATH1 -> PATH2

PATH1 表示最近一次提交的文件, -> PATH2表示索引或工作目录中文件,当文件路径改变时才会有 -> PATH2这一项。

X和Y都是状态码,X表示暂存区和最近一次提交的差异,Y表示工作目录和暂存区的差异。其含义是:

’ ’ = unmodified
M = modified
A = added
D = deleted
R = renamed
C = copied
U = updated but unmerged

默认不会列出被忽略的文件,除非使用 --ignored选项。

X和Y可能的组合如下表(方括号里面的可以没有):

X          Y     Meaning
-------------------------------------------------
                 not updated
M        [ MD]   updated in index
A        [ MD]   added to index
D                deleted from index
R        [ MD]   renamed in index
C        [ MD]   copied in index
[MARC]           index and work tree matches
[ MARC]     M    work tree changed since index
[ MARC]     D    deleted in work tree
[ D]        R    renamed in work tree
[ D]        C    copied in work tree
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified
-------------------------------------------------
?           ?    untracked
!           !    ignored
-------------------------------------------------

当你发生类似上述场景中的问题时,无法切换分支时,Your local changes to the following files would be overwritten by checkout:...,Please commit your changes or stash them before you switch branches。你可以使用git status命令查看当前分支状态。如果你不想提交或不适合提交的话,可以选择使用第二个命令,git stash 保存当前更改。

2. git stash 命令 ---保存现场

使用git stash命令可以保存当前的修改,将工作和暂存区的状态存储起来以备将来使用,并将当前工作区和暂存区重置为最近一次提交后的状态("干净"状态的工作区,暂存区会根据命令参数的不同决定是否重置。)

$ git stash -m"stash测试"     -m表示本次贮藏信息 (注意,-m与文本信息之间没有空格)

2.1 默认状态,git stash命令只能将已经跟踪和非.gitignore忽略的文件储藏,未跟踪的文件不会被存储。

使用如下命令可以将未跟踪文件一并存储: git stash push -u  (-u是--include-untracked的简略形式)

使用如下命令存储.gitignore忽略的文件:$ git stash push -a

2.2 在默认状态,git stash命令会将工作区和暂存区内容重置为最近一次提交后的内容

使用如下命令保留暂存区不重置:$ git stash push -k  (-k是--keep-index简略形式,默认值是--no-keep-index。)

2.3 查看所有贮藏内容  $ git stash list

每个贮藏都会有一个自增长编号,如图中的0和1

2.4 应用储藏内容

$ git stash apply stashIndex

应用指定贮藏区的内容来重置工作区或者暂存区,其中stashIndex 为对应贮藏的编号

默认不重置暂存区,使用--index参数可以实现重置暂存区

$ git stash pop stashIndex

功能同上,区别是会同时删除对应贮藏

2.5 .删除储存内容

$  git stash drop stash@{1} # 删除指定储藏,其中stash@{1}也可直接写成1
$  git stash clear #  删除所有储藏

其他更多用法可参考官方文档说明,不再罗列

参考文章 http://www.softwhy.com/article-8628-1.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值