离线下载
PDF版 ePub版

Seaborn Lee · 更新于 2017-11-20 10:00:55

闯过这 54 关,点亮你的 Git 技能树 (二)

今天我将带大家完成第 11 - 20 关。如对任何命令有疑问请看第一篇里的推荐教程。

第十一关

在 git 里,创建一个新文件时,要用 git add 来告诉 git,同样,删除一个文件时候,也要告诉 git。

第十二关

有时候执行 add 操作的时候不小心把多余的文件 add 进去了,这时我们需要把它从 staging area 移除出来,但不能删除文件。
通过 git help rm,搜索 cached,可以看到有这个参数,刚好能满足我们的需求。

    --cached
        Use this option to unstage and remove paths only from the index. Working tree files, whether modified or
        not, will be left alone.

第十三关

这一关的场景也非常常见,回想一下以前我们用 CVS 或 SVN 的时候。
你写一个新需求写的正 High,突然你的主管找到你说有一个用户打电话来遇到一个问题,非常紧急。
我以前的做法是:把当前改过的文件「复制」一份先放在其它地方,把代码还原到没修改的状态,签出对应 production 环境的代码。
定位修复问题,提交代码,确认问题修复后再合并回开发分支,并把之前备份的代码复制进来进行合并。

stash 正是解决这个问题的,只需要 git stash,它就把当前未提交的改动「复制」到另一个地方暂存起来,待要恢复的时候执行 git stash pop 即可。

第十四关

这一关有两种解法,第一种是:

    mv oldfile.txt newfile.txt
    git rm oldfile.txt
    git add newfile.txt

显然这样做用户体验很糟,Linux 肯定不会这么设计软件的。

第二种做法:

git mv oldfile.txt newfile.txt

第十五关

这一关相当于上一关的增强版,可以用通配符一起批量移动文件。

第十六关

有时候我们要看代码的提交历史,比如 [Code Review][9] 的时候。
不过 git 自带的 git log 命令比较弱,建议使用 GUI 客户端或 tig。

第十七关

第十八关

git push 命令默认是不会 push Tags 的,需要加参数。

第十九关

有时候提交之后发现漏掉了某些文件,怎么办?
往往很多人就会选择再单独提交一次,这样做其实是不合理的,之前的 commit 就不完整了,有可能上了 CI 就会挂掉。
好的做法是 amend:

命令执行后会调用默认的编辑器编辑 commit message,它会自动带出之前的 message,如果不需要修改,直接保存退出即可。

第二十关

默认提交的时候记录的是当前系统时间,但这一关要求覆盖提交日期。
我想不到有什么场景需要这么做,邪恶一点,有可能你把周五的提交,日期写成周末,这样表示周末在加班。
纯属YY,千万不要学,学了也不要告诉别人是我教你的。
git help commit,搜索 date

    --date=
        Override the author date used in the commit.