DevOps-Git

news2024/9/24 21:24:01

DevOps-Git

版本控制软件提供完备的版本管理功能,用于存储,追踪目录(文件夹)和文件的修改历史。版本控制软件的最高目标是支持公司的配置管理活动,最终多个版本的开发和维护活动,即使发布软件。

在这里插入图片描述

在这里插入图片描述

git安装

在这里插入图片描述

https://git-scm.com/

yum install git -y


[root@workstation ~]# git --version
git version 1.8.3.1

查看参数帮助


[root@workstation ~]# git --version
git version 1.8.3.1
[root@workstation ~]#
[root@workstation ~]# git --help
usage: git [--version] [--help] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty Git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and merge with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

'git help -a' and 'git help -g' lists available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

git身份设置

因为git是分布式版本控制系统,不同的人提交的代码需要区分,所以每个人需要设置一个身份标识。

[root@workstation ~]# git config --global user.name "rkun18"
[root@workstation ~]# git config --global user.email "rkun18@outlook.com"
[root@workstation ~]# git config --global color.ui true
[root@workstation ~]# git config --list
user.name=rkun18
user.email=rkun18@outlook.com
color.ui=true

创建本地仓库

  • 工作目录:也可以叫工作区,是存放项目代码文件的一个目录。
  • 仓库:版本库,在git init命令初始化工作目录会会产生一个隐藏的子目录.git,可以理解为git的仓库或版本库
  • 仓库分为本地仓库和远程仓库

i3在这里插入图片描述

在这里插入图片描述

创建本地仓库

  • 创建工作目录

    
    [root@workstation ~]# mkdir git_test
    
    
  • 在对应的工作目录中创建本地仓库

    
    [root@workstation ~]# cd git_test/
    [root@workstation git_test]# git init
    Initialized empty Git repository in /root/git_test/.git/
    #产生一个.git的子目录,所有出代码数据以外的相关数据都在此目录,不要修改它(它叫做仓库/版本库)
    [root@workstation git_test]# ls .git/
    branches  config  description  HEAD  hooks  info  objects  refs
    
    

暂存区

就是一个缓存区域(index/stage),临时保存你的更改。

如果在工作目录创建了一个新文件,需要将新文件添加到暂存区。

添加文件到暂存区

  • 准备一个文件

    [root@workstation git_test]# vi file1.py
    [root@workstation git_test]# cat file1.py
    print("hello git")
    
    
    
  • 提交到暂存区(逆向操作为 git rm --cached file1.py)

    [root@workstation git_test]# git add file1.py
    
    
  • 查看.git子目录,多了一个index

    
    [root@workstation git_test]# ls .git/
    branches  config  description  HEAD  hooks  index  info  objects  refs
    
    
  • 使用 strings 命令查看git add 文件列表

    
    [root@workstation git_test]# strings .git/index
    DIRC
    file1.py
    #这里可以看到file1.py文件添加到index文件里去了
    

git版本控制

提交文件(1版本)

代码文件提交需要commit提交后才能纳入版本控制

  • git status查看工作目录里有那些文件需要提交

    
    [root@workstation git_test]# git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached <file>..." to unstage)
    #
    #       new file:   file1.py
    #
    
    
  • 使用git commit提交 -m后接提交的说明信息

    
    [root@workstation git_test]# git commit -m "提交file1.py"
    [master (root-commit) 9a26ead] 提交file1.py
     1 file changed, 1 insertion(+)
     create mode 100644 file1.py
    
    
  • 再次查看状态,发现没有需要提交的文件

    
    [root@workstation git_test]# git status
    # On branch master
    nothing to commit, working directory clean
    
    

修改再提交(2版本)

  • 修改file1.py文件,这里我加一句

    
    [root@workstation git_test]# cat file1.py
    print("hello git")
    print("hello python")
    
    
  • 查看,通知file1.py被修改

    [root@workstation git_test]# git status
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   file1.py
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    
    
  • 使用git diff查看修改了什么

    [root@workstation git_test]# git diff file1.py
    diff --git a/file1.py b/file1.py
    index 81bc9dd..aeea3d5 100644
    --- a/file1.py
    +++ b/file1.py
    @@ -1 +1,2 @@
     print("hello git")
    +print("hello python")
    
    
  • 修改提交

    
    [root@workstation git_test]# git add file1.py
    [root@workstation git_test]# git commit -m "添加一行代码"
    [master 58a0633] 添加一行代码
     1 file changed, 1 insertion(+)
    
    

再修改提交(3版本)

#再次添加代码

[root@workstation git_test]# vi file1.py
[root@workstation git_test]# cat file1.py
print("hello git")
print("hello python")
print("hello linux")


[root@workstation git_test]# git add file1.py
[root@workstation git_test]# git commit -m "添加一行代码"
[master e059aae] 添加一行代码
 1 file changed, 1 insertion(+)

查看提交历史

  • git log 查看提交历史版本信息

    
    [root@workstation git_test]# git log
    commit e059aaeb9ec15ddf650020b2a21b44abc02de9c6
    Author: rkun18 <rkun18@outlook.com>
    Date:   Wed Jul 19 10:46:47 2023 -0400
    
        添加一行代码
    
    commit 58a0633d037ccc84060317bccc1f831606dec8c0
    Author: rkun18 <rkun18@outlook.com>
    Date:   Wed Jul 19 10:43:18 2023 -0400
    
        添加一行代码
    
    commit 9a26ead76c4c93419c75b6ff18d1e0f4ed4ea15b
    Author: rkun18 <rkun18@outlook.com>
    Date:   Wed Jul 19 10:28:03 2023 -0400
    
        提交file1.py
    
    
  • 使用 git log --pretty=oneline 查看提交的历史版本信息,查看的显示信息更简介(前面字符串可以看作版本号)

    
    [root@workstation git_test]# git log --pretty=oneline
    e059aaeb9ec15ddf650020b2a21b44abc02de9c6 添加一行代码
    58a0633d037ccc84060317bccc1f831606dec8c0 添加一行代码
    9a26ead76c4c93419c75b6ff18d1e0f4ed4ea15b 提交file1.py
    
    

版本回退与还原

  • 使用git reset --hard HEAD^ 回退到上一个版本(也就是2版本)

    [root@workstation git_test]# git reset --hard HEAD^
    HEAD is now at 58a0633 添加一行代码
    [root@workstation git_test]# cat file1.py
    print("hello git")
    print("hello python")
    
    
  • 使用 git reset --hard 第三个版本号 (还原到第三个版本)

    如果忘记第三个版本号是什么,可以使用 git reflog 查看所有操作历史

    
    [root@workstation git_test]# git reflog
    58a0633 HEAD@{0}: reset: moving to HEAD^
    e059aae HEAD@{1}: commit: 添加一行代码
    58a0633 HEAD@{2}: commit: 添加一行代码
    9a26ead HEAD@{3}: commit (initial): 提交file1.py
    
    
  • 还原到第三个版本

    [root@workstation git_test]# git reset --hard e059aae
    HEAD is now at e059aae 添加一行代码
    [root@workstation git_test]# cat file1.py
    print("hello git")
    print("hello python")
    print("hello linux")
    
    
  • 回退上上个版本 git reset --hard HEAD^^ 回退三个版本依次类推 git reset --hard HEAD^^^ 回退100个版本,可以换成 git reset --hard HEAD~100

    [root@workstation git_test]# git reset --hard HEAD~2
    HEAD is now at 9a26ead 提交file1.py
    [root@workstation git_test]# cat file1.py
    print("hello git")
    
    

撤销修改

  • 准备一行或一段写错的代码

    
    [root@workstation git_test]# cat file1.py
    print("hello git")
    print("hello python")
    print("hello linux")
    print("error code")
    
    
  • 撤销策略

    • 删除错误代码
    • git checkout -- 文件名 撤销修改
    • 写乱了代码,添加暂存区但还没commit提交 使用git reset HEAD 文件名 取消暂存区添加,再 git checkout -- 文件名 撤销修改
    • 如果写乱代码,添加暂存区并提交。使用版本回退。

误删恢复

只要git add 到了暂存区,无论有没有 git commit,误删后都可以使用 git checkout --文件名 来恢复

[root@workstation git_test]# touch file2.py
[root@workstation git_test]# git add file2.py
[root@workstation git_test]# rm -rf file2.py
[root@workstation git_test]# ls
file1.py
[root@workstation git_test]# git checkout -- file2.py
[root@workstation git_test]# ls
file1.py  file2.py

如果文件没有 git add 到暂存区 ,误删除了就没了


[root@workstation git_test]# touch file3.py
[root@workstation git_test]# rm -rf file3.py
[root@workstation git_test]# git checkout -- file3.py
error: pathspec 'file3.py' did not match any file(s) known to git.

文件删除

  • 没有 git add 到暂存区的文件直接rm 删除

  • git add 到暂存区的文件,但没有git commit 提交的文件。需要rm 删除本地,还要git rm文件名

    
    [root@workstation git_test]# touch file3.py
    [root@workstation git_test]# git add file3.py
    [root@workstation git_test]# rm -rf file3.py
    [root@workstation git_test]# git rm file3.py
    rm 'file3.py'
    
    
  • git add 到暂存区的文件,并git commit 提交的文件。需要rm 删除本地,还要git rm文件名,最后提交删除

    [root@workstation git_test]# touch file3.py
    [root@workstation git_test]# git add file3.py
    [root@workstation git_test]# git commit -m "提交了file3.py"
    [master c2c88b8] 提交了file3.py
     2 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 file2.py
     create mode 100644 file3.py
    [root@workstation git_test]# rm -rf file3.py
    [root@workstation git_test]# git rm file3.py
    rm 'file3.py'
    [root@workstation git_test]# git commit -m "删除了file3.py"
    [master 8a37dad] 删除了file3.py
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 file3.py
    
    

git分支管理

问题:开发者A开发一个软件的模块,还没有开发完成,害怕进度丢失就提交。开发者B不知道A没有完成,直接使用A开发的文件,这样就造成了问题。

解决:开发者A创建一个属于自己的分支,这个分支只属于A,不会影响其他人。开发完成后,合并到项目主分支即可。

在这里插入图片描述

查看分支

默认只有一个master分支,前面有*号的代表当前分支

[root@workstation git_test]# git branch
* master

创建分支

git branch 分支名来创建分支

[root@workstation git_test]# git branch dev
[root@workstation git_test]# git branch
  dev
* master

切换分支

使用git checkout 分支名 切换


[root@workstation git_test]# git checkout dev
M       file1.py
D       file2.py
Switched to branch 'dev'
[root@workstation git_test]# git branch
* dev
  master

合并分支

在dev分支新开发一个代码,添加并提交

[root@workstation git_test]# git branch
* dev
  master
[root@workstation git_test]# echo "new feature" > file3.py
[root@workstation git_test]# git add file3.py
[root@workstation git_test]# git commit -m "增加新特性"
[dev ec7eff5] 增加新特性
 1 file changed, 1 insertion(+)
 create mode 100644 file3.py

切换master分支上,却发现根本没有这个文件


[root@workstation git_test]# git checkout master
M       file1.py
D       file2.py
Switched to branch 'master'
[root@workstation git_test]# cat file3.py
cat: file3.py: No such file or directory

合并分支,再查看能在master分支上查看到了

[root@workstation git_test]# git merge dev
Updating 8a37dad..ec7eff5
Fast-forward
 file3.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 file3.py
[root@workstation git_test]# cat file3.py
new feature

分支冲突

有些复杂情况会造成冲突,这个时候git就不能帮我们自动合并分支。我们就要手动处理冲突。

  • 在dev分支修改文件

    
    [root@workstation git_test]# git checkout dev
    M       file1.py
    D       file2.py
    Switched to branch 'dev'
    [root@workstation git_test]# echo "冲突测试" >> file3.py
    [root@workstation git_test]# cat file3.py
    new feature
    冲突测试
    
    
  • 提交dev分支上的修改

    [root@workstation git_test]# git add file3.py
    [root@workstation git_test]# git commit -m "冲突测试"
    [dev 1b3ec99] 冲突测试
     1 file changed, 1 insertion(+)
    
    
  • 切回master分支,也修改相同的文件

    
    [root@workstation git_test]# git checkout master
    M       file1.py
    D       file2.py
    Switched to branch 'master'
    [root@workstation git_test]# echo "冲突" >> file3.py
    [root@workstation git_test]# cat file3.py
    new feature
    冲突
    
    
  • 提交master分支上的修改

    [root@workstation git_test]# git add file3.py
    [root@workstation git_test]# git commit -m "冲突测试"
    [master c0e2b26] 冲突测试
     1 file changed, 1 insertion(+)
    
    
  • 合并dev分支到master,就会出现冲突

    [root@workstation git_test]# git merge dev
    Auto-merging file3.py
    CONFLICT (content): Merge conflict in file3.py
    Automatic merge failed; fix conflicts and then commit the result.
    
    
  • 手工解决冲突

    git使用<<<<<<<<<<,==========,>>>>>>>>符号分隔冲突内容,手动删除这些符号,并修改成你想要的内容。

    
    [root@workstation git_test]# cat file3.py
    new feature
    <<<<<<< HEAD
    冲突
    =======
    冲突测试
    >>>>>>> dev
    
    [root@workstation git_test]# vi file3.py
    [root@workstation git_test]# cat file3.py
    new feature
    冲突解决
    
    
  • 解决冲突后添加并提交最后再合并

    
    [root@workstation git_test]# git add file3.py
    [root@workstation git_test]# git commit -m "冲突解决"
    [master 73bcce3] 冲突解决
    [root@workstation git_test]# git merge dev
    Already up-to-date.
    
    

删除分支

使用git branch -d 分支名 来删除分支(不能删除当前分支)

[root@workstation git_test]# git branch
  dev
* master
[root@workstation git_test]# git branch -d dev
Deleted branch dev (was 1b3ec99).
[root@workstation git_test]# git branch
* master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python获取天气数据 并做可视化解读气象魅力

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 前几天的长沙&#xff0c;白天大太阳&#xff0c;晚上下暴雨 一点也琢磨不透天气老人家它的想法 顺便哔哔一点生活小插曲&#xff1a; 前几天的时候&#xff0c;我出门&#xff0c;家里的几扇窗户开着在透气 等我十一点回…

了解Unity编辑器之组件篇Layout(八)

Layout&#xff1a;用于管理和控制UI元素的排列和自动调整一、Aspect Ratio Fitter&#xff1a;用于根据宽高比自动调整UI元素的大小 Aspect Mode&#xff1a;用于定义纵横比适配的行为方式。Aspect Mode属性有以下几种选项&#xff1a; &#xff08;1&#xff09;None&#xf…

开源预训练框架 MMPRETRAIN现有的推理模型(三)

推理器类型&#xff1a; &#xff08;1&#xff09;ImageClassificationInferencer&#xff1a;对给定图像进行图像分类。 &#xff08;2&#xff09;ImageRetrievalInferencer&#xff1a;从给定图像集上的给定图像执行图像到图像检索。 &#xff08;3&#xff09;ImageCapti…

FS32K144用官方Bootloader为底层用RAppIDL BL Tool工具下载升级程序

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 一、工具问题 1、可以在NXP的官网上找到这个软件&#xff0c;也可以加载完成NXP的官方库后找到它&#xff08;自动安装的&#xff09;&#xff0c;也可我…

【接口测试】Postman--变量与集合

目录 变量与集合 一、变量 1、环境变量&#xff08;1&#xff09;创建环境变量&#xff08;2&#xff09;管理环境变量&#xff08;3&#xff09;选择与编辑环境变量2、全局变量&#xff08;1&#xff09;管理全局变量二、集合 1、创建集合2、保存请求到集合3、分享集合三、集…

链表是否有环、环长度、环起点

问题引入 如何检测一个链表是否有环&#xff0c;如果有&#xff0c;那么如何确定环的长度及起点。 引自博客&#xff1a;上述问题是一个经典问题&#xff0c;经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到&#xff0c;当时是第一次遇到那个问题&…

【数据结构】实验一:绪论

实验一 绪论 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对算法时间复杂度的理解&#xff1b; 3&#xff09;结合具体的问题分析算法时间复杂度。 二、实验内容 设计程…

C# PaddleDetection 目标检测 ( yolov3_darknet)

效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleDetection 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Drawing; using System.Windows.Forms; using YamlDotNet;namespa…

vue实现循环数据动态添加标签以及单独控制显示隐藏

效果图&#xff1a; html: <table class"tag-table"><tbody><tr v-for"(item, index) in form.tagList" :key"index"><td>333</td><td><divclass"tag-box"v-for"(item1, index1) in it…

推荐用于学习RN原生模块开发的开源库—react-native-ble-manager

如题RN的原生模块/Native Modules的开发是一项很重要的技能&#xff0c;但RN官网的示例又比较简单&#xff0c;然后最近我接触与使用、还有阅读了react-native-ble-manager的部份源码&#xff0c;发现里边完全包含了一个Native Modules所涉及的知识点/技术点&#xff0c;故特推…

【SAM MaskDecoder 图】SAM(segment anything) 中MaskDecoder过程图示

SAM(segment anything) 中MaskDecoder过程图示 本人根据代码画的&#xff0c;如有出入&#xff0c;欢迎留言反馈更正。

算法之归并排序算法

归并&#xff08;Merge&#xff09;排序法是将两个&#xff08;或两个以上&#xff09;有序表合并成一个新的有序表&#xff0c;即把待排序序列 分为若干个子序列&#xff0c;每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 public class MergeSortTest {public …

简单上手FineBI

简介 安装下载 下载的是V6.0.11版本 设置管理员账号 账号admin 密码123456 新建分析主题 添加数据 选择本地数据上传 选择示例数据上传 打开效果如下&#xff0c;点击“确定”&#xff0c;这样就将示例数据上传到分析主题中 分析数据——编辑数据 如果数据质量好&#xf…

用OpenCV图像处理技巧之白平衡算法(二)

1. 引言 在上一节中我们介绍了白平衡算法的原理&#xff0c;并详细实现了基于白色补丁算法的白平衡实现&#xff0c;本文继续就白平衡的其他算法实现进行展开。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. Gray-world Algorithm 灰色世界算法&#xff08;Gray-wor…

protobuf安装教程

protobuf安装 一&#xff0c;Windows下安装下载protobuf配置环境变量检查是否安装成功 二&#xff0c;Linux下安装下载protobuf安装protobuf检查是否安装成功 一&#xff0c;Windows下安装 下载protobuf 下载地址 本次下载以v21.11为例&#xff0c;根据自己需求下载即可。 配…

VL163的基本信息

VL163是2:4差分通道多路复用/demux开关USB 3.1应用&#xff0c;为交换机信号性能支持高达USB 3.1&#xff0c;并使用QFN-28 3.5x4.5mm绿色封装。 VL163 QFN28 只能处理2Lane数据信号。自己没有CC识别沟通协议&#xff0c;如果要做USB-C Swtich&#xff0c;就要通过别的USB-C协…

Python计算统计分析MSE 、RMSE、MAE、R2

1、平均绝对误差 (MAE)Mean Absolute Error&#xff0c;是绝对误差的平均值&#xff0c;能更好地反映预测值误差的实际情况。范围[0,∞)&#xff0c;当预测值与真实值完全吻合时等于0&#xff0c;即完美模型&#xff1b;误差越大&#xff0c;该值越大。 2、均方误差 MSE(mean…

团簇大小分布计算方法,fix ave/histo命令详解

LAMMPS是一款广泛应用于分子动力学模拟的强大软件。在模拟过程中&#xff0c;我们经常需要对系统的物理性质进行分析和统计。 fix ave/histo命令则是LAMMPS中一个非常有用的命令&#xff0c;它可以帮助我们对系统进行直方图统计分析。 本文将深入介绍fix ave/histo命令的用法和…

CentOS 搭建 GitLab Git

本文目录 1. CentOS7 搭建 Gitlab1. 安装 sshd1. 安装 sshd 依赖2. 启动并设置开机自启3. 安装防火墙4. 开启防火墙5. 开放 ssh 以及 http 服务 2. 安装 postfix1. 安装 postfix2. 启动并设置开机自启3. 几个补充知识 3. 下载并安装 gitlab1. 在线下载安装包2. 安装 4. 修改 gi…

保障大文件传输数据完整性的策略探讨

随着互联网技术的快速发展&#xff0c;越来越多的文件需要进行传输。而在大文件传输中&#xff0c;数据完整性尤为重要&#xff0c;因为数据一旦丢失或损坏&#xff0c;将对文件的可用性和可靠性产生负面影响。因此&#xff0c;保障大文件传输数据完整性成为了互联网技术领域中…