Git版本控制工具使用

news/2024/5/3 18:19:19/文章来源:https://blog.csdn.net/yueguangmuyu/article/details/128005974

文章目录

    • 1. CICD系统构成和流程
      • 1.1 CICD来源及概念
      • 1.2 Git版本控制系统
    • 2. Git操作和使用
      • git config (基本配置操作)
      • git clone <repo URL\> (创建仓库|拷贝已有仓库)
      • git branch (分支相关操作- 创建|查看|删除)
      • git checkout (操作文件和分支)
      • git add/commit (提交和修改-保持本地修改)
      • git reset (提交和修改-撤销本地修改)
      • git rm/mv (提交和修改-删除与重命名)
      • git diff (查看改动-查看改动DIFF)
      • git log/reflog/blame (查看提交日志-查看历史提交记录)
      • git merge/rebase (合并与变基,将两个或以上的开发历史合并在一起)
      • git pull/fectch/push (远端操作,推送到远端或与远端同步)



1. CICD系统构成和流程

1.1 CICD来源及概念

CI/CD的采用改变了开发人员和测试人员如何发布软件。CICD指的是持续集成(Continuously Integration)、持续部署(Continuously Deployment)。可见:

  • 一文理解什么是DevOps,通俗易懂白话文
  • 什么是CICD

以下是相关的CICD系统示例图。对于开发人员而言,应该是对应Dev和CI部分,也即图中的开发组的角色。这里了解一下R&D角色在系统中的位置即可,不做展开,主要针对Git的使用。


1.2 Git版本控制系统

版本控制系统分类:

集中式版本控制(SVN/CVS)
分布式版本控制(Git)

Git仓库的结构:

Git仓库中文件的四种状态:

这里感觉Untracked状态通过add应该是变为Unmodified的。



2. Git操作和使用


git config (基本配置操作)

~/.gitconfig:通过修改该配置文件来对git进行个性化配置,如[user][filter "lfs"][alias]等
git config --global user.email <ur_email@example.com>:设置User的邮箱地址
git config --global user.name <ur_name>:设置User的名字,显示在log上的用户标识
git config --global alias.<alias_name> <opt_name>:将<opt_name>对应的命令简写为<alias_name>
git config -help:查看帮助文档,同man git-config

对于.gitconfig文件的配置见:Git config 配置


git clone <repo URL> (创建仓库|拷贝已有仓库)

git init:创建仓库,具体选项工作中用不到,略过
git clone <repo url>:克隆/拷贝已有仓库到本地,共有四种登录方式:
(1)git clone git@<ip_addr>:<prj_name>/<org>.git <localName>ssh登录方式,无需输入密码,但是需设置过ssh key(ssh-keygen)
(2)git clone http://<ip_addr>/<prj_name>/<org>.git <localName>http登录方式,需要输入账号和密码(以gitlab,gitee等)
(3)git clone -b $branch--single-branch git@<ip_addr>:<prj_name>/<org>.git <localName>只克隆某个分支的代码
(4)git clone -b $branch--single-branch --depth 1 git@<ip_addr>:<prj_name>/<org>.git <localName>只克隆某个分支的最新代码

git branch (分支相关操作- 创建|查看|删除)

git branch:列出本地已经存在的分支,当前分支使用"*"标记
git branch -r:查看远程版本库分支列表
git branch -a:查看本地和远程版本库所有分支列表
git branch <myBranch>:创建名为myBranch的分支
git branch <myBranch> <masterBranch>:基于<masterBranch>的最新版本创建本地的<myBranch>
git branch -d <myBranch>:删除名为myBranch的分支,如果分支中有未merge的提交(未push的commit),则删除失败
git branch -D <myBranch>:强制删除名为myBranch的分支
git branch -vv:查看HEAD所指本地分支对应的远程分支
git branch -m <oldName> <newName>:修改分支名称
git branch --contains <SHA/Commit id>:查看<SHA>所对应Revision所属分支

git checkout (操作文件和分支)

git checkout <myBranch>:将当前分支切换到<myBranch>分支,即HEAD指向<myBranch>
git checkout <fileName>:放弃对<fileName>文件的修改
git checkout .:放弃当前目录下的修改
git checkout -b <myBranch> <masterBranch>:在本地创建新分支,并切换到新创建的分支上

以上最后一条命令等价于下面命令组合:

git branch <myBranch> <masterBranch>
git checkout <myBranch>

git add/commit (提交和修改-保持本地修改)

git add <fileName> (<fileName>...):需要提交的代码从工作区添加到暂存区
git commit -m <"remark"> <fileName> (<fileName>...):将暂存区改动提交到本地库中
git status -uno:查看本地修改的文件(只检查在git中的文件,untracked no?)
git commit -m "message"/git commit :将修改的文件提交到本地仓库中(后者在vim打开的第一行中编辑message信息)
git add <fileName> -> git commit --amend:追加提交,需要注意好像是将所有modified追加?(不增加新的commit id情况下把新修改代码追加到前一次commit中去)

每次commit都会生成一个40位哈希码的唯一ID。


git reset (提交和修改-撤销本地修改)

git reset HEAD <fileName>:撤销添加到暂存区的文件(只add,没commit)
git reset --soft HEAD~1/$commit id:撤销已经添加到本地版本库的提交(已经commit)(只撤销commit,不撤销add,保留编辑器改动)
git reset --mixed HEAD~1:全部撤回HEAD所指分支最近一次的commit及其add(撤销commit,撤销add,保留编辑器改动)
git reset --hard HEAD~1:暴力撤回HEAD所指分支最近一次的commit及其相关工作(肥肠暴力,将commit、add、working directory全部撤销,慎重使用)

git rm/mv (提交和修改-删除与重命名)

git rm <fileName>:将文件从暂存区和工作区中给删除
git rm --f <fileName>:如果删除之前对文件修改过且add,则必须加上--f来删除
git rm --cached <fileName>:将文件从add中/暂存区移除,但是物理文件保留在工作目录(等同于git reset)
git mv (--f) <fileName1> <fileName2>:移动或重命名一个文件、目录或软连接

git diff (查看改动-查看改动DIFF)

git diff <fileName>:比较本地已经修改,但尚未缓存的改动(没有git add)
git diff --cached <fileName>:查看已经在缓存中的改动(已经git add,但没有commit)
git diff HEAD <fileName>:查看已缓存和未缓存的所有改动(上面两种情况)
git diff <commit_id1> <commit_id2>:查看两次commit的DIFF
git diff --stat:显示摘要而非整个diff
git difftool <commit_id>:使用缺省的difftool
git difftool -t tkdiff <commit_id1> <commit_id2>:使用指定的difftool,查看两commit_id之间的差异

git log/reflog/blame (查看提交日志-查看历史提交记录)

git log -n <num>:指定输出的log数目
git log --pretty='%h:%cd:%an:%s' --date=format:'%Y%m%d:%H%M%S' -n 10:指定log的形式(commit_id:date:time:message)
git reflog -n <num>:查看所有分支的所有操作记录(包括已经被删除的commit记录和reset操作)
git reflog show <myBranch>:查看当前分支的源分支
git blame <fileName>:查看指定文件的修改记录,显示文件最后修改的版本和作者
git blame -L <start>,<end> <fileName>:查看指定文件,显示文件每行最后修改的版本和作者

git merge/rebase (合并与变基,将两个或以上的开发历史合并在一起)

git merge <feature> <master>:将feature分支的内容merge到master分支
git merge --continue:解决冲突后继续merge
git merge --abort:放弃当前的merge
git checkout <feature> -> git rebase master:将master的内容rebase到feature分支
git merge
git rebase

运行git merge时,HEAD分支会生成一个新的提交,并保留每个提交历史的祖先

命令
git merge
git rebase
优点(1)用法简单,易于理解;
(2)保持源分支的原始上下文;
(3)源分支的提交和其它分支的提交是分开的;
(4)可以保留提交历史;
(1)代码历史是简化的、线性的、可读的;
(2)与许多独立的特性分支的提交历史相比,操作单个提交历史更容易;
(3)干净、清晰的提交信息可以更好地跟踪一个bug或何时加入的feature,
     可以避免众多的单行提交污染历史;
缺点会更改历史提交时间,可能会丢失上下文
用法将feature分支合并到主分支使用merge将源分支的更新同步到feature分支用rebase
禁止在公共分支上使用rebase!!!

git pull/fectch/push (远端操作,推送到远端或与远端同步)

git pull <hostName> <branchName>:<myBranch> (e.g. git pull origin master:brantest):将远程主机origin的master分支拉取过来,并与本地的brantest分支合并
git pull = git fetch + git merge,进而有上述命令等同于:git fetch origin master:brantest -> git merge brantest
git checkout master -> git pull:将远端仓库的最新代码拉取到本地(常用)
git push <hostName> <branchName>:将本地的branchName分支推送到hostName远端仓库的branchName分支

git fetch不会进行合并执行后需要手动执行git merge合并分支,而git pull拉取远程分之后直接与本地分支进行合并。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。

git push
文件穿梭命令示意

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

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

相关文章

估值破千亿,被资本疯抢的广汽埃安会是广汽的未来吗?

最近&#xff0c;广汽埃安在新能源市场上捷报频传&#xff0c;先是宣布完成了182.94亿元的A轮融资&#xff0c;成近年国内新能源整车最大的单笔私募融资。品牌估值更是达到了震撼人心的1032.39亿&#xff0c;基本等于广汽集团AH总市值&#xff0c;也远超港股小鹏、零跑汽车的市…

【C++】Cmake使用教程(看这一篇就够了)

文章目录引言一 环境搭建二 简单入门2.1 项目结构2.2 示例源码2.3 运行查看三 编译多个源文件3.1 在同一个目录下有多个源文件3.1.1 简单版本3.1.1.1 项目结构3.1.1.2 示例代码3.1.1.3 运行查看3.1.2 进阶版本3.1.2.1 项目结构3.1.2.2 示例源码3.1.2.3 运行查看3.2 在不同目录下…

[附源码]java毕业设计游戏战队考核系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue拖拽删除实现

拖拽删除 背景 自营上传图片&#xff0c;但是需要排序和删除功能&#xff0c;所以用到了h5的拖拽 源元素&#xff1a; 即被拖拽的元素。 目标元素&#xff1a; 即合法的可释放元素。 每个事件的事件主体都是两者之一。 拖拽事件 触发顺序及次数 被拖拽元素&#xff0c;事…

数据结构学习笔记(Ⅳ):串

目录 1 串 1.1 定义与基本操作 1.定义 2.基本操作 1.2 串的存储结构 1.顺序存储 2.链式存储 3.基于顺序存储实现基本操作 2 串的朴素模式匹配算法 2.1 朴素模式匹配算法 2.2 KMP算法 1.优化思路 2.计算next数组 2.3 KMP算法优化 1 串 1.1 定义与基本操作 1.定义…

机器学习笔记之高斯网络(二)高斯贝叶斯网络

机器学习笔记之高斯网络——高斯贝叶斯网络引言回顾高斯网络贝叶斯网络&#xff1a;因子分解高斯贝叶斯网络&#xff1a;因子分解引言 上一节介绍了高斯网络及其条件独立性&#xff0c;本节将介绍高斯贝叶斯网络。 回顾 高斯网络 高斯网络最核心的特点是&#xff1a;随机变…

【软件测试】作为测试人,因工作与开发吵了一架碰撞,该咋办......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试与开发在工作中…

Redis数据库redisDb源码分析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、组织方式 Redis服务器将所有的数据库 都保存在src/server.h/redisServer结构中的db数组中。db数组的每个entry都是src/server.h/redisDb结构&#xff0c;每个redisDb结构代表一个数据库。Redis默认有16个数据库。 1.1…

Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、拖动条和滑动条 拖动条SeekBar继承自进度条ProgressBar&#xff0c;它与进度条的不同之处在于&#xff0c;进度条只能在代码中修改进度值&#xff0c;不能由用户改变进度值&#xff0c;拖动条不仅可以在代码中修改进度值&#xf…

Greenplum数据库故障排查及修复

场景一&#xff1a;gp服务正常&#xff0c;存在部分segment实例丢失 1、异常现象 主节点切换gpadmin用户输入gpstate查看状态 如果红色框内有指向左边的箭头则说明存在部分segment实例丢失。 2、排查思路 首先查看主节点日志&#xff0c;重点关注发生segment丢失那段时间的…

Kafka开发环境搭建

kafka开发环境搭建一、安装Java环境1.1、下载Linux下的安装包1.2、解压缩安装包1.3、解压后的文件移到/usr/lib目录下1.4、配置java环境变量二、 Kafka的安装部署2.1、下载安装Kafka2.2、配置和启动zookeeper2.3、启动和停止Kafka后言一、安装Java环境 1.1、下载Linux下的安装…

【web前端开发】HTML知识点超详细总结

文章目录什么是网页常用的浏览器及内核VScode和WebStrom使用HTML常用标签文档类型<!DOCTYPE>网页语言lang字符集title标签标题标签段落和换行标签文本格式化标签div和span标签图像标签路径相对路径同一级路径上一级路径:下一级路径绝对路径链接标签超链接标签外部链接:内…

(DS90UB3702TRURRQ1) LT8640SHV-2低噪声降压稳压器QFN

LT8640/LT8640-1降压稳压器采用Silent Switcher架构&#xff0c;设计用于最大限度地降低EMI/EMC辐射并在高达3MHz的频率下提供高效率。由于具有2.5μA的超低静态电流&#xff08;当输出处于全面调节状态时&#xff09;&#xff0c;因此适用于要求在非常小负载电流条件下获得极高…

【Linux】(五)GateWay远程开发方式-实验室服务器使用GateWay远程开发

Jetbrains GateWay 方式系列文章一、服务器情况简介1.1服务器及用户1.2 cuda1.3 conda环境二、Jetbrains GateWay方式连接2.1 下载2.2 配置2.3 连接管理及附加说明2.3.1 关闭或退出2.3.2 重连附录公共数据集系列文章 &#xff08;一&#xff09;服务器初次配置及安装vncserver…

【CVPR 2022】QueryDet:加速高分辨率小目标检测

大连不负众望&#xff0c;疫情了&#xff0c;我们又封校了&#xff0c;可能初步封个5678天&#xff0c;微笑jpg 论文地址&#xff1a;https://arxiv.org/pdf/2103.09136.pdf 项目地址&#xff1a;https://github.com/ ChenhongyiYang/QueryDet-PyTorch 1. 简介 背景&#xf…

基于Netty的高性能RPC框架(分布式缓存、雪花算法、幂等性)

文章目录前言介绍1. 服务提供2. 安全策略3. 设计模式亮点1. 信息摘要算法的应用2. 心跳机制3. SPI 机制4. IO 异步非阻塞5. RNF 协议快速开始1.依赖1.1 直接引入1.2 maven引入2. 启动 Nacos3. 提供接口4. 启动服务5. 启动客户端5. 额外配置5.1 配置文件5.2 日志配置6. 场景应用…

电脑录屏快捷键是什么?win10自带屏幕录制在哪

​在使用电脑的过程中&#xff0c;我们难免会遇到使用电脑录屏功能。有时候可能是想录制网课&#xff0c;有时候可能是想录制游戏的精彩操作&#xff0c;有时候可能只是想录制会议内容。 电脑录屏能够将重要的画面内容进行录制&#xff0c;十分的方便。但也有很多的小伙伴不清…

傻白入门芯片设计,IP, MCM, SiP, SoC 和 Chiplet的区别(二)

一、IP&#xff1a; 早期的复制电路都是全定制&#xff0c;比如Intel的4004cpu&#xff0c;这种设计非常耗时。考虑到cpu的很多模块有相似的地方&#xff0c;能不能把这些东西模块化&#xff1f;于是就有了IP核的概念&#xff0c;Intelligent Property&#xff0c;即知识产权核…

EPICS -- asynRecord记录使用示例

这个示例演示了如何使用asynRecord记录 1、硬件准备工作 在这里准备了一个型号为NPort 5650-8-DT的Moxa串口服务器&#xff0c;用于一根交叉DB9双母头线缆连接设备上端口2和端口3&#xff0c;使之可以相互通信。 串口服务器配置如下&#xff1a; IP地址&#xff1a;192.168…

【Spring(五)】引入篇:一文带你弄懂AOP的底层原理(动态代理)

有关Spring的所有文章都收录于我的专栏&#xff1a;&#x1f449;Spring&#x1f448; 目录 一、前言 二、使用AOP需要的依赖 三、引入 四、AOP的底层原理之动态代理 五、总结 相关文章 【Spring&#xff08;一&#xff09;】如何获取对象&#xff08;Bean&#xff09;【Sprin…