若是你已经使用git很长一段时间了,你极可能遇到过原子提交这个概念了。本质上,这个概念指一次提交只包含相关操做,不包含逻辑上不相关的事情。例如,你对一个类的改动和相关的单元测试应该在一个提交中,而对另外一个不一样类的操做你应该放在另外一个提交中。html
可是,若是在一个文件中包含多个不相关操做的时候应该怎么办,或者你会想要把他们放在多个提交中,这样你能够单独对他们进行revert操做?或者你在一个文件中写了不少log日志的语句,可是你不但愿将这些语句提交到项目中去怎么办?一般人们使用的git命令是达不到这个要求的:linux
$ git diff diff --git a/some-file.c b/some-file.c index f383179..09e4e35 100644 --- a/some-file.c +++ b/some-file.c @@ -2,6 +2,8 @@ int main(void) { printf("doing some stuff\n"); - printf("doing some more stuff\n"); + do_some_stuff(); + printf("doing some unrelated stuff\n"); + do_some_unrelated_stuff(); return 0; } $ git add some-file.c $ git commit [master 1938906] some unrelated stuff, cramming it all in one commit 'cause I'm lazy 1 file changed, 3 insertions(+), 1 deletion(-) $ echo "Whoops we just committed unrelated stuff. Not very modular of us."
git add的 -p (表明patch)参数对于这种场景是很是有用的。这个会告诉git add,我想要作一个特殊的add操做,而且这个命令有个很是好的交互界面能让咱们明确指定咱们想要操做文件中的哪一个部分。git会将全部的变更自动分块,你可使用y或者n来经过或者拒绝这个分块,或者你也可使用s将它切成更细粒度的块。若是git不能自动将变更分红你但愿的块的话,你可使用e(edit)选项来指定更多细节。git
这是vim的杀招之一,而且我发现不少人(即便是vim的大师)都不是很常用。假如你是个马虎的用户(当ssh进入一个空间的时候使用vim去编辑一些配置文件),这招会潜在帮到你不少的。不少人声称他们不能放弃IDE的特性缘由就是IDE的智能提示这项功能,这个功能能自动完成变量和函数的名字。这些特性是很是受欢迎的,由于它不会让咱们由于拼写而出现错误,也缩短了编译/运行/调试的周期。许多人没有意识到直接从vim的黑盒子中也有相似的功能,并且是不须要任何插件的。vim
在INSERT模式下,你能够按下CTRL-N键下移建议的自动完成下拉框(这个下拉框vim是从当前缓冲中获取,若是有的话,也会从tags中获取),或者按下CTRL-P键来上移(若是记不住助记符的话,记着这两个分别是表明“NEXT”和“PREVIOUS”)。若是只有一个可能的自动完成条目,vim就会继续输入,而后插入这个惟一的条目。很是方便且有效率,特别当你的代码中有大量的长变量/方法/常量名称的时候。bash
使用vim的人都知道打开一个远距离目录中的文件是很麻烦的(可使用:e 来减缓麻烦程度,可是仍然不能瞬间作到)。若是你正好是在一个team中工做,或者在一个大项目中工做,迅速完成这个事情对你的工做来讲是相当重要的。网络
丰富的ctags(http://ctags.sourceforge.net/)会让这个世界变得更好。使用ctags,你能够在顶级目录下跑一个命令,生成一个”tags”文件,而后,你就可使用Ctrl-] 来“跳到” 你鼠标制定的定义(好比说,一个类名)。按CTRL-T回到你以前的位置。less
你能够在git中搭建一个提交后钩子(http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html)当你提交代码以后会自动生成ctags文件!漂亮。ssh
许多时候,当你写代码或者作相关任务的时候,即便可能只是很是微小的操做,你也会发现你本身很是须要一个方法来一遍一遍重复相同的编辑命令。不一样的开发者会使用不一样的方法来达到这个目的。例如,SubLime Text(http://www.sublimetext.com/)有个“杀招”是放多个光标在不一样的位置,而后统一编辑。在Vim(在emacs也同样,可是咱们这里只介绍vim的方法),你可使用记录和回放来完成这个目标。这是个很是有用且方便的工具,它会根据你的操做量的大小在不一样程度加速你的代码写做速度。curl
要制做一个宏,在normal模式下按下q,而后按下其余的按键来“命名”宏(一般我使用q)。vim将会开始记录你的键盘操做,vim将会记录你的键盘操做,知道你按下了q来保存宏。你能够在normal模式下使用@-letter来重放,因此我一般使用@-q。你也能够在@重放命令前加个数字,这样,你能够一遍又一遍重复执行你的宏(就像许多vim使用者,已经很是习惯来这样作了)。若是你很是习惯使用vim的花哨的操做命令(例如,使用/搜索来定位),而后你只须要一些小小的联系,你就能够很快地操做大量的宏了,你会将你的还在依靠鼠标进行操做的同事远远甩在后面了。socket
没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不须要重写整个命令,仅仅输入'!!'就能够抓取最后的命令。
咱们大多数都熟悉ping和traceroute。那对于把两个命令的功能合二为一的mtr命令呢。若是mtr没在你的机子上安装,apt或者yum须要的包。
$ sudo apt-get install mtr (On Debian based Systems)
# yum install mtr (On Red Hat based Systems)
如今运行mtr命令,开始查看mtr运行的主机和google.com直接的网络链接。
# mtr google.com
这个命令对于管理员和开发者很是有用。为了使天天的任务自动化,管理员须要经过输入vi、vim、nano等打开编辑器。
仅仅从命令行快速的敲击“Ctrl-x-e”,就能够在编辑器中开始工做了。
“nl命令”添加文件的行数。一个叫作'one.txt'的文件,其每行的内容是(Fedora、Debian、Arch、Slack和Suse),给每行添加行号。
“Shut”命令随机从一个文件或文件夹中选择行/文件/文件夹。首先使用ls命令来显示文件夹的内容。
# ls Desktop Documents Downloads Music Pictures Public Templates Videos # ls | shuf (shuffle Input) Music Documents Templates Pictures Public Desktop Downloads Videos # ls | shuf -n1 # 随机选择一个 Public # ls | shuf -n1 Videos # ls | shuf -n1 Templates # ls | shuf -n1 Downloads
注意:你能够把‘ n1’替换成‘ n2’来输出两个随机选择或者使用 n3、 n4等数字输出其余任意的随机选择。
“ss”表示socket统计。这个命令调查socket,显示相似netstat命令的信息。它能够比其余工具显示更多的TCP和状态信息。
# ss State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.198:41250 *.*.*.*:http CLOSE-WAIT 1 0 127.0.0.1:8000 127.0.0.1:41393 ESTAB 0 0 192.168.1.198:36239 *.*.*.*:http ESTAB 310 0 127.0.0.1:8000 127.0.0.1:41384 ESTAB 0 0 192.168.1.198:41002 *.*.*.*:http ESTAB 0 0 127.0.0.1:41384 127.0.0.1:8000
那么如何获得你的外部IP地址呢?使用google?那么这个命令就在你的终端输出你的外部IP地址。
# curl ifconfig.me
注意:你可能没有按照curl包,你须要 apt/yum来按照包。