为什么80%的码农都做不了架构师?>>>
一、git常用命令
1、push
git push <远程主机名> <本地分支名>:<远程分支名>
注意:git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
1.1 push当前分支:
git push origin local_branch:remote_branch # 完整写法
git push origin local_branch # 省略远程分支名
git push origin # 分支名全部省略
git push # 省略origin主机名:当只有origin主机或者使用默认主机时,可省略origin主机名
git push -u origin local_branch # 多台主机,使用-u 设置默认主机,以后可直接git push
1.2 删除远端分支:
git push origin :remote_branch # 省略本地分支名
git push origin --delete remote_branch # 两条命令等效
1.3 本地的所有分支都推送到远程主机:
git push --all origin
1.4 强制push:
git push --force origin
注意:
建议先git pull
上面命令使用–force选项,结果导致在远程主机产生一个non-fast-forward merge的合并。除非你很确定要这样做,否则应该尽量避免使用–force选项。
1.5 推送标签:
git push origin --tags
2、branch
2.1 branch重命名
git branch -m old_branch new_branch
3、reset
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset –-mixed # 默认方式,回退到某个版本,只保留源码,回退commit和index信息。
git reset -–soft # 回退到某个版本,只回退commit的信息,不会恢复到index file一级。可通过commit再次提交。
git reset –-hard # 彻底回退到某个版本,本地的源码也会变为上一个版本的内容(不包括 untracked files)。
4、diff
HEAD commit版本
Index staged版本
4.1 工作区diff:
git diff # 显示未add的修改:比较工作区(working tree)和暂存区(stage/index)之间的差异
git diff HEAD # 显示工作版本(Working tree)和HEAD的差别
git diff SHA1 # 将所指定的某次提交与当前工作目录进行对比。SHA1只某次提交的commit哈希值
4.2 暂存区diff:
git diff --cached # 查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异,显示的是下一次commit时会提交到HEAD的内容(不带-a情况下)
git diff --staged # 同上
4.3 分支diff:
git diff topic master # 直接将两个分支上最新的提交做diff
git diff topic..master # 同上
git diff topic...master # 输出自topic和master分别开发以来,master分支上的changed。
4.4 历史提交对比:
git diff SHA1 SHA2 # 比较2次提交的内容
git diff SHA1..SHA2 # 同上。如果省略任意一个commit,默认将使用HEAD代替
git diff HEAD^ HEAD # 比较上次和上上次提交。其中HEAD代表最后一次提交,HEAD^代表最后一次提交的父提交,HEAD~1等价于HEAD^,HEAD~2为倒数第二次提交,以此类推。
git diff HEAD^ HEAD~2
4.5 其他参数:
git diff --stat # 列举文件及简单统计
git diff another_branch # 查看工作区和另外一个分支的差别
git diff -- filename # 只对比给定的文件
git diff -- ./src # 只对比指定目录
根据修改状态过滤:
--diff-filter=[ACDMRTUXB*]
显示指定状态的文件:Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), changed (T), are Unmerged (U), are Unknown (X)
示例:
git diff --diff-filter=M
二、git其他命令
1、stash(储藏):
git stash:保存当前工作现场,未提交的代码都会入栈;
git stash list:列举所有工作现场;
git stash pop:应用栈顶(stash@{0})工作现场到当前分支;
git stash apply stash@{num}:应用stash@{num}个工作现场,不pop;
git stash clear:清空stash栈;
2、clean:删除一些没有git add的文件
git clean -n # -n和下面的参数组合使用,列出哪些符合条件的文件/目录会被删掉,防止误删
git clean -f # remove untracked files
git clean -fd # remove untracked files/directories
git clean -xfd # remove untracked files/directories, include gitignore
3、blame:查看代码每一行是谁提交的及提交时间戳
git blame file_path
4、log:查看日志
git log -p -2 local_branch..origin/remote_branch # 比较本地分支日志与远端分支日志,-p表示展开内容差异,-2表示展示最近2次提交
5、pull
git pull:从远端分支获取最新版本并merge到本地,相当于git fetch 和 git merge。
在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。
6、grep:搜索
git grep 'search_info'
git grep -n 'search_info' # 显示行号
git grep --name-only 'search_info' # 只显示文件名
git grep -c 'search_info' # 显示文件中出现次数
三、git提交统计
1、统计某人的代码提交量,包括增加、删除:
git log --author="rathan.han" --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
效果:
2、仓库提交者排名前五(如果看全部,去掉 head 管道即可)
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
四、git文件的三种状态
Untracked files/Changes to be committed————》 git add ————》Changes to be committed(暂存区)————》继续修改文件————》Changes not staged for commit
五、错误恢复
1、commit移到别的分支:
# 切换到想移到的分支
git cherry-pick commit_id
refer:
1、Git代码行统计命令集: http://www.360doc.com/content/14/0929/11/10058718_413198911.shtml
2、git命令详图:http://my.oschina.net/adam_li/blog/133652
3、gitbook中文版:http://gitbook.liuhui998.com/index.html