Git命令小记

为什么80%的码农都做不了架构师?>>>   hot3.png

一、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


转载于:https://my.oschina.net/rathan/blog/485117

你可能感兴趣的:(git,awk)