希文的个人博客

白日依山尽,黄河入海流。欲穷千里目,更上一层楼。

0%

Git版本流程控制基础命令

Git版本流程控制基础命令

[TOC]

Git整体架构

整体架构

image-20220523083544677

工作流程

image-20220519140535979

配置 Git 忽略文件

1.IDEA特定文件

img

2.Maven工程的target目录

img

问题 **1:**为什么要忽略他们?答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。

问题 2:怎么忽略?

1.基础命令学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#查看git 版本号
git --version
#仓库初始化
git init
#查看仓库状态
git status
#把文件添加到暂存区(注意:如果你的只添加到暂存区没有提交过文件,可以使用git checkout ./(这个可以恢复所有删除的文件或文件夹)或者**文件名或者**文件夹名,用暂存中的文件恢复到本地工作目录中。如果恢复了一个文件其他文件没有恢复,并且又把文件添加到暂存没法找回)
git add 文件名或者./
#配置用户名
git config user.name "**"
#配置邮箱
git config user.emil "**"


#克隆仓库
git clone "gitee地址"
#提交到仓库
git commit -m "一句话"
#提交先添加到暂存区在提交到仓库
git commit -a -m "一句话"
#修改提交信息
git commit --amend

#查看远程仓库地址
git remote
#先有本地仓库上传到远程仓库
git remote add origin ***.git
#查看上传拉取仓库
git remote -v

#下拉到本地(git pull=git fetch+git merge)
git pull
#上传到远程仓库
git push
#1.拉取远程仓库的文件
git fetch
#2.拉取完成之后要在本地合并提交才可以
git merge

#查看提交了几次
git log
#查看简略信息
git log --oneline
#把所有的次数提交都显示出来
git reflog --oneline


#回滚到之前的某个版本(就不是主分支了)
git checkout 哈希值
#如果需要回到之前最新的版本继续回滚到主分支
git checkout master

#创建标签(v0.1是版本号)
git tag -a v0.1 -m "一句信息"
#创建标签给某个版本,根据提交的某个版本的哈希值来创建
git tag -a v0.0 哈希值
#查看标签
git tag
#查看最新标签具体信息
git show
#查看某个版本的信息
git show v0.1 g
#删除标签
git tag -d v0.1版本号
git push

#上传到远程仓库某个具体标签
git push origin v0.1
#上传到远程仓库全部的标签
git push origin --tags



#查看当前文件和暂存区的区别
git diff
#查看暂存区与最后一个次提交
git diff --staged

#从暂存区中删除,工作区保留文件
git rm --cached "file"
#强制删除文件,加工作区都删除(得先添加到暂存区才行)
git rm -f "file"

2.撤销命令(危险)

1
2
#git reset是一个危险的命令,加上--hard也是如此
git reset --hard 哈希值

3.本地仓库上传到gitee仓库上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1.初始化
git init
#2.添加到暂存区
git add ./
#只添加到暂存区恢复误删的本地文件 (注意:git checkout ./输入后没添加到暂存区的也会撤销删除没有添加做好备份(这个可以恢复所有删除的文件或文件夹)或者**文件名或者**文件夹名,用暂存中的文件恢复到本地工作目录中。如果文件没有恢复,并且又把文件添加到暂存没法找回)
git checkout -- fileName


#3.提交仓库
git commit -m "初始化"

#绑定远程仓库
git remote add origin http:****.git
#上传到哪个仓库
git push --set-upstream origin master

4.gitee仓库上下载项目

1
2
#下载仓库的命令
git clone https:****.git

5.git分支

image-20220526134915005

1.创建分支

image-20220526134833406

2.切换分支

image-20220526135028437

3.切换到master分支

image-20220526135321328

1.介绍

image-20220526135352174

2.分叉历史

image-20220526135432413

3.手画图

  • 每一个圆圈都是一次提交的版本

  • 第三次提交的时候有别的工作需要或者发现有点提交不好,从新创建分支做新的需求继续工作。

  • 发现第二次提交有bug但是暂时没有报错。创建新分支需要修改提交了几个版本修复bug以后合并到主分支master上

image-20220526140203072

4.查看你的提交历史,各分支的指向以及项目的分叉情况

testing分支有红色箭头向下指到某次提交上就是在那次提交分支出来的

master主分支有星号向下指到某次提交上就是在那次提交分支出来的

image-20220526142453745

5.分支命令

1.创建切换
1
2
3
4
5
6
7
8
9
10
#创建分支
git branch testing
#切换分支
git checkout testing

#查看你的提交历史,各分支的指向以及项目的分叉情况(上面有介绍)
git log --oneline --decorate --graph --all

#删除分支
git branch -d testing

2.合并分支命令(还有一种形式是变基,放到第8个标题)

1
2
3
4
5
6
7
#要有一个其他分支
#回到主分支或者某个分支输入合并命令git merge *分支,需要手动解决冲突
git merge "分支名字"
#提交合并
git commit -m "master或者其他 merge 分支"
#删掉不用的分支
git branch -d 分支名字

3.直接剪出分支

1
2
#-b直接剪出分支并切换上去
git checkout -b 分支名字 某次提交的哈希值

6.分支模型

1.远程分支可以同时进行更新

image-20220602141016854

2.把远程的master分支拉取下来,然后本地合并merge

image-20220602141139390

3.可以跟踪远程不同的分支

image-20220602141359040

4.推送

介绍

image-20220602141618117

命令

image-20220602150548995

远程仓库的样子

image-20220602150751060

5.分支模型命令

1
2
3
4
5
6
7
8
9
#从远程仓库克隆一个下来
git clone http:***.git
#查看分支
git branch
#剪出分支并切换test是新分支,master是源分支
git checkout -b test master
#推送到远程仓库(test:test)
git push origin test:test

6.分支模型的功能

1.分支权限讲解

image-20220609135311678

2.本地剪出了多个分支上传到远程

1.本地

image-20220609140751868

2.远程

image-20220609140838373

3.本地上传到远程分支
1
2
3
4
#如果本地剪出了分支远程仓库没有当前分支需要使用的命令
git push upstram origin 当前分支名
#如果本地分支和远程仓库都有当前分支需要使用的命令
git push
4.合并分支
1.命令版
1
2
3
4
5
#回到主分支master
git checkout master
#合并分支(需要提交一次),如果被合并的分支没有删除可以继续开发
git merge 其他分支名字

2.网页版
  1. 去点击

    gitee->Pull Requests->创建Pull Requests

    image-20220609150259610

​ 2.查看详情

image-20220609150446758

​ 3.解决冲突

image-20220609151123936

​ 4.测试通过

​ 5.审查通过

​ 6.合并

​ 7.接受Pull Requests(合并成功)

image-20220609151411700

7.git工具-重置

工作流程图解

1.工作流程

image-20220606084025327

2.git init

image-20220606084226959

3.git add

image-20220606084337560

4.git commit

image-20220606084414704

5.修改文件

image-20220606085511027

在提交就变成v2版本

git add

git commit

2.命令

6.重置的作用

image-20220606085644229

1.移动head(指向)
1
2
#移动到父提交,就是移动到指向的那次提交,并且撤销那次提交信息,会发现git diff --staged看到暂存区和最后一次提交看到区别
git reset --soft head~

image-20220606085721854

2.更新所以(–mixed)
1
2
3
#移动到父提交,就是移动到指向的那次提交,并且撤销那次提交信息,会发现git diff看到本地和暂存区的区别(--mixed可有可无一般加上)
git reset --mixed head~

image-20220606092500185

3.更新工作目录(–hard) 危险

#!注意:危险

1
2
3
4
5

#会用暂存区的文件覆盖掉本地工作区的文件,被覆盖掉的数据无法恢复
git reset --hard HEAD~

git reset --hard 哈希值

image-20220606093054648

8.变基(注意团队协作时候慎用)

注意事项(变基的风险在官网看到的):

​ 呃,角色变的并非完美无缺,它必须遵循规范:

如果提交存在于你的这些仓库之外,而其他人可能基于提交进行开发,那么就不要执行更改基。

​ 否则,人民群众会冤枉你,你的朋友和家人也会欢迎你,唾弃。

​ 改变基操作的实质是丢弃了一些现有的新建地,但如果你已经提交了一些实际不同的内容,而其他人已经提交了一些至仓库。如果你进行了工作,如果此时,如果你git rebase提交并使用命令工作,那么你的同胞将再次组织他们与你的工作人员一起工作,并与你的工作人员进行合作,将他们与你的工作进行整合。他们修改过的提交,会发生一团糟。

​ 如果你只是不会离开你的电脑提交的执行变基,那就不会有事了。那个你已经开发到仓库的提交上执行了更改的库命令,并因此遗弃了别人所基于的提交,你的大麻烦,因此有一些人鄙视你。

​ 如果你或你的同事在某些情况下要执行此git pull --rebase命令,请一定通知每个人,这样尽管伤痛,但不能缓和执行。

变基 vs. 合并

​ 至此,你已经在实战中学习了,并打算在实战中学习的时候讨论一下,最终你一定要改变什么后退的方式。 。

​ 从这个角度看,提交历史亵渎,你利用谎言本身就是记录历史的一种说法。如果是由它产生的约定是这样发生的事情。

​ 没有人会出版一本书的第一版,软件维护手册也是需要方便使用。会使用rebasefilter-branch等工具来写故事,怎么方便后来的读者就怎么写。

​ 现在,让我们回到之前的问题上来,到底合并还是变基好?希望你能明白,这并没有一个简单的允许。分别是学习了其中的用处,相信你根据情况已经做出了明智的选择。

​ 总的是,只对广泛使用或使用方便操作的方式进行操作,方便大家的修改执行操作,从没有给你的能力改变到合适的地方,让你可以改变操作的习惯,带来方便,这样可以方便地使用。

变基的基本操作

1.有两个分支

basic-rebase-1

2.分叉的提交历史(用git merge **)

它通过两个最新分支的方法是最容易进行的merge。它与两个最新的分支(以及最新的命令C3C4的共同(以及最近的三个命令C2)的结果是同时生成一个新的预告(并提交)。 )。

basic-rebase-2

3.通过合并操作来整合分叉的历史(git rebase **)

你可以在C4中提取C3基础的基础和修改,然后在 Git 中,这种操作就习惯rebase了。至分支上的所有修改都移到分支上,就好像“重新播放”一样。(源分支指的是你所在分支,指定分支就是你要合并到的分支。前面的话的意思是:就是你把源分支修改的部分都移到你指定的分支上去,然后再回到指定分支进行合并)

在这个中,你可以检测出experiment分支,然后将它变到基master分支上:

1
2
3
4
#切换分支
git checkout experiment
#将当前分支修改的部分临时文件放到master分支,并没有合并
git rebase master

git rebase命令之后的方式

官网的介绍:

然后它的原理是先找到这两个分支(当前分支experiment、改变基操作的目标即为基础并为master最近的共同祖先)C2,然后当前分支提交给该祖先的历次,相应的存储临时文件,修改将当前指定的目标明确目标顺序C3,最后将在另存为临时文件的依序应用之前将其另存为临时文件。

basic-rebase-3

4.将C4中的修改变基到C3上(就相当于c4修改的部分移到c3上去)

现在回到master分支,进行一次快进合并,合并完成后两个分支都指到当前分支。

此时,C4指向的分支就改变了合并示例,虽然实际上的开发工作是并行的,但似乎发现是历史上没有记录的,他们是直接分叉的。

1
2
3
4
#切换回master
git checkout master
#合并分支
git merge experiment

basic-rebase-4

后面一部分没写看官网吧

git官网地址

第五个部分对应到 (更有趣的变基例子

9.自建代码托管平台**-GitLab**

9**.1 GitLab** 简介

GitLab 是由 GitLabInc.开发,使用 MIT许可证的基于网络的Git仓库管理工具,且具有 wiki和 issue 跟踪功能。使用 Git作为代码管理工具,并在此基础上搭建起来的 web 服务。

GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby语言写成。后来,一些部分用 Go语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以

及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,

Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用。

9**.2 GitLab** 官网地址

官网地址:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation/

9**.3 GitLab** 安装

9**.3.1** 服务器准备

准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。

此教程使用虚拟机:主机名:gitlab-server IP 地址:192.168.6.200

9**.3.2** 安装包准备

Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。

下载地址:

1.清华大学镜像站可以搜索到gitlab-ce安装包

https://mirrors.tuna.tsinghua.edu.cn/

2.官网下载链接

https://packages.gitlab.com/gitlab/gitlabce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

注:资料里提供了此 rpm 包,直接将此包上传到服务器/opt/module 目录下即可。

9**.3.3** 编写安装脚本

安装 gitlab 步骤比较繁琐,因此我们可以参考官网编写 gitlab 的安装脚本。

1
2
3
4
5
6
7
8
[root@gitlab-server module]# vim gitlab-install.sh 
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlabce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlabce

给脚本增加执行权限

1
2
3
4
[root@gitlab-server module]# chmod +x gitlab-install.sh  
[root@gitlab-server module]# ll 总用量 403104
-rw-r--r--. 1 root root 412774002 4月 7 15:47 gitlab-ce-13.10.2ce.0.el7.x86_64.rpm
-rwxr-xr-x. 1 root root 416 4月 7 15:49 gitlab-install.sh

然后执行该脚本,开始安装 gitlab-ce。注意一定要保证服务器可以上网。

1
2
3
4
5
[root@gitlab-server module]# ./gitlab-install.sh  警告:/opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY 准备中...                          ################################# 
[100%]
正在升级/安装...
1:gitlab-ce-13.10.2-ce.0.el7 ################################# [100%]
。 。 。 。 。 。

9.3.4 初始化 GitLab 服务执行以下命令初始化 GitLab 服务,过程大概需要几分钟,耐心等待…

1
2
3
4
5
[root@gitlab-server module]# gitlab-ctl reconfigure  
。 。 。 。 。 。
Running handlers:
Running handlers complete
Chef Client finished, 425/608 resources updated in 03 minutes 08 seconds gitlab Reconfigured!

9**.3.5** 启动 GitLab 服务

执行以下命令启动 GitLab 服务,如需停止,执行 gitlab-ctl stop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@gitlab-server module]# gitlab-ctl start 
ok: run: alertmanager: (pid 6812) 134s
ok: run: gitaly: (pid 6740) 135s
ok: run: gitlab-monitor: (pid 6765) 135s
ok: run: gitlab-workhorse: (pid 6722) 136s
ok: run: logrotate: (pid 5994) 197s
ok: run: nginx: (pid 5930) 203s
ok: run: node-exporter: (pid 6234) 185s
ok: run: postgres-exporter: (pid 6834) 133s
ok: run: postgresql: (pid 5456) 257s
ok: run: prometheus: (pid 6777) 134s
ok: run: redis: (pid 5327) 263s
ok: run: redis-exporter: (pid 6391) 173s
ok: run: sidekiq: (pid 5797) 215s
ok: run: unicorn: (pid 5728) 221s

9.3.6 使用浏览器访问 GitLab 使用主机名或者 IP 地址即可访问 GitLab 服务。需要提前配一下 windows 的 hosts 文件。

img

img

img

首次登陆之前,需要修改下 GitLab 提供的 root 账户的密码,要求 8 位以上,包含大小写子母和特殊符号。因此我们修改密码为 Atguigu.123456 然后使用修改后的密码登录 GitLab。

img

登陆成功

img

img

9.3.7 GitLab 创建远程库

img

img

img

➢ 1)安装 GitLab 插件

img

➢ 2)设置 GitLab 插件

img

img

img

➢ 3)push 本地代码到 GitLab 远程库

img

自定义远程连接

img

img

注意:gitlab 网页上复制过来的连接是:http://gitlab.example.com/root/git-test.git需要手动修改为:http://gitlab-server/root/git-test.git

选择 gitlab 远程连接,进行 push。

img

首次向连接 gitlab,需要登录帐号和密码,用 root 帐号和我们修改的密码登录即可。

img

代码 Push 成功。

img

只要 GitLab 的远程库连接定义好以后,对 GitLab 远程库进行 pull 和 clone 的操作和

Github 和码云一致,此处不再赘述。