【茅塞顿开】Git 深度体验

614 阅读4分钟

1. Git 基本配置

下载地址:git-scm.com/download

1.1 配置用户信息

当安装 git 工具后,我们首先要做的事情就是配置用户名和邮箱地址,为后期提交代码标识用户。

# 配置: 省略号处填入对应信息
$ git config --global user.name "..."
$ git config --global user.email "..."

# 查看配置信息
$ git config --global user.name
$ git config --global user.email

1.2 指令别名配置

鉴于某些指令参数较多以及使用频率较高,我们可以为其添加别名,简化命令的使用。

1. 打开用户目录,创建 .bashrc 文件

image-20210721212135719

2..bashrc 文件中输入如下内容:

 # 为用于输出git提交日志设置别名: git-log
 $ alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

3. 使 alias 永久有效

执行如下命令,即可应用

但该命令在下次打开终端时不被承认,即命令不是永久生效的,为使得每次用户打开终端自动执行如上命令,我们需要进行如下操作:

打开(不存在则自动创建).bash_profile 文件:

image-20210721213646267

添加一行 source ~/.bashrc 命令

科普小知识:每次用户打开终端时,都会默认执行 .bash_profile 这个文件

image-20210721213736448

1.3 配置 SSH 公钥

1.3.1 生成 SSH 公钥

执行如下命令,然后不断回车即可(若公钥已经存在,则自动覆盖):

$ ssh-keygen -t rsa

1.3.2 获取公钥

$ cat ~/.ssh/id_rsa.pub

1.3.3 配置远端公钥信息

在 gitee/github 上设置 SSH 公钥:

image-20210721215728246

验证公钥是否配置成功:

$ ssh -T git@gitee.com

成功配置:

image-20210721215913460

配置公钥成功意味着在该主机上拥有权限将代码提交到远端仓库去;按照相同的方法也可以为自己的 github 账户添加公钥。

2. 基本工作流

63651-20170905212837976-775285128.png

2.1 获取本地仓库

初始化当前目录作为一个本地 git 仓库,初始化完成后当前目录会出现隐藏的 .git 目录

image-20210721220526975

2.2 基础操作指令

image-20210721220916659

2.2.1 关联远程仓库(remote)

$ git remote add origin git@gitee.com:***/git-test.git

2.2.2 添加所有工作区的文件至暂存区(add)

$ git add .

2.2.3 提交暂存区到本地仓库(commit)

$ git commit -m "提交信息"

2.2.4 查看提交日志(log)

# 前文已为查看日志操作(git log --pretty=oneline --all --graph --abbrev-commit)命别名(git-log),可直接使用别名查看
$ git-log

# 查看上次提交的详细改动
$ git show

image-20210721232915776

2.2.5 版本回退(reset)

# 根据commitId回退版本
$ git reset --hard commit-Id

# 直接回退版本(2次)
$ git reset --hard HEAD^^

2.2.6 推送至远程仓库(push)

$ git push [-f] [--set-upstream] [远端名称 [本地分支][:远程分支]]

# General usage
$ git push <远程主机名> <本地分支名>:<远程分支名>

例如:git push --set-upstream origin dev01:master —— 把本地分支 dev01 推送并绑定到远程仓库 origin(别名)的 master 分支。

若当前分支与远程分支已经关联(--set-upstream),则可以省略分支名和远端名称进行推送:$ git push


pushmerge 的镜像关系

git push 指令可看作将当前分支(HEAD)合并到远程仓库的对应分支(origin/master)!

可以抽象地理解为在远程分支 origin/master 执行 merge 操作合并本地仓库的 master 分支!

image-20210722204814354

git merge 则是将其他分支(dev2)合并到当前分支(HEAD)

image-20210722205320793

2.2.7 克隆仓库(clone)

# 本地目录名省略,会自动生成
$ git clone <仓库路径> [本地目录]

2.2.8 合并分支(merge)

$ git merge 分支名

例:当前分支为 master,在该分支下执行 git merge dev1 ,意味着将分支dev1 合并到 master 分支上。

2.2.9 从远程获取最新版本到本地仓库(fetch)

若远程仓库更新了提交信息,而本地无从得知,则需要执行 fetch 操作来更新记录远程仓库 commit 信息的本地仓库

如果设置了上游分支(--set-upstream),则可省略本地分支名和远程分支名。

若没有指定 remote name 以及 branch name,则抓取所有分支。

*fetch 指令就是将远程仓库的更新都抓取到本地,但不会进行合并!

$ git fetch [remote name] [branch name]

例:

image-20210722212906472

2.2.10 从远程获取最新版本并合并到本地仓库(pull)

如果设置了上游分支(--set-upstream),则可省略本地分支名和远程分支名。

若没有指定 remote name 以及 branch name,则抓取并更新所有分支。

*pull 指令则是将远程仓库的修改拉取到本地仓库中并自动进行合并,等同于 fetch + merge

$ git pull [remote name] [branch name]

例:

image-20210722213125980

2.3 分支

几乎所有的版本控制系统都以某种形式支持分支,使用分支意味着你可以把你的工作从开发主线上分离出来从而进行重大 Bug 修复、开发新的功能等,以免影响开发主线。

2.3.1 查看本地分支

$ git branch
$ git branch -vv

image-20210721232549448

image-20210722210226527

2.3.2 创建本地分支

$ git branch 分支名

2.3.3 切换分支

注意:切换分支前,必须先提交本地未提交的修改,否则会导致代码丢失

# 根据分支名进行切换
$ git checkout 分支名

# 切换到上一个分支
$ git checkout -

# 创建新分支并切换至该分支
$ git checkout -b 分支名

2.3.4 删除分支

# 带检查的删除分支dev1
$ git branch -d dev1
# 不带检查的强制删除,会在分支dev1 Fast Forward 的情况下使用到
$ git branch -D dev1

2.3.5 合并分支并解决冲突

当两个分支上对同一文件进行修改时,可能会导致冲突,这时候就需要手动解决冲突,解决冲突的步骤:

  1. 根据冲突信息的比对处理冲突的地方
  2. 将修正后的文件添加到暂存区(add)
  3. 然后提交到仓库(commit)

冲突部分的内容处理如下图所示

image-20210721230709471

2.3.6 更新远程分支

当我们直接在远程仓库删除分支直接在远程仓库操作文件(commit 记录 +1)等,都有可能导致本地无法及时更新/获取远程仓库的情况,所以再次操作分支可能会出错,此时只需执行以下命令更新本地仓库的分支列表/提交信息

$ git remote update [remote name] --prune
# 或者
$ git remote update [remote name] --p

例如:git remote update origin --prune

image-20210722211407574

2.3.7 开发中分支使用原则与流程

image-20210721231139950

  • master 分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
  • develop 分支:从 master 衍生出来的分支,一般作为开发部门的主要开发分支,阶段开发完成后,合并到 master 分支,准备上线
  • feature/xxx 分支:从 develop 衍生出来的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到 develop 分支
  • hotfix/xxx 分支:从 master 派生的分支,一般作为线上 bug 修复使用,修复完成后需要合并到master、test、develop 分支。
  • 还有一些其他分支,例如 test 分支(用于代码测试)、pre 分支(预上线分支)...

2.4 fetchmerge and pull

image-20210721235952291

演示上述图例

先在 A 处提交修改并 push 到远程分支,然后到 B 处执行 fetch 操作:

image-20210722220912841

然后在 Bmerge 远程分支,此时出现合并冲突(CONFLICT),解决冲突(此处修改 remote.txt 文件),解决后重新提交新的修改并 push 到远程分支:

image-20210722221914847

今天的分享就到这里!

原创不易🧠 转载请标明出处🌊

若本文对你有所帮助,点赞支持嗷🔥