Git进阶:你不知道的git stash 和 git worktree

2019-10-02 16:39:53 浏览数 (1)

git中比较有用的两个命令, git stash 和 git worktree, 你值得了解一下

1. Git和SVN的别样比较

部门从SVN签到了Git, 总算跟上了潮流的脚后跟. 其实从技术的角度来说, SVN没有那么烂. 但是从当今的角度来说, Git已经代表潮流, SVN已经没落并将持续没落下去, 继续把宝贵的时间投入到SVN这种注定没落的技术上, 实在是得不偿失.

不信? 看下google trends:

全球2004年至今趋势图(蓝线git, 红线SVN):

图片图片

中国2004年至今趋势图(蓝线git, 红线SVN):

图片图片

SVN已经注定被放入历史的记忆箱, 就像曾经的perl和pascal, 不会消失, 但会渐渐淡化, 直到成为老一辈程序员心中的记忆和口中的谈资.

2. git stash 本地保存

SVN有个缺点, 代码不方便本地保存, 我一般都是通过文件夹右键zip来保存本地修改. 相比之下, Git的本地保存功能很强大, 十分喜欢.

关于本地保存的优点, 讲个故事:

有个同事, 曾经coding两天在周五开发出一版UI, 拿给设计看, 设计不满意, 就换了一种设计风格, 让同事再实现一次. 同事周六周日加班了两天, 把新的设计实现了, 拿给设计看, 结果设计说:”好像, 好像上一版更好看, 还是用上一版吧”. But, 同事的上一版代码没有保存, 只能凭着记忆把上一版代码重新撸出来, 不知浪费多少时间和脑细胞.

SVN的保存都是push到中央代码库, 保存很重, 同事觉得没完成的东西不应该push保存. 所以... 

相比之下, Git的保存就很轻, 可以先commit提交到本地保存, 或者stash保存. 等到开发完成后, 再push到远端. 甚至, push到远端的, 你还可以通过push -f覆盖掉远端的代码(只建议强制push自己的库, push -f master会死人的). 修改本地提交记录和远程提交记录也不在话下, 比如git commit --amend修改最近一次提交记录, git rebase -i "commit id"^ & git push -f修改本地提交记录并强制推送到远程.

git的本地保存中, 我觉得最好用的是git stash.

1.  当你在项目的一部分上已经工作一段时间后, 所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情. 问题是, 你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交. 这时, 你可以选择stash.

  1. 当你git pull代码时, 提示代码冲突, 拉下来可能会覆盖本地代码. 这时, 你可以先stash代码, pull代码后, 恢复stash的内容. 就算合并失败, 还可以hard reset, 因为代码在stash中还有一份, 不虚.

git stash 命令如下, 但是推荐使用sourcetree界面操作stash, 因为查看修改处比较方便, 而且不用记git又臭又长的命令.

代码语言:txt复制
_git stash_ list <options>

_git stash_ show <stash>

_git stash_ drop -q|--quiet

_git stash_ ( pop | apply ) --index <stash>

_git stash_ branch <branchname> <stash>

_git stash_ [push -p|--patch-k|--no-keep-index] -q|--quiet

                -u|--include-untracked -m|--message <message>

                --]

_git stash_ clear

_git stash_ create <message>

_git stash_ store -m|--message <message> <commit>

SourceTree UI操作stash:

SourceTree贴心的展示了stash分支和stash信息,超赞

0 人点赞