作为强大的版本管理工具,基本的Git命令几乎是每个程序员都应该掌握的。在实际使用中,在紧急的关口,我们需要祭出这个神奇的时间机器,却突然根本不记得Git的不常见命令,这种尴尬时刻可能很多人都遇到过。查官方文档固然是一个好办法,不过下面的一些tips可能会帮你节省一些时间。
使用Git回溯到之前的commit
当你修改了一个配置文件,发现项目启动失败。当你重构了一些代码,发现程序出现bug。当你…。总是不管出现什么问题,你过去几个小时的努力可能要白费了,你想让一切恢复原状,那么就需要回溯到之前某一个正常的commit。
1 | git reflog |
第一个命令列出了过去提交的更改,可以看到第二列的格式分支名称@{下标}
。第二个命令就可以帮我们的repo回到当时的状态。不管你中间执行了什么样的更改,git都可以把我们的项目带回当时的状态,神奇的时间机器。
刚commit 又有新的小改动
提交commit总是让人开心,以至于飞速的敲下熟悉的命令,却忘了刚才的代码还漏了一个大括号,或者你觉得需要加个注释。你又得把刚才的一串命令再来一遍。而下面的命令可以帮你节省时间。
1 | git add . # 或者 git add xxx.xx |
还有一种情况,你只是觉得刚才的commit message写得很差劲(清楚的提交信息是很重要的),而项目本身并没有改动。你需要下面的命令。
1 | git commit --amend -m "new-message" |
改动提交到了错误的分支
1 | git reset HEAD~ --soft |
经过上面的一串命令,改动就被移动到了正确的分支上。
还有另一种实现方式是使用cherry-pick。
1 | git checkout CORRECT-branch |
只clone 最新一次提交
有时拉取大项目确实很耗时,只clone最近一次提交,会节省 clone时间。
1 | git clone --depth=1 https://some.github.url/user/repo.git |
在diff比较两个文件时没有反应
Git不会比较已经被add到暂存区的文件。所以你需要
1 | git diff --staged |
查看某段代码的作者
1 | git blame rubbish.c |
blame 👿
我选择死亡
1 | cd .. |
从Git Repo中彻底删除
-
从资料库中删除文件
1
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch [Path To Your Remove File]' --prune-empty --tag-name-filter cat -- --all
-
强制推送到远程Repo
1
git push origin master --force --all
-
回收空间
1
git gc --prune=now