希文的个人博客

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

0%

Git版本流程控制基础命令

Git版本流程控制基础命令

[TOC]

Git整体架构

整体架构

image-20220523083544677

工作流程

image-20220519140535979

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
#1.初始化
git init
#2.添加到暂存区(注意:如果你的只添加到暂存区没有提交过文件,可以使用git checkout ./(这个可以恢复所有删除的文件或文件夹)或者**文件名或者**文件夹名,用暂存中的文件恢复到本地工作目录中。如果恢复了一个文件其他文件没有恢复,并且又把文件添加到暂存没法找回)
git add ./
#3.提交仓库
git commit -m "初始化"

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

4.gitee仓库上下载项目

1
2
3
#下载仓库的命令
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官网地址

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