谈谈git的奇淫技巧

miloyang
0 评论
/ /
554 阅读
/
7074 字
26 2023-10

每天都在用的工具,除了add/commit/push/pull/merge等等常用的,你还会什么?

说实话,博主呢,一般用很少用git命令,都是直接通过IDE集成git来超过,来来回回都是那么几个操作,直到上家公司代码多个迭代合并,启动了gitflow 工具进行代码合并,虽然也是几个简单的命令,但也意识到了想全盘了解下git工具全盘面貌,这不,最近有的是时间,整理下文档,一起学习。

基本入门

简介

git是分布式的,不需要有中心服务器,当然咯,我们使用git并且有一个中心服务器,我们一般叫做远程仓库,它仅仅是为了方便交换大家的修改,它的地位以及内容和我们每个人的电脑都是一样的。
那没有git之前,用什么进行代码管理呢?SVN?CVR等等,用过git之后,再用那些,就完全不习惯了。以下是git的整个提交、拉取流程。

gitjiagoutubTk

  • 1:clone,从远程仓库中clone代码到本地仓库,第一次我们一般是拉master代码下来。。
  • 2:checkout,拉代码下来后,我们总不能在master上面修改代码吧,所以要checkout出一条分支出来,在这里进行代码的编写。
  • 3:add,在分支上面编写完成后,我们需要add到暂存区,这个暂存区就是我们本地仓库的一部分。
  • 4:commit,从暂存区提交到正式的本地仓库,本地仓库保存修改的各个历史版本记录。但是只是到本地,还没到远端,别人还看不到。
  • 6:先说第6步,流程要完结。就是把本地仓库的代码,推送到远程仓库,那别人就可以通过pull,拉取你最新的代码了。
  • 5:pull,拉取远程仓库最新代码到本地,然后如果有冲突,还需要merge。这一步一般是在add之前就要做,最迟在commit之前做。

安装及注册、配置公钥

直接来 git官网 下载吧。
根据你的系统,选择不同版本,一般建议直接下载最新版本吧,都是向下兼容的。

gitxiazhaimuluM

  • 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,取一个你识别的名字,然后把公钥复制进去
  • 打完收工。

提交到远程

概念讲解

一张图作为开局吧:

jiagoutuSkBFxx2o

  • 我们从右往左看,所有都是有状态的。
  • 一个文件做了改动,还在工作区,那么他是有两个状态的,如果是修改的文件,状态是unstaged,如果是新建的文件,状态是untracked。
  • 通过add命令,可以把文件从工作区提交到暂存区,它的状态就是staged。
  • 通过commit命令,可以把文件从暂存区提交到本地仓库,本地仓库就有详细的记录,每次commit都是一个版本,都是可以回滚的。 通过git log可以查看提交记录。

可以通过 git status来查看修改的状态。

新项目第一次提交到远程服务器

  • 首先要bash到你的项目文件夹下面。
  • 然后使用git init进行初始化,直到看到一个.git文件
  • 进入github中的home点击,左上角的New,创建一个远程的仓库。

githubyuanchengcangkuKU

- 填写项目名称
- 当前仓库是公开还是私有的,公开就是大家都看得到,私有就是你和你下面授权的人才看到的。 
- 添加README文件?
- 有一些不需要提交的配置,比如go项目的模板
- 点击创建吧。
  • 仓库创建后,那需要把本地仓库同步到远程仓库。首先需要建立连接,那就要想知道远程仓库的地址,我们一般采用ssh,所以如下图所示。 cangkucangjianhouRootmGuy4

  • 建立远程链接: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都是一样的,这样显得提交记录很难看,需要合并。比如:

tijiaojilu4r60XQ 好多提交,都是一样的备注信息,我们需要合并成两条,一条最新的,一条最旧的,中间的都合并掉。

  • 获取最旧的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上面查看会更加清晰一点。 githubhuigunkBg

idehuigunmaM

  • 比如要回滚到第三次提交,得到sha为:63fb2b1,执行 git reset --hard 63fb2b1 即可。

假设你拉下来的代码,编写后写的乱七八糟的,需要回滚到当前分支远程仓库的状态,那么只需要 git reset --hard 即可。

人未眠
工作数十年
脚步未曾歇,学习未曾停
乍回首
路程虽丰富,知识未记录
   借此博客,与之共进步