git 常用语句及含义
有些命令很有用,但不常用,所以容易忘。
本文纯粹是为这类命令方便查表,所以没学过 git 的建议去看廖某的教程。
最近忘记的命令写在最前面。
- 加速 git clone 的网站。
- git commit --amend 修改上一次的提交。或者理解成:这次正常 commit,同时上次的 commit 记录删除,上次的修改内容归到这次。用途一般是修改低级错误,比如错别字、调整代码一个缩进;
- git reset --soft 从某个角度也可以理解为“修改上一次的提交” 但上次的 commit 记录还在。用途和 amend 相比,侧重于可以回顾,例如刚刚提交的代码有个 bug,赶紧改一下,以后还可以回顾这个错误吸取教训。
- git diff --stat 各文件 + + - - 情况,-- numstat 是数字化的情况
- git clone --depth 10 url 克隆到最近 10 次 commit,一般 --depth 1 比较快
安装及初始化篇 —— 常用:添加 ssh key
先用自己熟悉的工具如 brew、apt-get 安装 git (略过)
语句 | 含义 |
---|---|
git | 查看是否安装 |
git config --global user.name “myname” | 配置名字 |
git config --global user.email “myemail” | 配置邮箱 |
git config --list | 查看配置,初次运行必须配置姓名邮箱 |
然后需要添加自己的 GitHub ssh key:
终端 ssh-keygen -t rsa -C “myemail” 创建 ssh key,一路回车,然后打开 github.com 登陆后,点击 https://github.com/settings/keys ,点击 new ssh key,输入自定义标题,key 的内容是刚从生成的key文件内容复制粘贴过来。我的key路径在 ~/.ssh/id_rsa,每个人电脑位置可能不一样。
初始化/克隆项目篇 —— 常用:不完全克隆(减少下载时间)
项目地址设为 url;某branch名称设为 b_name
语句 | 含义 |
---|---|
git init | cd 到项目文件夹下执行,生成隐藏的 .git 文件夹 |
git clone url | 完整克隆整个项目 |
git clone --single-branch -b b_name url | 完整克隆某个分支,注意必须带 single-branch,否则还是整个项目 |
git clone --depth 10 url | 克隆最近几次commit,我最喜欢的功能——只克隆最近1次commit,下载超快!;可以结合某分支一起使用 |
git remote add url | 将远程库与本地仓库关联,如果不存在本地库,则视为克隆 |
开发过程中必用篇 - 基本不会忘
1 工作区
2 暂存区(stage文件夹)
3 版本库(master文件夹)
语句 | 含义 |
---|---|
git add files | add是把 1 内容 复制到 2 中,常用 git add ./ 删除操作也可以用这个命令实现,手动删除后add,因此我不怎么用 git rm |
git commit -m “msg” | 把 2 内容 剪切到 3 中,同时加注释 msg |
git pull 远程主机名 远程分支名:本地分支名 | 从另一个存储库或本地分支获取并集成(整合);不加任何参数是取主机分支与当前分支合并;等于下面两句(不必用): |
git fetch 分支名 | 获取某分区 |
git merge 分支名 | 把它与当前分支(master)合并 |
git push origin dev | 设origin是远程库的默认名 ,dev是要推送的分支。不加参数是当前分支推送到主机分支。 -u 选项是记住当前参数,下次可以不加参数使用上次记住的分支参数 |
git commit --amend | 修改上一次的提交。或者理解成:这次正常 commit,同时上次的 commit 记录删除,上次的修改内容归到这次。用途一般是修改低级错误,比如错别字、调整代码一个缩进 |
经常出现 git pull 后要手动解决冲突。新手可能不熟悉怎么搞,打开冲突的文件,仔细观察下就明白,然后修改“不正常”的内容后 commit、push 即可。
开发过程中常用篇 —— 状态 status diff log reset
语句 | 含义 |
---|---|
git status | 查看仓库状态,理解 1、2、3 概念,看输出就明白 |
git diff filename | 比较 1 中某文件 和 3 中某文件的区别,看输出就明白,这是仔细看某个文件;git diff --stat 直接看整体的各文件 + + - - - 情况,-- numstat 是数字化的 + + - - - 情况 |
git log | 查看commit记录(每条记录有不规则id,作者,邮箱,日期 |
git reflog | 超级简洁的展示所有版本(含id,HEAD,操作注释),git log是当前控制台有的记录 |
HEAD | 当前版本指针,上一个是HEAD^,上上 HEAD^^,上100 HEAD~100 |
git reset --hard HEAD^ | 跳到某版本,hard 后是版本名,可以用 HEAD 系列指针表示,也可以用 git log里获得的 commit id,只需输前几位(标志唯一即可) |
git remote | 查看远程库的信息 ,加 -v更详细 |
开发过程中常用篇 —— 分支
语句 | 含义 |
---|---|
git branch dev | 创建新分支 |
git checkout dev | 切换到分支dev,然后正常的 add、commit |
git checkout -b dev | 创建并切换到新分支dev |
git branch | 查看当前分支,前面有*的是当前的 |
git checkout – name | 还原操作,情况A: 1改了(包括删除,修改内容等),2空 3没改 则 赋值 1 = 3;情况B. 1改完add到2了,1又改了,3啥没改 则赋值 1 = 2 |
git merge dev | 合并(master) |
git merge --no-ff -m “merged” dev | 合并 且创建新的commit |
git branch -d dev | 删除dev;-D 强行删除一个没有被合并过的分支 |
git config --global alias.br branch | 配置别名,br就代表branch,更多的自己配,例如很多人为了方便把 git commit -m 简写为 gc 还是挺舒服的,自行百度 |
git reset --soft | 从某个角度也可以理解为“修改上一次的提交” 但上次的 commit 记录还在。 用途和 amend 相比,侧重于可以回顾 如刚刚提交的代码有 bug,改了以后还可以回顾这个错误吸取教训。 |
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name。
Pull Request / Merge Request
1
先 fork 正式仓库
git clone 自己 fork 出来的仓库
2
// 为了能获取正式仓库的更新,添加一个 upstream
git remote add upstream 正式仓库地址
git pull upstream branch_name 获取正式仓库的更新
3
// 开始写代码,中间可以自己开一个分支。写完之后
git add .
git commit -m “something”
git push origin 先推到自己的仓库
然后到项目网页或公司自己的工具提 Pull Request 或者 Merge Request
不常用篇 —— stash
某些条件下用
语句 | 含义 |
---|---|
git stash | 保存当前工作现场,不add,不commit |
git stash list | 查看之前的工作现场 |
git stash apply stash@{0} | 恢复list里的现场0,不写stash@{0}也可以 |
git stash drop | 删除原 stash |
git stash pop | 恢复最近的现场,删除原stash |
不常用篇 —— tag
怎么说呢,我也没有什么经常 release 的项目,加不加版本号也无所谓,不常用吧。
语句 | 含义 |
---|---|
git tag v1.5 | 给最新提交的commit上一个标签 |
git tag v1.4 a453fs2413 | 给对应id的commit打标签 |
git tag | 查看标签(按字符排序) |
git tag -a v0.1 -m “released” 3628164 | 带有说明的标签,用-a或-s分别指定普通、私密标签名,-m指定说明文字 |
git show v1.5 | 查看标签的详细信息 |
git tag -d v1.2 | 删除标签 |
git push origin v1.0 | 创建的标签默认存储在本地,这个是推送某个标签到远程,全部是 --tags |
git push origin :refs/tags/v0.9 | 删除远程标签 |