LVPHP

git-stash

应用场合

branch_A分支的工作区内容已被修改,但是并未完成。这时需要立即切换到另外一个分支branch_B上去,可是又不想提交目前的修改,因为修改没有完成。但是,不提交的话,又没有办法checkout到前面的分支。
此时用Git Stash就相当于备份工作区了。然后再Checkout到branch_B去修改,就能够达到保存当前工作区被修改过的内容,并及时恢复的作用。

用法

  • git stash 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中;
  • git stash apply 把栈里面记录的内容运用到当前的版本上,这时候栈里面的记录还保存着;
  • git stash pop 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复, pop后栈中不再存在该记录;
  • git stash list 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复;
  • git stash clear 清空Git栈,此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了;

注意

在不同分支执行git stash 命令会将修改保存在同一个栈中,
例如

  1. 在copy_master分支执行 git stash, 这时候stash 栈中有一个stash@{0}
  2. 在sonar分支执行 git stash, 这时候stash 栈中会再放进一个stash@{1}
  3. 执行git stash list命令,输出:
    stash@{0}: WIP on copy_master: 2923b6d Merge branch ‘master’ into copy_master
    stash@{1}: WIP on sonar: c2c677b Merge branch ‘master’ into sonar