DevOps-Git

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 indexbisect     Find by binary search the change that introduced a bugbranch     List, create, or delete branchescheckout   Checkout a branch or paths to the working treeclone      Clone a repository into a new directorycommit     Record changes to the repositorydiff       Show changes between commits, commit and working tree, etcfetch      Download objects and refs from another repositorygrep       Print lines matching a patterninit       Create an empty Git repository or reinitialize an existing onelog        Show commit logsmerge      Join two or more development histories togethermv         Move or rename a file, a directory, or a symlinkpull       Fetch from and merge with another repository or a local branchpush       Update remote refs along with associated objectsrebase     Forward-port local commits to the updated upstream headreset      Reset current HEAD to the specified staterm         Remove files from the working tree and from the indexshow       Show various types of objectsstatus     Show the working tree statustag        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.py1 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.py2 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 file2.pycreate 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.py1 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 branchdev
* 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
* devmaster

合并分支

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

[root@workstation git_test]# git branch
* devmaster
[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-forwardfile3.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 branchdev
* master
[root@workstation git_test]# git branch -d dev
Deleted branch dev (was 1b3ec99).
[root@workstation git_test]# git branch
* master

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

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

相关文章

K8S初级入门系列之十二-计算资源管理

一、前言 K8S集群中着这各类资源&#xff0c;比如计算资源&#xff0c;API资源等&#xff0c;其中最重要的是计算资源&#xff0c;包括CPU&#xff0c;缓存&#xff0c;存储等。管理这些资源就是要在资源创建时进行约束和限制&#xff0c;在运行时监控这些资源的指标&#xff0…

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…

idea中创建请求基本操作

文章目录 说明效果创建GET请求没有参数带有参数带有环境变量带有动态参数 说明 首先通过###三个井号键来分开每个请求体&#xff0c;然后请求url和header参数是紧紧挨着的&#xff0c;请求参数不管是POST的body传参还是GET的parameter传参&#xff0c;都是要换行的&#xff0c;…

OSI模型简介及socket,tcp,http三者之间的区别和原理

1.OSI模型简介&#xff08;七层网络模型&#xff09; OSI 模型(Open System Interconnection model)&#xff1a;一个由国际标准化组织提出的概念模型&#xff0c;试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。 它将计算机网络体系结构划分为七层,每…

苹果safari浏览器播放不了video标签视频

今天遇到了个神奇的问题&#xff0c;视频文件在pc端和安卓手机上播放都没问题&#xff0c;但是在ios上就是播放不了&#xff0c;大概代码如下&#xff1a; 前端代码&#xff1a; <video id"video" width"350" height"500" controls><s…

EMP-SSL: TOWARDS SELF-SUPERVISED LEARNING IN ONETRAINING EPOCH

Recently, self-supervised learning (SSL) has achieved tremendous success in learning image representation. Despite the empirical success, most self-supervised learning methods are rather “inefficient” learners, typically taking hundreds of training epoch…

TCP状态转换图

TCP状态转换图 了解TCP状态转换图可以帮助开发人员查找问题. 说明: 上图中粗线表示主动方, 虚线表示被动方, 细线部分表示一些特殊情况, 了解即可, 不必深入研究. 对于建立连接的过程客户端属于主动方, 服务端属于被动接受方(图的上半部分) 而对于关闭(图的下半部分), 服务端…

政策加持智能家居市场,涂鸦赋能客户打造“以人为本”智能生活新方式

7月18日&#xff0c;商务部等13部门联合发布了《关于促进家居消费若干措施的通知》&#xff08;以下简称《通知》&#xff09;&#xff0c;《通知》指出&#xff0c;创新培育智能消费&#xff0c;支持企业运用物联网、云计算、人工智能等技术&#xff0c;着重加快智能家电、智能…

无涯教程-jQuery - jQuery.get( url, data, callback, type )方法函数

jQuery.get(url&#xff0c;[data]&#xff0c;[callback]&#xff0c;[type])方法使用GET HTTP请求从服务器加载数据。 该方法返回XMLHttpRequest对象。 jQuery.get( url, [data], [callback], [type] ) - 语法 $.get( url, [data], [callback], [type] ) 这是此方法使用的…

【数据结构】实验二:顺序表

实验二 顺序表 一、实验目的与要求 1&#xff09;熟悉顺序表的类型定义&#xff1b; 2&#xff09;熟悉顺序表的基本操作&#xff1b; 3&#xff09;灵活应用顺序表解决具体应用问题。 二、实验内容 1&#xff09;在一个整数序列a1,a2,…,an中&#xff0c;若存在一个数&…

【Linux网络】 网络套接字(三)socket编程_TCP网络程序

目录 TCP网络程序服务端创建套接字并绑定服务端监听服务端获取连接服务器处理请求 客户端客户端创建套接字客户端连接服务器客户端发起请求测试 服务器存在的问题多进程版的TCP网络程序多线程版的TCP网络程序线程池版的TCP网络程序 TCP网络程序总结图 TCP网络程序 服务端 创建…

Dubbo

Dubbo 简介Dubbo的快速入门Dubbo的基本架构安装DubboAdmin入门案例Dubbo的最佳实践 Dubbo的高级特性启动检查多版本超时与重试负载均衡SpringCloud整合Dubbo案例 简介 Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。 致力于提高性能和透明化的RPC远程服务调用方…

Jenkins+Docker+Docker-Compose自动部署,SpringCloud架构公共包一个任务配置

前言 Jenkins和docker的安装&#xff0c;随便百度吧&#xff0c;实际场景中我们很多微服务的架构&#xff0c;都是有公共包&#xff0c;肯定是希望一个任务能够把公共包的配置加进去&#xff0c;一并构建&#xff0c;ok&#xff0c;直接上干货。 Jenkins 全局环境安装 pwd e…

DSA之图(4):图的应用

文章目录 0 图的应用1 生成树1.1 无向图的生成树1.2 最小生成树1.2.1 构造最小生成树1.2.2 Prim算法构造最小生成树1.2.3 Kruskal算法构造最小生成树1.2.4 两种算法的比较 1.3 最短路径1.3.1 两点间最短路径1.3.2 某源点到其他各点最短路径1.3.3 Dijkstra1.3.4 Floyd 1.4 拓扑排…

机器学习:Bert and its family

Bert 先用无监督的语料去训练通用模型&#xff0c;然后再针对小任务进行专项训练学习。 ELMoBertERNIEGroverBert&PALS Outline Pre-train Model 首先介绍预训练模型&#xff0c;预训练模型的作用是将一些token表示成一个vector 比如&#xff1a; Word2vecGlove 但是对于…

微服务契约测试框架-Pact

契约测试 契约测试的思想就是将原本的 Consumer 与 Provider 间同步的集成测试&#xff0c;通过契约进行解耦&#xff0c;变成 Consumer 与 Provider 端两个各自独立的、异步的单元测试。 契约测试的优点&#xff1a; 契约测试与单元测试以及其它测试之间没有重复&#xff0c…

Google Earth Engine谷歌地球引擎提取多波段长期反射率数据后绘制折线图并导出为Excel

本文介绍在谷歌地球引擎GEE中&#xff0c;提取多年遥感影像多个不同波段的反射率数据&#xff0c;在GEE内绘制各波段的长时间序列走势曲线图&#xff0c;并将各波段的反射率数据与其对应的成像日期一起导出为.csv文件的方法。 本文是谷歌地球引擎&#xff08;Google Earth Engi…

图为科技T501赋能工业机器人 革新传统工业流程

工业机器人已成为一个国家制造技术与科技水平的重要衡量标准&#xff0c;在2019年&#xff0c;中国工业机器人的组装量与产量均位居了全球首位。 当前&#xff0c;工业机器人被广泛用于电子、物流、化工等多个领域之中&#xff0c;是一种通过电子科技和机械关节制作出来的智能机…

浏览器端代理proxy 解决跨域

一.环境:使用expresshttp-proxy-middleware 直接上代码 // include dependencies const express require( express);//node内置的path模块导入 const path require("path")const { createProxyMiddleware } require( http-proxy-middleware); // 需要代理后端服…

行为型设计模式之策略模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…