- Git常用命令 基础 总结 MD

时间:2023-03-08 22:37:46
- 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 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但保留修改内容

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的。

分支 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

参考

不带参数的功能说明:

  • 如果不带任何参数,它会列出所有历史记录,最近的排在最上方
  • 显示内容包括提交对象的哈希值,作者、提交日期、和提交说明
  • 如果记录过多,则按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 //对统计信息,按照提交数量进行倒序排列