Git 除了 add, commit, push, 其实还有好多有用有意思的方法
用好Git Log
你应该用过 git log, 但是 log 支持很多有用的参数也许你不知道,下面列出一些比较有用的
- --author="jack" : 只显示jack提交的commit
- --name-only : 只显示改动了的文件名
- --oneline : 在一行内显示信息
- --grath : 显示一些分支信息
- --reverse : 倒序显示commits
- --after : 显示这个时间之后的commits
- --before : 显示这个时间之前的commits
这些参数组合起来挺有用的,比如
git log --author="jack" --after="1 week ago" -- oneline
查看还没有合并到Master/父分之中的改动
git log --no-merges masters..
从另一个分支中获取文件
先看另一个分支的某个文件,其实可以不用切换到那个分支,执行下面的命令就可以直接查看
git show some-branch:somefile.js
如果你想和某个分支上的版本进行对比
git diff some-branch some-file.js
关于 rebasing
Rebase其实比较复杂,单独写一篇文章都未必讲的清楚明白, 当时有一个很实用的技巧不得不提
`git pull --rebase`
这是什么?
当你在本地改完,想要把代码push上去,如果主分支上已经有改动,这时候push失败,而且会提示你使用git pull
来获取最新的代码, 和本地的代码合并,产生log
> Merge remote-tracking branch 'origin/master'
这时rebase就是更好的选择,git pull --rebase
, git 会先从remote获取最新的代码,然后在push本地的改动,不会有merge产生.
修改上一个 Commit
发现刚刚提交的Commit有一个Typo或者其它很小的改动,Well,当然可以提交个新的Commit, 然后log写上 “fix typo”.
当时其实应该这么做,
- Fix Typo
- Stage 这个文件
- 执行
git commit --amend
这会把这一次的改动提交到上一个Commit中 - Push
Git的三个状态,三个状态之间如何切换
三个状态:
- 没有Staged, 没有执行
git add
- Staged, 当时没有Commit的, 执行了
git add
, 当时没有执行git commit
- Commit的, 执行了
git commit
用 git status
可以查看处在1, 2状态的文件
如何在三个状态之间切换
git reset --head {{some-commit-hash}}
返回到某一个Commit, 所有这个commit之后的改动都丢弃git reset {{some-commit-hash}}
返回到某一个commit,所有这个commit之后的改动都归到状态1, 没有staged,git reset --soft {{some-commit-hash}}
返回到某一个commit, 这个commit之后的改动都归到状态2
最常用的一个可能是第一个, 放弃本地所有的改动
git reset --hard HEAD
Revert Commit
git revert -n
取消之前的Commit
为常用的git命令设置别名
git l = git log --online --grath
等等等等