每天都在用的工具,除了add/commit/push/pull/merge等等常用的,你还会什么?
说实话,博主呢,一般用很少用git命令,都是直接通过IDE集成git来超过,来来回回都是那么几个操作,直到上家公司代码多个迭代合并,启动了gitflow 工具进行代码合并,虽然也是几个简单的命令,但也意识到了想全盘了解下git工具全盘面貌,这不,最近有的是时间,整理下文档,一起学习。
基本入门
简介
git是分布式的,不需要有中心服务器,当然咯,我们使用git并且有一个中心服务器,我们一般叫做远程仓库,它仅仅是为了方便交换大家的修改,它的地位以及内容和我们每个人的电脑都是一样的。
那没有git之前,用什么进行代码管理呢?SVN?CVR等等,用过git之后,再用那些,就完全不习惯了。以下是git的整个提交、拉取流程。
- 1:clone,从远程仓库中clone代码到本地仓库,第一次我们一般是拉master代码下来。。
- 2:checkout,拉代码下来后,我们总不能在master上面修改代码吧,所以要checkout出一条分支出来,在这里进行代码的编写。
- 3:add,在分支上面编写完成后,我们需要add到暂存区,这个暂存区就是我们本地仓库的一部分。
- 4:commit,从暂存区提交到正式的本地仓库,本地仓库保存修改的各个历史版本记录。但是只是到本地,还没到远端,别人还看不到。
- 6:先说第6步,流程要完结。就是把本地仓库的代码,推送到远程仓库,那别人就可以通过pull,拉取你最新的代码了。
- 5:pull,拉取远程仓库最新代码到本地,然后如果有冲突,还需要merge。
这一步一般是在add之前就要做,最迟在commit之前做。
安装及注册、配置公钥
直接来 git官网 下载吧。
根据你的系统,选择不同版本,一般建议直接下载最新版本吧,都是向下兼容的。
- Windows你就下载后,双击exe一直下一步就行。
- Linux更加建议,直接
yum install git
。 - Mac直接
brew install git
配置
安装完成后,要设置用户名称和email地址,因为每次git提交都会使用该用户信息。
git config --global user.name "miolyang"
git config --global user.email "test@qq.com"
查看:
git config --global user.name
git config --global user.email
注册
如不出意外,我们代码一般都是放在github上面,所以先要有一个github账号。我们先注册。(如果是公司,公司会给你注册一个,离职的时候方便回收。)
如果有账号直接登录(sign in),没有点击注册(sing up)。
配置
我们总不能每次提交都输入账号密码吧,这样太浪费时间了,我们可以把当前电脑的公钥,放到github服务器上面去,这样github就知道你是谁了。
- 生成公钥 在bash下
ssh-keygen -t rsa
不断回车。如果公钥存在会自动覆盖,则需要再次上传 - 获取公钥,公钥一般生成在 ~/.ssh/id_rsa.pub,我们cat就可以得到了。
- 配置,进入github中,右上角头像->settings->SSH and GPG keys->New SSH key,取一个你识别的名字,然后把公钥复制进去
- 打完收工。
提交到远程
概念讲解
一张图作为开局吧:
- 我们从右往左看,所有都是有状态的。
- 一个文件做了改动,还在工作区,那么他是有两个状态的,如果是修改的文件,状态是unstaged,如果是新建的文件,状态是untracked。
- 通过add命令,可以把文件从工作区提交到暂存区,它的状态就是staged。
- 通过commit命令,可以把文件从暂存区提交到本地仓库,本地仓库就有详细的记录,每次commit都是一个版本,都是可以回滚的。 通过
git log
可以查看提交记录。
可以通过 git status
来查看修改的状态。
新项目第一次提交到远程服务器
- 首先要bash到你的项目文件夹下面。
- 然后使用
git init
进行初始化,直到看到一个.git文件 - 进入github中的home点击,左上角的New,创建一个远程的仓库。
- 填写项目名称
- 当前仓库是公开还是私有的,公开就是大家都看得到,私有就是你和你下面授权的人才看到的。
- 添加README文件?
- 有一些不需要提交的配置,比如go项目的模板
- 点击创建吧。
仓库创建后,那需要把本地仓库同步到远程仓库。首先需要建立连接,那就要想知道远程仓库的地址,我们一般采用ssh,所以如下图所示。
建立远程链接:
git remote add origin <GitHub仓库URL>
添加到暂存区
git add .
提交到本地仓库
git commit -m "Initial commit"
提交到远程仓库
git push -u origin master
好了,一起的命令就是
git init
git remote add origin <GitHub仓库URL>
git add .
git commit -m "Initial commit"
git push -u origin master
讲讲 SSH、HTTPS、GitHub ClI区别吧
交互方式 | 安全性 | 身份验证 | 用途 |
---|---|---|---|
SSH | 加密的安全协议,在传输过程中是加密的 | 公钥信息添加到github | 较高安全性的情况下,比如公司电脑 |
HTTPS | 也是加密的,但还需要用户名和密码,或者是令牌 | 用户名和密码或令牌 | 设置 SSH 密钥时,比如临时查看 |
GitHub CLI | 命令行工具,支持SSH和HTTPS两种访问,自定义 | 结合ssh和https | 无论ssh和http,都可以使用CLI执行操作 |
总结:
- 使用 SSH 可以提供更高的安全性和身份验证。大部分情况下,都是使用这个。
- 使用 HTTPS 更容易设置,适用于不需要高度安全性的情况。
- GitHub CLI 是一个方便的命令行工具,可以根据需要选择 SSH 或 HTTPS 与 GitHub 仓库交互。
提交到已有分支
我们在工作中,一般都是拉出一条分支,然后每天先过来拉取远端,然后再提交新代码到远程仓库。 如果还没有项目文件,则需要先克隆出来。
- 直接
git clone xxx
xxx就是项目地址。如上面的ssh。拉取下来一般是master分支。 - 基于master创建自己迭代的分支,并且切换到迭代分支
git checkout -b U0000 master
好了下面就是我们每天都要敲的命令了,暂时不涉及到merge。
git pull # 拉取远端代码
git add .
git commit -m "Initial commit"
git push -u origin U0000 # U0000表示分支名
以上那几个命令,在正常情况下是够用的了。
好了,此次,我们最最基础的使用,讲解完成了。
实战开干
针对性的一些问题讲解,都是在工作用遇到的一些问题。
提交公约
我们提交的时候,根据提交内容,需要填写commit类型,每种类型在提交时需要添加相对应的关键字,这样方便线上回滚等等。
add:添加功能,在有关联研发任务的情况下,需要加上关联的任务编号。
fix:没有任务号,且不用加任务的修改。
bug:修复缺陷,需要加上关联的任务编号。
drop:移除不用功能或代码。
bump:更新 common 库或者其它依赖库,需要说明具体更新的功能。
refactor:代码重构,不改功能。
optimize:优化性能,不改功能。
other:不属于以上任何类型。
分支合并
必备技能,我们的分支都需要合并到master(现在改为main)上去的。比如需要把U0000的代码合并到master上去。
- 切换到主分支
git checkout master
- 合并
git merge U0000
- 提交到远程仓库
- 如果有冲突,需要解决冲突先
sync-core> git merge U0000
Updating 8f28fad..ac5b029
Fast-forward
cmd/root.go | 2 --
main.go | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-)
sync-core> git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:renweimian35/sync-core.git
8f28fad..ac5b029 master -> master
合并提交记录
有些同学,不遵守提交规范,每次提交的commit都是一样的,这样显得提交记录很难看,需要合并。比如:
好多提交,都是一样的备注信息,我们需要合并成两条,一条最新的,一条最旧的,中间的都合并掉。
- 获取最旧的sha,比如上述的 ac5b029f,但是我们要需要记录最近提交的sha:09556db
git rebase -i ac5b029f
- 把除去最新和最旧的sha,其余的pick都改为f,然后保存。
- git push -f 强推上去
pick 09556db 去掉root同步es
f 82ea65e 去掉root同步es
f e0d67ce 去掉root同步es
f e97d630 去掉root同步es
pick 6407135 去掉root同步es
恢复到某个commit
俗称回滚,不管什么原因咯,反正需要回滚了。
- 我们
git log
查看。得到需要回滚版本的SHA码。 - 我本人比较喜欢通过IDE,或者直接去github上面查看会更加清晰一点。
- 比如要回滚到第三次提交,得到sha为:63fb2b1,执行
git reset --hard 63fb2b1
即可。
假设你拉下来的代码,编写后写的乱七八糟的,需要回滚到当前分支远程仓库的状态,那么只需要 git reset --hard
即可。