Git版本控制工具使用

news2025/8/2 17:44:01

文章目录

    • 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.coloradmin.cn/o/35035.html

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

相关文章

Unity导入URDF模型(turtlebot3 waffle pi为例)

本篇文章介绍Unity下如何导入机器人的URDF模型&#xff0c;主要参考官方教程&#xff1a;https://github.com/Unity-Technologies/Unity-Robotics-Hub/blob/main/tutorials/urdf_importer/urdf_tutorial.md   关于导入的机器人模型选择了turtlebot3 waffle pi作为示例 1.Uni…

Sa-Token

介绍 类似于Security的认证授权的解决方案&#xff0c;但是使用起来非常方便&#xff0c;1.支持登录认证&#xff0c;授权权限验证&#xff0c;踢人&#xff1b;2.支持自定义Token&#xff0c;并且能够结合Redis完成前后端分离认证方案&#xff1b;3.支持单点登录&#xff08;…

柯桥成人英语培训机构哪家好,新陈代谢到底是什么?

新陈代谢到底是什么? Metabolism is a combination of biochemical processes that your body uses to convert food into energy. These metabolic processes include breathing, eating and digesting food, the delivery of nutrients to your cells through the blood, th…

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

VS code 方式系列文章一、服务器情况简介1.1服务器及用户1.2 cuda1.3 conda环境二、VS code连接使用说明2.1 下载VS code2.2 配置2.3 调试文件附录&#xff1a;VS code调试复杂配置公共数据集系列文章 &#xff08;一&#xff09;服务器初次配置及安装vncserver &#xff08;二…

磨金石教育摄影技能干货分享|古风人像拍摄要注意哪些问题

古风人像与普通人像的拍摄略有不同&#xff0c;有三个要素需要做好准备。服装、妆容、道具。 服装有不少考究&#xff0c;不同的服装有不同的风格&#xff0c;侠士、温婉、清新、可爱等等&#xff0c;今天我们要拍摄的主题风格是侠女。所以选择的是魏晋风汉服。 妆 容 妆容也是…

【无人机】基于PID控制器和A星算法实现无人机路径规划附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

生鲜电商十年:如何撞破盈利难墙?谁在竞速突围?

生鲜电商已十年。 这十年间&#xff0c;无数资本和公司前赴后继&#xff0c;试图探索出一条持续盈利路径&#xff0c;并完成商业模式的持续迭代&#xff0c;然而成功者寥寥。 这么大规模、长时间的摸索&#xff0c;在整个互联网行业都较为少见。一是因为它足够难&#xff0c;…

神经网络和深度学习-反向传播back propagation代码

反向传播back propagation代码 再简单模型中&#xff0c;按照下图的神经网络来完成模型的训练 在复杂的模型当中&#xff0c;输入&#xff0c;权重&#xff0c;隐藏层的数量都是很多的&#xff0c;例如下图中&#xff0c;输入x有5个神经元&#xff0c;第一层隐藏层h中有6个神经…

Rust China Hackathon 2022 达坦科技组空中宣讲会来啦!

Rust China Hackathon 2022 即将来袭&#xff01; 本届Hackathon的主题为「Rust For Fun」&#xff0c;分为「社区组」与「企业组」。 达坦科技作为本届Hackathon的协办方&#xff0c;赞助参与本次企业组赛道&#xff0c;将基于Xline这个开源项目&#xff0c;就Concurrent Inde…

【linux】物理磁盘挂载目录——(分区、格式化、重启自动挂载)

大家好&#xff0c;我是好学的小师弟&#xff01; 现有一全新的物理磁盘需要挂载到某个目录下&#xff0c;操作步骤如下。 目录 一、磁盘分区 二、磁盘格式化 三、磁盘挂载 四、重启自动挂载 注意点: 1.该目录要存在&#xff0c;不存在的话需手动mkdir创建 2.该目录需要为…

IMS各网元的主要功能

文章目录用户注册时&#xff1a; 手机发出一个注册消息到他所在的拜访地的P。 比如&#xff0c;他是山西太原的用户&#xff0c;他这时候到了北京&#xff0c;那么这个时候&#xff0c;他要注册到IMS网络里面的话&#xff0c;这个P-CSCF就是北京的P-CSCF&#xff0c;这个北京的…

[附源码]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…

【零基础入门MyBatis系列】第十一篇——动态SQL

一、概述 &#x1f4d6; 1、什么是动态SQL&#xff1f; 根据不同条件生成不同的SQL语句&#xff0c;是mybatis的一大优势。用于动态拼接SQL语句 &#x1f4d6; 2、如何实现动态SQL&#xff1f; mybatis 为我们提供了一些标签&#xff0c;在写SQL语句的时候&#xff0c;合理…

Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别

Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别 目录Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别1、简介2、使用示例1、QListView2、QTableView3、QListWidget4、QTableWidget1、简介 QListView、QListWidget是列表形式…

Maven安装配置

Maven安装配置 第一步 : 解压 解压 apache-maven-3.6.1.rar 既安装完成 解压缩后的目录结构如下&#xff1a; bin目录 &#xff1a; 存放的是可执行命令。mvn 命令重点关注。conf目录 &#xff1a;存放Maven的配置文件。settings.xml 配置文件后期需要修改。lib目录 &#xf…

基于DPDK(x86平台)应用性能优化实践

产生性能瓶颈有多方面的原因&#xff0c;包括硬件&#xff08;自身能力限制或BIOS设置不当&#xff09;、操作系统&#xff08;某些feature没打开&#xff09;和软件。软件方面的性能瓶颈主要是由于编码不当导致&#xff0c;常见原因有以下几种&#xff1a; 数据结构cache lin…

【多线程】读写锁ReentrantReadWriteLock源码分析

【多线程】读写锁ReentrantReadWriteLock源码分析&#xff08;一&#xff09;读写锁ReentrantReadWriteLock源码分析【1】类图结构和参数【2】写锁的获取和释放&#xff08;1&#xff09;lock方法&#xff08;2&#xff09;lockInterruptibly方法&#xff08;3&#xff09;tryL…

GPS+北斗定位借助Arduino的数值显示

GPS北斗定位借助Arduino的数值显示 一、前言二、硬件要求三、参数基础四、原理剖析五、使用方式六、程序概要七、成果展示八、数据解析九、总结一、前言 较多的导航软件在生活中层出不穷&#xff0c;但是卫星定位同样也适用于轨迹记录、经纬分析、授时系统等&#xff0c;多样的…

【杰理AC696X】外挂FLASH音乐播放及Bin文件制作

外挂FLASH音乐播放及Bin文件制作 测试SDK版本&#xff1a;《ac696n_soundbox_sdk_v1.6.0》 文章目录外挂FLASH音乐播放及Bin文件制作前言一、板级配置1.1 SPI配置1.2 FLASH配置二、FLASH音乐播放测试三、FLASH BIN文件制作1.1 FLASHPCWinHex1.2 U盘分区工具WinHex1.3 FLASHPCF…

嵌入式单片机智能药盒设计(含代码)

目录 前言 设计的内容 &#xff08;1&#xff09;显示 &#xff08;2&#xff09;定时时间与用药量的设定 &#xff08;3&#xff09;实时时间调节 &#xff08;4&#xff09;报警功能 时钟模块 蓝牙模块 系统软件设计 系统主程序 按键函数 中断服务函数 作品展示 测试药…