【2023】Git版本控制-本地仓库详解

2023-08-01 22:04:24

1.Git是什么?它能做什么?


Git是一个分布式版本控制系统,它主要用于跟踪和管理软件项目的源代码。它可以帮助开发人员在不同的团队成员之间协同工作,记录代码的修改历史,轻松地回滚到以前的版本,以及合并不同的代码分支。

Git分为三个区域:

  • 工作区域
  • 暂存区域
  • 版本库

Git的主要作用包括:

  • 版本控制:Git能够记录代码的每一次修改,并提供了强大的版本控制功能,使得开发人员可以轻松地查看和恢复到以前的版本。
  • 分支管理:Git允许开发人员创建多个分支来并行开发不同的功能或修复不同的bug。这样可以避免直接在主分支上进行修改,保证代码的稳定性。
  • 团队协作:Git支持多人协作开发,开发人员可以将自己的代码推送到远程仓库,并将其他人的修改合并到自己的本地仓库中。
  • 历史记录:Git会详细记录每次代码提交的信息,包括作者、时间、修改内容等,方便开发人员回溯查看代码的变更历史。
  • 分布式管理:Git是一种分布式版本控制系统,每个开发人员都可以有自己的本地仓库,可以在没有网络连接的情况下进行代码修改和提交。

2.安装Git

在centos上安装Git

yum -y install git

3.Git版本管理

3.1.Git初始化(创建仓库)

  • 选择要进行初始化的目录
  • 执行初始化命令
  • 查看目录,发现多了一个git目录
[root@jenkins ~]# mkdir /cangku
[root@jenkins ~]# cd /cangku/
[root@jenkins cangku]# git init
Initialized empty Git repository in /cangku/.git/
[root@jenkins cangku]# ls -a
.  ..  .git
  • 查看状态
[root@jenkins cangku]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

当前是在master分支上;当前工作环境是干净的;可以使用git add将文件添加到暂存区。

3.2.提交代码

  • 创建一个文件
[root@jenkins cangku]# echo "hello git" >> file1.txt
[root@jenkins cangku]# ls
file1.txt
  • 将文件提交到暂存区
[root@jenkins cangku]# git add file1.txt
[root@jenkins cangku]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   file1.txt
#

状态内容为:暂存区有一个新文件,如果你想取消提交可以执行那条命令。

  • 将文件从暂存区提交到本地仓库
[root@jenkins cangku]# git commit -m "第一次提交 --v1"

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@jenkins.(none)')

会发生报错,会让你配置邮箱和你是谁:将邮箱和名称替换成你自己的。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

重新提交文件:

[root@jenkins cangku]# git commit -m "第一次提交 --v1"
[master (root-commit) d8c043e] 第一次提交 --v1
 1 file changed, 1 insertion(+)
 create mode 100644 file1.txt
  • 通过git log查看你的提交情况
[root@jenkins cangku]# git log
commit d8c043eda453085620ce8bcc6a3d27ca0d16f34e
Author: Your Name <you@example.com>
Date:   Tue Aug 1 17:37:42 2023 +0800

    第一次提交 --v1

分别记录了代码提交ID,提交人和时间。

3.3.代码回退

  • 重新创建一次提交,定为v2
[root@jenkins cangku]# echo "hello world" >> file1.txt 
[root@jenkins cangku]# git add .
[root@jenkins cangku]# git commit -m "第二次提交 --v2"
[master 7ed5fa3] 第二次提交 --v2
 1 file changed, 1 insertion(+)
[root@jenkins cangku]# git log
commit 7ed5fa310d081176f57661969d4b8b21a718c477
Author: Your Name <you@example.com>
Date:   Tue Aug 1 17:45:28 2023 +0800

    第二次提交 --v2

commit d8c043eda453085620ce8bcc6a3d27ca0d16f34e
Author: Your Name <you@example.com>
Date:   Tue Aug 1 17:37:42 2023 +0800

    第一次提交 --v1

  • 文件内容
[root@jenkins cangku]# cat file1.txt 
hello git
hello world
  • 执行回退操作
[root@jenkins cangku]# git reset --hard d8c043eda
HEAD is now at d8c043e 第一次提交 --v1

回退到哪个版本输入哪个版本的id

  • 查看文件内容
[root@jenkins cangku]# cat file1.txt 
hello git

3.4.代码恢复

回退过去的代码我又想恢复过来怎么办?

  • 查看历史版本记录
[root@jenkins cangku]# git reflog 
d8c043e HEAD@{0}: reset: moving to d8c043eda
2e26871 HEAD@{1}: commit: 第三次提交 -v3
7ed5fa3 HEAD@{2}: commit: 第二次提交 --v2
d8c043e HEAD@{3}: commit (initial): 第一次提交 --v1
  • 恢复到v3版本
[root@jenkins cangku]# git reset --hard 2e26871
HEAD is now at 2e26871 第三次提交 -v3
  • 查看文件
[root@jenkins cangku]# cat file1.txt 
hello git
hello world
hello

已经恢复到v3版本

4.分支


Git分支是一个版本控制机制中的概念,它允许你在同一个代码库中并行开发多个代码线路。

分支通常用于分离出不同的开发线,如稳定版、开发版、实验版等,或者为特定功能创建独立的开发线路。

4.1.创建分支

  • 查看当前分支
[root@jenkins cangku]# git branch 
* master
  • 创建新分支dev
[root@jenkins cangku]# git branch dev
[root@jenkins cangku]# git branch
  dev
* master
  • 切换分支到dev
[root@jenkins cangku]# git checkout dev 
Switched to branch 'dev'
[root@jenkins cangku]# git branch 
* dev
  master

4.2.在分支上提交任务


创建分支时会将之前代码也创建到新分支上

  • 创建一个新文件
[root@jenkins cangku]# vim hehe.py
[root@jenkins cangku]# cat hehe.py 
第一次呵呵呵
  • 提交此文件到版本库
[root@jenkins cangku]# git add .
[root@jenkins cangku]# git commit -m "第一次呵呵呵 -v1"
[dev 750ec9f] 第一次呵呵呵 -v1
 1 file changed, 1 insertion(+)
 create mode 100644 hehe.py
  • 将文件加新内容后第二次提交
[root@jenkins cangku]# echo "第二次呵呵呵" >> hehe.py 
[root@jenkins cangku]# git add .
[root@jenkins cangku]# git commit -m "第二次呵呵呵 -v2"
[dev 3d8cb2a] 第二次呵呵呵 -v2
 1 file changed, 1 insertion(+)
  • 回到主分区会发现看不到dev分支内容
[root@jenkins cangku]# git checkout master 
Switched to branch 'master'
[root@jenkins cangku]# ls
file1.txt

4.3.合并分支

  • 创建一个新分支test
  • 杂谈test分支上为file1.txt文件添加新内容(省略测试部分)
  • 回到master分支
  • test分支内容合并到master分支(需要先切到master分支)
[root@jenkins cangku]# git branch
  dev
* master

[root@jenkins cangku]# git branch test

[root@jenkins cangku]# git checkout test
Switched to branch 'test'
[root@jenkins cangku]# ls
file1.txt

[root@jenkins cangku]# echo "hello hehehe" >> file1.txt 
[root@jenkins cangku]# git add .
[root@jenkins cangku]# git commit -m "这是一次修复 -v1"
[test 2fd525a] 这是一次修复 -v1
 1 file changed, 1 insertion(+)
 
[root@jenkins cangku]# git checkout master 
Switched to branch 'master'
       
[root@jenkins cangku]# git merge test
Updating 2e26871..2fd525a
Fast-forward
 file1.txt | 1 +
 1 file changed, 1 insertion(+)

[root@jenkins cangku]# cat file1.txt 
hello git
hello world
hello
hello hehehe
  • 切换到dev分支
  • master分支合并到dev分支
  • (这里应该是测试,省略,假如测试成功)
  • 回到master分支
  • dev分支内容合并到master分支
[root@jenkins cangku]# git checkout dev 
Switched to branch 'dev'

[root@jenkins cangku]# git merge master 
Merge made by the 'recursive' strategy.
 file1.txt | 1 +
 1 file changed, 1 insertion(+)
 
[root@jenkins cangku]# ls
file1.txt  hehe.py

[root@jenkins cangku]# git checkout master 
Switched to branch 'master'
[root@jenkins cangku]# ls
file1.txt

[root@jenkins cangku]# git merge dev
Updating 2fd525a..0a18968
Fast-forward
 hehe.py | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 hehe.py
 
[root@jenkins cangku]# cat file1.txt 
hello git
hello world
hello
hello hehehe
[root@jenkins cangku]# cat hehe.py 
第一次呵呵呵
第二次呵呵呵

4.4.删除分支


当一个分支使用完不需要了需要删除的时候可以使用以下命令

  • 删除分支
[root@jenkins cangku]# git branch -d test
Deleted branch test (was 2fd525a).
[root@jenkins cangku]# git branch 
  dev
* master
  • 强制删除分支(分支未合并到主分支)
[root@jenkins cangku]# git branch -D test



到此一个简单模拟的项目开发的流程结束!

更多推荐

给docker容器中的mysql做定时数据备份

给docker容器中的mysql做定时数据备份1、写脚本#!/bin/bash#MySQL数据库配置DB_HOST="127.0.0.1"DB_PORT="3306"DB_USER="root"DB_PASSWORD="123456"DB_NAME_AUTHORITY="stu_authority"DB_NAME_WE

企业架构LNMP学习笔记58

开始学习Tomcat:学习目标和内容:1)能够描述Tomcat的使用场景;2)能够简单描述Tomcat的工作原理;3)能够实现部署安装Tomcat;4)能够实现和配置Tomcat的Server服务和自启动;5)能够实现Tomcat的Host的配置;6)能够实现Nginx的反向代理Tomcat;7)能够实现Nginx负载

从原理到代码实践 | pytorch损失函数

文章目录1.损失函数原理1.1ClassificationError(分类错误率)1.2.均方差损失1.3交叉熵损失函数1.3.1数学原理1.3.2代码实现对于图像分类任务,模型最终是通过softmax操作输出一个概率分布向量的(各个类别和为1)假设我们有三类别[小车,小牛,小火箭],假设有两张图片,分别有两个模型来对

java反序列化---URLDNS链

目录一、前言二、原理分析三、代码实现一、前言URLDNS链相较于其他java反序列化链是比较简单的,只需要几步调用就能触发所以学习java反序列化,最好从URLDNS链出发,初步了解如何跟进,以及反射获取类、方法等使用这条链可以传入一个URL,然后触发的结果就是进行一次DNS请求为了方便通信,通常需要把数据序列化,通信

代理IP和Socks5代理:跨界电商与全球爬虫的关键技术

跨界电商在全球化市场中崭露头角,而代理IP和Socks5代理则成为实现全球市场洞察和数据采集的不可或缺的工具。本文将深入探讨这两种代理技术在跨界电商、爬虫技术和出海战略中的关键作用。引言:介绍跨界电商的崛起和全球市场的机遇与挑战。引出代理IP和Socks5代理作为技术解决方案的重要性。代理IP的应用:多地区数据采集:介

如何评估测试用例的优先级?

评估测试用例的优先级,有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题,助于提高测试质量,提高用户满意度。如果没有做好测试用例的优先级评估,往往容易造成对系统关键功能和高风险场景测试的忽略,增加了项目风险,浪费了资源,甚至可能导致系统出现重大问题。因此做好测试用例的优先级评估非常重要,一般主要从以

Socket编程基础(1)

目录预备知识socket通信的本质认识TCP协议和UDP协议网络字节序socket编程流程socket编程时常见的函数服务端绑定整数IP和字符串IP客户端套接字的创建和绑定预备知识理解源IP和目的IP源IP指的是发送数据包的主机的IP地址,目的IP指的是接收数据包的主机的IP地址。在网络通信中,当一台主机需要向另一台主

基于springboot地方废物回收机构管理系统springboot11

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路,向着优秀程序员前行!🍅更多优质项目👇🏻👇🏻可点击下方获取🍅文章底部或评论区获取🍅Java项目精品实

新手学习:ArcGIS 提取SHP 路网数据、节点

新手学习:ArcGIS提取SHP路网数据、节点参考连接OSM路网提取道路节点ArcGIS:如何创建地理数据库、创建要素类数据集、导入要素类、表?1.导入开源路网SHP文件2.在交点处打断路网数据未打断路网数据有一些路径很长,并且和多个路径存在交点,所以需要打断相交线。打开要编辑的shp数据,工具栏中,编辑器-开始编辑,

PHP 如何创建一个 composer 包 并在 项目中使用自己的 composer sdk 包

第一步创建一个composerSDK项目创建一个composer.json文件或使用命令(如果不清楚怎么弄直接跳过即可,一般都会默认配置)composerinit这是生成的composer.json文件将自己要使用的包添加到require中,如果没有require则自己添加(composer文件中必须用双引号不能使用单

加密货币交易所偿付能力的零知识证明

如何检测下一个FTX和Mt.Gox加密货币交易所FTX的内爆导致数十亿客户资金流失,这是加密货币历史上交易所破产的最新例子。历史可以追溯到2014年,当时处理70%比特币交易的历史最悠久、规模最大的交易所Mt.Gox丢失了用户的850,000个比特币。如今,许多用户更喜欢将他们的加密货币资产存储在集中式交易所中,以便于

热文推荐