Git相关
Contents
0 初始化配置
0.1 全局配置
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址
|
|
0.2 配置SSH公匙
0.2.1 本地创建ssh key
打开终端,输入如下指令
|
|
直接点回车,说明会在默认文件id_rsa上生成ssh key
然后系统要求输入密码,直接回车表示不设密码;重复密码是也可以直接回车,表示不设密码。
创建成功后,在终端输入如下指令,便可看到几个文件:
|
|
如没有known_hosts,可以后续尝试clone项目,git会为我们自动添加known_hosts文件
vscode或vim打开id_rsa.pub
,复制全部内容备用。
0.2.2 git账户设置ssh
进入github主页,进入Account Settings,左边选择SSH Keys,Add SSH Key,
title建议填写计算机名称,粘贴刚刚复制的key。确定后配置完成了
0.2.3 验证
输入以下指令验证配置是否成功:
|
|
如果配置过密码,输入密码后,看到如下指令,则表示配置成功
|
|
0.3 修改之前的http仓库为ssh
|
|
0.4 创建多个ssh key
在使用git的时候,遇到需要创建多个ssh key的需求,一个用来github项目,一个用来gitlab项目;
之前如果已将创建过一个ssh key,那么在创建第二个的时候,要修改默认名称,然后增加配置文件;
之前创建ssh key生成了如下两个文件,一个私钥,一个公钥
id_rsa id_rsa.pub
我们要生成新的一个ssh key,由于路径跟之前的一直,所以要改个名字
id_rsa_gitlab id_rsa_gitlab.pub
具体如下,-f
指定路径及文件名:
|
|
注意:因为SSH默认只读取id_rsa,为了让SSH识别新的私钥,需要使用命令将其添加到SSH agent,命令如下:
|
|
若执行ssh-add时提示“Could not open a connection to your authentication agent”,则执行下面的命令:
|
|
然后再运行ssh-add命令(可以通过ssh-add -l查看私钥列表)
接着修改配置文件:
在~./ssh目录下新建一个config文件,命令如下:
|
|
配置文件如下: #github Host github.com IdentityFile ~/.ssh/id_rsa User a@b.com
#gitlab Host gitlab.com IdentityFile ~/.ssh/id_rsa_gitlab User a@b.com
1 简单的代码提交流程
1.1 基本流程
git status
查看工作区代码相对于暂存区的差别,可简写为gst
git add .
将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录,可简写为ga .
git commit -m "注释"
将缓存区内容添加到本地仓库,尽量使用双引号git pull origin master
先将远程仓库master中的信息同步到本地仓库master中git push origin master
将本地版本库推送到远程服务器,origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的
1.2 存在分支的情况
git branch
查看当前所在分支git checkout 分支名
切换到工作分支git status
查看有没有需要提交的改动git pull
与远端代码保持同步coding...
git add . && git commit -m "注释"
将改动提交git push origin 分支名
推送到远程
2 git flow协同工作流
2.1 单人管理模式
-
单人管理模式即组长建立与管理主仓库,组员不在主仓库的分支上开发,而是 fork 到自己 workspace 下。每次开发,需要先checkout 一个新的分支,commit 之后推送到自己的仓库,再向主仓库提Merge Request。所以开发过程中对于大多数项目来说,都会经过如下步骤:
-
Fork(Once)
-
Create a branch
-
Add commits
-
Open a Merge Request
-
Code review
-
Merge
-
Deploy
-
-
流程详解如下
2.1.1 fork
-
主仓库一般有两个分支,master和dev,日常开发工作在dev分支(设置为default)
-
协同办公的组员,将主仓库fork到自己的github,将dev分支clone到本地
-
将主仓库的远程地址添加进来
1
$ git remote add upstream 主仓库url
-
push和pull时,分别使用自己的仓库和主仓库
1 2
$ git push origin HEAD:分支 $ git pull upstream dev
2.1.2 建立分支
-
(此步骤之后的所有操作,就是日常工作的操作流程了)查看当前分支
1 2 3 4 5 6 7 8 9
# 查看所在分支 $ git branch * dev # 查看本地和远程的全部分支 $ git branch -a * dev remotes/origin/HEAD -> origin/dev remotes/origin/dev remotes/origin/master
-
新建分支
- 当正式开始coding前,先不要在dev分支上直接开始,先pull一下主仓库保证代码为最新,之后新建一个当天开发用的分支(from dev)
1 2 3 4
$ git pull upstream dev $ git checkout -b todaywork Swiched to a new branch 'check'
- Coding…
2.1.3 stash & 同步分支代码
-
stash
- 当开发完成一个功能,或者这一天结束了,想要提交代码前,要先pull主仓库的代码
- 但直接pull代码会带来冲突,此时可以使用stash命令,将提交或者代码放入暂存区
1 2
$ git stash save "202207251044" $ git pull upstream dev
- 主仓库最新代码拉取下来后,将暂存区内容拿出来
1 2 3 4 5 6 7 8
# stash命令 $ git stash list # 查看stash了哪些存储 $ git stash show # 显示做了哪些改动 $ git stash apply stash@{$num} # 将某个暂存取出 $ git stash drop stash@{$num} # 丢弃stash@{$num}存储,从列表中删除这个存储 $ git stash clear # 删除所有缓存的stash # 一般使用pop,相当于apply(0) + drop(0) $ git stash pop
- 解决本地冲突即可,stash会智能显示代码中的冲突
2.1.4 正常提交代码
-
add&commit&push
- 接下来要将代码提交至本地仓库,首先要查看代码状态
1
$ git status / git diff
- 提交代码
1
$ git add . && git commit -m "feat: xxx"
- push到自己的远程仓库
1
$ git push origin todaywork
2.1.5 Pull Request
- 提PR
- 我们到自己的远程仓库里,向主仓库提交分支合并请求,一般是自己这次工作创建的分支(todaywork)合并到主仓库的dev分支。
- 选择好分支后,可以描述这次的合并请求,加title和description,在合并选项里可以选择在合并请求同意后删除这个分支,这个看个人情况,选或是不选,一般自己新建的工作分支可以选择勾上。之后就可以submit提交了,等待项目负责人的回应。这里也可以选择右上角的Assign——>Edit,来选择管理人员,效果相当于“@提醒一下”。
2.1.6 Code Review
- 之后就是在项目负责人那边查看这个合并请求,进行Code Review,主要是:
- 发现错误:人都会不可避免的出现一些纰漏,而这些纰漏在另一个人眼中也许显而易见。
- 健壮性检查:代码是否健壮,是否有潜在安全、性能风险。代码是否可以回滚。
- 质量保证:在一般情况下,新提交的代码一定需要写测试,测试不只可以保证你的提交符合预期,还可以在后人改你的代码时多一层保障。
- 统一风格:对于整个团队来说,代码风格的统一很重要。
- 完善注释:包括 commit message、代码中复杂实现是否有解释性的注释、紧急 hack 是否明确标注等。
- 互相学习
- 哪些人需要参与 Review
- 项目的维护者
- 上下游影响的相关人员
- Reviewer人员还可以对相关的代码做评论,点赞等等,再所有人觉得代码没有问题之后,便可以接收这次合并请求,你的分支就合并到了主仓库的主分支上,你的代码就算是加上去了。
- 当然,主仓库管理人也可以对你的合并请求提出问题,做出相关评论,暂时不合并你的分支,甚至取消这个请求,这时你就需要查看评论和问题,修改代码,再次push你自己的这个分支(提交请求合并的分支),另一边也能及时看到变化(显示两次commit)。如果你的合并请求被取消了,只能重新再提交请求。
2.1.7 同步本地与主仓库代码
-
最后,在自己的workspace下,既可以将工作分支合并到自己的dev分支中,也可以直接删除工作分支,pull主仓库来同步最新代码
1 2 3 4 5 6 7
# 方案一 $ git checkout dev $ git merge todaywork $ git branch -d todaywork # 方案二 $ git branch -d todaywork $ git pull upstream dev
2.2 多人协同模式
// TODO
3 git add
- 提交所有变化
|
|
- 提交被修改和被删除的文件,不包括新文件
|
|
- 提交新文件和被修改的文件,不包括被删除的文件
- 2.x版本的
git add .
相当于-A
|
|
4 git commit
- 取消上次commit
git reset --soft HEAD^
——仅撤回commit操作,不改变代码- HEAD表示回退版本,如果你进行了2次commit,都想撤回,可以使用HEAD^2
--mixed
——不删除工作空间改动代码,撤销commit,并且撤销git add . 操作这个为默认参数,git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。--soft
——不删除工作空间改动代码,撤销commit,不撤销git add .--hard
——删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
- 如果commit注释写错了,只是想改一下注释,只需要
git commit --amend
5 git fetch
6 git merge
- 将所在分支与指定分支合并
|
|
7 git pull
8 git push
- 提交代码到指定远程仓库
|
|
加了参数-u后,以后可以直接用git push 代替
- 使用本地分支强行覆盖远程分支
|
|
9 git remote
- 添加远程仓库
|
|
- 删除远程仓库
|
|
- 修改远程仓库路径
|
|
- 查看远程仓库
|
|
10 git checkout/branch
10.1 基本操作
- 查看本地有哪些分支
|
|
- 新建分支
|
|
- 切换至分支
|
|
- 新建并切换至新分支
|
|
- 删除本地分支
|
|
- 删除远端分支
|
|
10.2 业务场景
-
要将修改的业务代码同时push到其他分支:(
dev
分支的改动同步到debug
分支)1 2 3 4 5 6 7 8
// 在dev分支找到并复制最新的commitId git log // 切换到debug分支 git checkout debug // 使用cherry-pick命令,此时将会将对应的commit应用到此分支 git cherry-pick commitId // 直接push git push origin debug
11 git reset
-
git reset –soft 版本号
git reset --soft HEAD^
//回到上一个版本- 不删除工作区改动的代码,撤销commit,不撤销git add .
-
git reset –mixed 版本号
-
git reset --mixed HEAD^
//回到上一个版本 -
不删除工作区改动的代码,撤销commit,撤销git add .
git reset –hard 版本号
git reset --hard HEAD^
//回到上一个版本
-
-
-
不删除工作区改动的代码,撤销commit,撤销git add .
git reset –hard 版本号
git reset --hard HEAD^
//回到上一个版本 -
删除工作区的代码,撤销commit,撤销git add . 回到上一次commit的状态
-
Author gsemir
LastMod 2022-07-15