git——版本控制

基本概念

好处:优雅备份、多人并行开发、了解变化内容

版本控制系统:

  • 集中式:开发者共用仓库需联网,有CVS、SVN
  • 分布式:每个开发者都是一个仓库的完整克隆支持断网,有Git、BitKeeper

Git基本概念

  • 工作区(Workspace):存放从仓库提取出来的文件的地方,放在磁盘供使用修改
  • 暂存区(Index/Stage):就是一个索引文件,保存了下次将提交的文件列表信息
  • 仓库(Local Repository):保存所有数据的地方,有提交的所有版本数据
  • 远程仓库(Remote Repository):托管代码的地方,可供其他人浏览、下载代码的服务器

Git常用子命令

  • config 修改git配置
  • init       初始化本地仓库
  • add      添加修改到暂存区
  • commit 提交修改到本地仓库
  • status   查看当前状态
  • clone    将远程服务器的仓库克隆到本地
  • push     提交修改到远程服务器

git操作流程

安装git:

#安装中文支持(选做)

[root@Programer ~]# echo $LANG                              #查看当前系统语言及编码

en_US.UTF-8

[root@Programer ~]# yum -y install langpacks-zh_CN.noarch   #安装中文支持

[root@Programer ~]# vim /etc/locale.conf                    #配置系统使用中文及编码

[root@Programer ~]# cat /etc/locale.conf 

LANG="zh_CN.UTF-8"

[root@Programer ~]# reboot                                  #重启使语言配置生效


[root@Programer ~]# echo $LANG                              #确认使用中文编码

zh_CN.UTF-8

[root@Programer ~]# 


#yum源中集成了Git软件包,使用yum安装Git

[root@Programer ~]# yum clean all; yum repolist -v          #插件yum源是否可用

...

Total packages: 8,265

[root@Programer ~]# yum -y install git                      #使用yum安装Git

...

Complete!

[root@Programer ~]# git --version                           #查看Git版本

git version 2.31.1

[root@Programer ~]# git --help                              #查看Git命令帮助信息

Git基础配置

#Git基础配置

    # --local:  仓库级

    # --global: 全局级

    # --system: 系统级

[root@Programer ~]# git config --global user.name mark              #设置用户名

[root@Programer ~]# git config --global user.email mark@tedu.cn     #设置用户邮箱

[root@Programer ~]# git config --global init.defaultBranch master   #设置版本库默认分支


[root@Programer ~]# git config --list                               #查看已有Git配置

user.name=mark

user.email=mark@tedu.cn

init.defaultbranch=master

[root@Programer ~]# cat ~/.gitconfig                                #查看Git配置持久化文件

[user]

        name = mark

        email = mark@tedu.cn

[init]

        defaultBranch = master

[root@Programer ~]# 

初始化版本库

#使用Git命令初始化空版本库

[root@Programer ~]# ls

[root@Programer ~]# git init myproject                          #初始化空版本库

已初始化空的 Git 仓库于 /root/myproject/.git/

[root@Programer ~]# ls                                          #确认版本库已创建

myproject

[root@Programer ~]# ls -a myproject/                            

.  ..  .git

[root@Programer ~]# ls -a myproject/.git/

.  ..  branches  config  description  HEAD  hooks  info  objects  refs


git版本库操作

 

 

Git版本库查询

#查看本地Git版本库信息

[root@Programer myproject]# git log                             #本地版本库提交记录(详细)

commit 09d8603547b7f7c6cf5b2850dd241d4b8b799b74 (HEAD -> master)

Author: mark <mark@tedu.cn>

Date:   Wed Feb 22 15:00:46 2023 +0800


    add readme

[root@Programer myproject]# git log --pretty=oneline            #本地版本库提交记录(简略)

09d8603547b7f7c6cf5b2850dd241d4b8b799b74 (HEAD -> master) add readme

[root@Programer myproject]# git log --oneline                   #本地版本库提交记录(极简)

09d8603 (HEAD -> master) add readme

[root@Programer myproject]# 

Git生成多个版本

#数量掌握Git本地版本库操作

[root@Programer ~]# cd myproject/

[root@Programer myproject]# echo 123 > test.txt                 #新建test.txt文件

[root@Programer myproject]# git add test.txt                    #将test.txt添加到暂存区

[root@Programer myproject]# git commit -m "add test.txt"        #生成新版本

[master 27466f7] add test.txt

 1 file changed, 1 insertion(+)

 create mode 100644 test.txt

 

[root@Programer myproject]# echo 456 > test.txt                 #修改test.txt文件

[root@Programer myproject]# git add .                           #将修改文件添加到暂存区

[root@Programer myproject]# git commit -m "modify test.txt"     #生成新版本

[master 58cdf79] modify test.txt

 1 file changed, 1 insertion(+), 1 deletion(-)

 

[root@Programer myproject]# echo 789 > test.txt                 #修改test.txt文件

[root@Programer myproject]# git add ./                          #将修改文件添加到暂存区

[root@Programer myproject]# git commit -m "done test.txt"       #生成新版本

[master 0f44bf0] done test.txt

 1 file changed, 1 insertion(+), 1 deletion(-)

 

[root@Programer myproject]# git log --pretty=oneline            #查看本地提交记录(简略)

0f44bf04834eac643a0d56901039cec73128d3cc (HEAD -> master) done test.txt

58cdf7905a95a956fc65da264aab827fc7290dbf modify test.txt

27466f79df8e0cbfd3f8f2349143e054db8ac693 add test.txt

09d8603547b7f7c6cf5b2850dd241d4b8b799b74 add readme

[root@Programer myproject]# git log --oneline                   #查看本地提交记录(极简)

0f44bf0 (HEAD -> master) done test.txt

58cdf79 modify test.txt

27466f7 add test.txt

09d8603 add readme

[root@Programer myproject]# 

HEAD指针概念

  • HEAD指针是一个可以在任何分支和版本移动的指针
  • 通过移动指针我们可以将数据还原至任何版本
Head指针操作

查看版本信息,获取指针 ——log

#使用git log命令查看HEAD指针

[root@Programer ~]# cd myproject/

[root@Programer myproject]# git log --pretty=oneline            #查看Git指针

0f44bf04834eac643a0d56901039cec73128d3cc (HEAD -> master) done test.txt

58cdf7905a95a956fc65da264aab827fc7290dbf modify test.txt

27466f79df8e0cbfd3f8f2349143e054db8ac693 add test.txt

09d8603547b7f7c6cf5b2850dd241d4b8b799b74 add readme

[root@Programer myproject]# cat test.txt                        #查看文件内容

789

回滚到指定版本 ——使用reset子命令

#reset子命令用于版本还原

    #--soft:缓存区和工作目录不受影响。reset后分支和HEAD指针移动到指定的commit,代码文件内容和reset之前一样,修改部分已加入到暂存区。通常用于重新提交。

    #--mixed:(默认)工作目录不受影响。reset后分支和HEAD指针移动到指定位置,代码文件内容和reset之前一样,修改部分未加入到暂存区。(需要重新执行git add)

    #--hard:工作目录,缓存区均受影响。reset后分支和HEAD指针移动到指定commit,代码文件内容回退到指定commit,工作空间为clean状态。通常用于获取指定版本的代码文件

[root@Programer myproject]# git reset --hard 58cdf7905a     #还原到指定版本

HEAD 现在位于 58cdf79 modify test.txt

[root@Programer myproject]# git log --oneline               #确认HEAD指针移动

58cdf79 (HEAD -> master) modify test.txt

27466f7 add test.txt

09d8603 add readme

[root@Programer myproject]# cat test.txt                    #查看文件内容

456

使用reflog子命令配合reset回到最新版本

git relog

git reset --hard 52fced1

Git分支

分支可以让开发分多条主线同时进行,每条主线互不影响

  -    按功能模块分支、按版本分支

   -   分支也可以合并

分支规范:

MASTER分支:主分支,代码核心

DEVLOP分支:最新开发成果分支

RELEASE分支:为发布新产品设置分支

HOTFIX分支:为修复BUG缺陷的分支

FEATURE分支:为开发新功能设置的分支

管理多分支

查看当前分支

创建分支

切换分支

#查看当前分支信息,branch子命令

[root@Programer ~]# cd myproject/

[root@Programer myproject]# git status                      #查看本地Git仓库信息

位于分支 master

无文件要提交,干净的工作区

[root@Programer myproject]# git branch -v                   #查看分支信息

* master 0f44bf0 done test.txt

[root@Programer myproject]# 


#创建分支

[root@Programer myproject]# git branch hotfix               #创建hotfix分支

[root@Programer myproject]# git branch feature              #创建feature分支

[root@Programer myproject]# git branch -v                   #查看分支信息

  feature 0f44bf0 done test.txt

  hotfix  0f44bf0 done test.txt

* master  0f44bf0 done test.txt

[root@Programer myproject]# 


#切换分支,checkout子命令

[root@Programer myproject]# git branch -v                   #查看分支信息

  feature 0f44bf0 done test.txt

  hotfix  0f44bf0 done test.txt

* master  0f44bf0 done test.txt

[root@Programer myproject]# git checkout hotfix             #切换分支

切换到分支 'hotfix'

[root@Programer myproject]# git branch -v                   #查看分支信息

  feature 0f44bf0 done test.txt

* hotfix  0f44bf0 done test.txt

  master  0f44bf0 done test.txt

[root@Programer myproject]# git checkout feature            #切换分支

切换到分支 'feature'

[root@Programer myproject]# git branch -v                   #查看分支信息

* feature 0f44bf0 done test.txt

  hotfix  0f44bf0 done test.txt

  master  0f44bf0 done test.txt

[root@Programer myproject]# 


#删除分支

[root@Programer myproject]# git branch develop              #创建develop分支

[root@Programer myproject]# git branch -v

  develop 0f44bf0 done test.txt

* feature 0f44bf0 done test.txt

  hotfix  0f44bf0 done test.txt

  master  0f44bf0 done test.txt

[root@Programer myproject]# git branch -d develop           #删除develop分支

已删除分支 develop(曾为 0f44bf0)。

[root@Programer myproject]# 

合并分支

#无冲突分支合并

[root@Programer ~]# cd myproject/

[root@Programer myproject]# git checkout hotfix             #切换到hotfix分支

切换到分支 'hotfix'

[root@Programer myproject]# echo haha > haha.txt            #创建haha文件

[root@Programer myproject]# git add ./                      #添加haha到暂存区

[root@Programer myproject]# git commit -m "add haha.txt"    #生成新版本

[hotfix 108cf46] add haha.txt

 1 file changed, 1 insertion(+)

 create mode 100644 haha.txt

[root@Programer myproject]# ls

haha.txt  readme.md  test.txt

[root@Programer myproject]# cat haha.txt 

haha

[root@Programer myproject]# git checkout master             #切换到master分支

切换到分支 'master'

[root@Programer myproject]# echo xixi > xixi.txt            #创建xixi文件

[root@Programer myproject]# git add ./                      #添加xixi到暂存区

[root@Programer myproject]# git commit -m "add xixi.txt"    #生成新版本

[master 32f0842] add xixi.txt

 1 file changed, 1 insertion(+)

 create mode 100644 xixi.txt

[root@Programer myproject]# ls

readme.md  test.txt  xixi.txt


[root@Programer myproject]# git branch -v                   #切换到master分支

  feature 0f44bf0 done test.txt

  hotfix  108cf46 add haha.txt

* master  32f0842 add xixi.txt

[root@Programer myproject]# git merge hotfix                #合并hotfix分支到master分支

Merge made by the 'recursive' strategy.

 haha.txt | 1 +

 1 file changed, 1 insertion(+)

 create mode 100644 haha.txt

[root@Programer myproject]# ls                              #确认文件

haha.txt  readme.md  test.txt  xixi.txt

[root@Programer myproject]# cat haha.txt 

haha

[root@Programer myproject]# cat xixi.txt 

xixi

[root@Programer myproject]# 


#有冲突分支合并(修改不同分支中相同文件的相同行)

[root@Programer myproject]# git branch -v                   #查看分支

  feature 0f44bf0 done test.txt

  hotfix  108cf46 add haha.txt

* master  b4bea28 Merge branch 'hotfix' 合并hotfix分支

[root@Programer myproject]# git checkout hotfix             #切换到hotfix分支

切换到分支 'hotfix'

[root@Programer myproject]# echo "hahaha" > a.txt           #创建a.txt文件

[root@Programer myproject]# git add .                       #添加到暂存区

[root@Programer myproject]# git commit -m "hotfix"          #生成新版本

[hotfix af8a04b] hotfix

 1 file changed, 1 insertion(+)

 create mode 100644 a.txt

[root@Programer myproject]# git checkout master             #切换到master分支

切换到分支 'master'

[root@Programer myproject]# echo "xixixi" > a.txt           #创建a.txt    

[root@Programer myproject]# git add .                       #添加到暂存区

[root@Programer myproject]# git commit -m "master"          #生成新版本

[master f556200] master

 1 file changed, 1 insertion(+)

 create mode 100644 a.txt

 

解决分支冲突

[root@Programer myproject]# git merge hotfix                #合并hotfix分支到master分支

冲突(add/add):合并冲突于 a.txt

自动合并 a.txt

自动合并失败,修正冲突然后提交修正的结果。                         #文件冲突,合并失败,手工解决

[root@Programer myproject]# cat a.txt 

<<<<<<< HEAD

xixixi

=======

hahaha

>>>>>>> hotfix

[root@Programer myproject]# vim a.txt                       #手工解决冲突

[root@Programer myproject]# cat a.txt 

xixixi

hahaha

[root@Programer myproject]# git add ./                      #添加到暂存区

[root@Programer myproject]# git commit -m "resolv conflict" #生成新版本,解决冲突

[master 2a6f272] resolv conflict

Git标签管理

#使用tag子命令管理标签

[root@Programer ~]# cd myproject/

[root@Programer myproject]# git tag                         #查看已有标签

[root@Programer myproject]# git tag v1                      #创建v1标签

[root@Programer myproject]# git tag                         #查看已有标签

v1

[root@Programer myproject]# git tag v2                      #创建v2标签

[root@Programer myproject]# git tag                         #查看已有标签

v1

v2

[root@Programer myproject]# git tag -d v2                   #删除v2标签

已删除标签 'v2'(曾为 2a6f272)

[root@Programer myproject]# 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值