- Git经常使用命令 基础 总结 MD

Markdown版本笔记 个人GitHub首页 个人博客 个人微信 个人邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目录

Git经常使用命令

帮助 help

git help //显示经常使用命令列表,省略了 -i, --info
git 指令名 -help //显示某一指令的使用帮助信息【经常使用】

git help -help //显示help指令的使用帮助信息
git help -a //显示全部可用的命令,--all
git help config //打开帮助文档:Git/mingw64/share/doc/git-doc/git-config.html
git help help //打开帮助文档:Git/mingw64/share/doc/git-doc/git-help.html
git help git //打开帮助文档:Git/mingw64/share/doc/git-doc/git.html

经常使用操做

简单命令git

git status //显示工做目录和暂存区的状态,使用频率绝对遥遥领先

初始化 clone init

git clone 仓库地址 //将远程项目克隆到当前目录,默认在当前路径(包含远端的根目录),此命令可配置的参数很是多
git clone 仓库地址 本地路径(文件夹) //不包含远端的根目录(本地目录就是项目根目录),会自动建立本地目录
git clone --progress -v 仓库地址 本地路径 //小乌龟默认的clone命令(其实这些参数都不必配)
git init //从新初始化一个现有仓库(会产生一个.git目录),默认在当前路径
git init --bare //新建一个Git代码仓库,做为纯净的仓库(不会产生.git目录)

提交

git add . //能够以空格分隔来一次add多个文件
git commit -m '信息'
git commit -am '信息' //至关于【git add .】和【git commit -m】的组合
git commit --amend //修改最近的提交信息,通常先执行【git add .】操做

push

git push origin 远程分支名 //这种状况下,本地分支名和远程分支名不一致时会push失败
git push origin 本地分支名:远程分支名 //适用于上面那种方式push失败的状况
git push origin HEAD:refs/for/远程分支名

暂存

git stash
git stash pop

更新

git pull //慎用
git pull --rebase //经常使用
 

撤销修改

撤销全部commit但保留修改内容github

git reset --soft 前一个提交的commitId

编辑了一个文件,尚未git add加入储存区,这个时候,咱们能够git checkout --file_name,来取消对它的修改。正则表达式

建立/切换分支。即git checkout -b dev。建立分支dev,并切换到dev分支。
等价于:git branch dev git checkput dev。
也能够: git checkout -b dev origin/dev,即建立的本地分支dev是从远程分支origin/dev获得的。
而且你能够看到;Branch 'dev' set up to track remote branch 'dev' from 'origin',即本地分支与远程分支也创建了链接,因此,这个分支能够和远程的分支push和pull的。vim

分支 branch

查看分支

git branch //查看本地分支,颜色为白色,绿色带星号的为当前所在分支,省略了 -l, --list
git branch -v //查看分支时带hash值和最后的提交日志(能够和后面的组合),--verbose
git branch -r //查看远端分支,颜色为红色,--remotes
git branch -a //列出全部分支,根据颜色可区分是本地分支仍是远端分支,--all
git branch -vv //查看本地分支与远程分支的映射关系

建立分支

git branch 分支名 //基于当前分支建立备份分支(不会checkout),省略了 -c, --copy;-C 强制复制
git branch aaa origin/bbb //基于远程分支建立本地分支(不会checkout),省略了 -t, --track
git branch 分支名 commitId //新建一个指向指定commit的分支
git branch -m 原分支名 新分支名 //修改本地分支名,--move;-M 强制更名,即便已存在

切换分支 checkout

git checkout 分支名 //切到另外一本地分支,若是origin分支存在但本地分支不存在,则建立本地同名分支后checkout
//若是origin分支和本地分支分支都不存在,或有未commit或未stash的文件,则不执行切换命令并报错
git checkout -f 分支名 //若是有未commit或未stash的文件,则强制还原(重置)后切到另外一本地分支,--force
git checkout -b 分支名 //基于当前本地分支建立备份分支,若是已存在则报错,-B 强制建立
git checkout -b aaa origin/bbb //基于远程分支建立本地分支【经常使用】
git checkout - //切换到上一个分支,使用此命令能够在两个分支之间快速切换

删除分支

git branch -d 分支名 //删除本地分支,该分支必须彻底和它的上游分支merge完成,--delete,delete fully merged branch
git branch -D 分支名 //强制删除本地分支,delete branch (even if not merged)
git push origin -d 远端分支名 //删除远程分支(服务端中的分支也会被删除)
git branch -dr origin/分支名 //删除追踪分支(没有删除远程分支,pull后还会拉下来),--delete --remotes

分支映射关系

git branch -u origin/分支名 //修改当前本地分支与指定远程分支的映射关系,上游 --set-upstream-to
git branch -u origin/分支名 本地分支名 //修改指定本地分分支与指定远程分支的映射关系
git branch --unset-upstream //撤销本地分支与远程分支的映射关系,默认当前分支
git branch --unset-upstream 本地分支名 //撤销指定分支

分支关系

git branch --contains commitId //打印包含指定commitId的分支,即此commit之【后】拉的分支
git branch --no-contains commitId
git branch --merged commitId //打印合并指定commitId的分支,即此commit之【前】已存在的分支
git branch --no-merged commitId

配置 config

四种级别:local、global、system微信

  • local 对应的配置文件为/.git/config,适用于特定git项目的配置【最高优先级】
  • global 对应的配置文件为C:/Users/当前用户/.gitconfig,适用于当前登陆用户的配置【中优先级】
  • system 对应的配置文件为/mingw64/etc/gitconfig,适用于全部用户和全部项目的配置【低优先级】
  • worktree 估计是新增的,不经常使用,也不知道干吗的

更新配置信息

git config --global user.name 用户名 //更新指定section下指定key的值,默认为更新local下的配置信息
git config --global user.email 邮箱

经常使用的配置

git config --global alias.s status //设置别名,设置后【git s】和【git status】效果同样
git config --global alias.c 'commit -am 日志信息' //能够用单引号或双引号包起来
git config --global credential.helper store //配置长期存储用户名和密码【untest】
git config remote.origin.push refs/heads/*:refs/for/* //设定提交的分支,默认为local

编辑配置信息

git config --global -e //进入vim编辑配置信息,默认为编辑local下的配置信息
git config --global --add 类别.键名 对应的值 //在指定section下添加键值对,默认为local
git config --global --add bqt.tel 18680536603 //注意:key已存在时不会覆盖,同一个key能够有多个value
git config --global --unset user.tel //移除指定section下的键值对,默认为local
git config --global --unset-all user.tel //若是同一个key有多个value,必须使用此命令,默认为local
git config --global --rename-section aaa bbb //重命名section,默认为local
git config --global --remove-section bbb //移除section及其下全部的k-v,默认为local

查看配置信息

git config --global -l //参数 -l 为 --list 列表 的简写
git config -l //获取四种级别下全部配置的信息
git config --global --get user.name //查看某一具体key的配置信息,默认为local
git config --get-all user.name //获取四种级别下某一具体key全部配置的信息

日志 log

参考fetch

不带参数的功能说明:.net

  • 若是不带任何参数,它会列出全部历史记录,最近的排在最上方
  • 显示内容包括提交对象的哈希值,做者、提交日期、和提交说明
  • 若是记录过多,则按Page Up、Page Down、↓、↑来控制显示
  • 按q退出历史记录列表

显示参数

git log --abbrev-commit //仅显示SHA-1的前7个字符,而非全部的40个字符(彻底能够用短hash代替长hash)
git log --relative-date //使用较短的相对时间显示,例如 two weeks ago
git log --oneline //仅在一行显示提交信息,默认仅显示短hash和提交日志

git log --decoreate //显示commit所属的branch和tag信息
git log --graph //显示ASCII图形表示的分支合并历史

git log --stat //在最后列出commit中全部修改过的文件以及其A、D行数,以及全部A、D行数小计
git log --shortstat //和--stat相比,只在最后列出全部A、D行数小计
git log --name-only //在最后显示修改文件清单
git log --name-status //在最后显示修改文件清单,及文件的A、M、D的状态信息

git log -p //以diff的形式输出每一个commit具体修改的内容,内容过于详细,使用较少
git show commitId //以diff的形式输出指定commit具体修改的内容
git blame 文件名 //看某和指定文件的相关历史记录

过滤

git log -5 //仅显示最近的几回提交
git log --no-merges //不显示 merge 的提交,默认状况下 git log 会包含 merge commit
git log --merges //仅显示 merge 的提交

按内容(做者、日志、内容)过滤

git log --grep=bai //提交【日志】中包含指定内容的提交,如下均支持正则表达式,添加-i能够在过滤时忽略大小写
git log --author='bqt\|bai' //做者的【user.name或user.email】包含指定内容的提交
git log --committer=bai //提交者的【user.name】包含指定内容的提交
git log -S"bqt" //搜索和指定内容相关的提交,使用-G代替-S可使用正则表达式去匹配

按提交时间过滤

git log --after 2019.08/11-20:22:30 //指定时间以后(不含)的提交,对日期格式的要求很是宽松,能够充分发挥想象力
git log --before "2 weeks ago" //(含),相对时间,"2 week",2.week,2week,用任何符号区分【-_/\*=+#】均可以
git log --after 2019.7.13 --before 2019.8.12 //注意,时间区间为(7.13,8.12],或理解为[7.14,8.13),左开右闭

git log --since 3hour //相似 after,常见的单位还有 second、minute、hour、day、week、year
git log --until 3hour //相似 before,一样能够组合为【--since yesterday --until 3hour】

按标签名、commitId过滤

git log 标签名 //相似 before,显示指定标签以前(含)的提交
git log 标签名.. //相似 after,显示指定标签以后(不含)的提交

git log commitId //相似 before,显示截止到指定commitId以前(含)的提交
git log commit1 commit2 //显示commit1与commit2之间的全部提交,而且包括commit1和commit2
git log commit1..commit2 //左开右闭,commit可使用HEAD(最后一次提交)代替,HEAD~n表明倒数第n次提交

按分支名、文件名过滤

git log 分支名或文件名 //只查看跟某些分支或文件(目录)相关的提交,分支名必须彻底匹配,文件名支持通配符*
git log -- 文件名 //若是产生混淆,可使用这种方式指定是文件名
git log 分支名 -- //若是产生混淆,可使用这种方式指定是分支名
git log 分支名 -- 文件名 //表明指定分支下的指定文件

git log b..a //分支a中有但分支b中没有的提交,好比可用于列出feature相对于master的不一样
git log b...a //三个点时表示或的意思

自定义输出

git log --pretty="%cn %h - %cd" //自定义输出

merge

rebase 操做

git rebase -i commitId 【r】 //修改多个历史提交信息
git rebase -i commitId 【d】 //删除多个历史提交
git rebase -i commitId 【s】 //合并多个历史提交

其余

git diff
git clean -df日志

git remote -v //查看远程库信息(origin、fetch、push),--verbose 详细
git remote show origin

提交统计

git shortlog  //按照做者分类输出提交统计信息
git shortlog -s  //对统计信息,按照做者进行排列,仅显示做者和提交数量两项信息
git shortlog -n  //对统计信息,按照提交数量进行倒序排列
相关文章
相关标签/搜索