首页 > 其他分享 >【软件开发学习笔记】Git版本控制

【软件开发学习笔记】Git版本控制

时间:2024-01-14 11:57:09浏览次数:27  
标签:Git 软件开发 版本控制 -- 模块 仓库 git 提交 分支

【软件开发学习笔记】Git版本控制

Git概念

存储方式

Git是分布式存储,每一个clone下来的仓库都可以看成独立的个体,只是Git有提供同步功能,因此Git支持离线使用,因为本质上本地和云端是两个仓库。

仓库构成

提交(commit)

提交是存储文件的最基本元素,记录了每次对文件的修改信息,同时也是仓库文件状态判断的基点。多个提交对文件的修改可能是顺序进行也可能是同步进行,同步的结果往往会导致冲突。

分支(branch)

分支引用了提交并将其串成一条时间线,外界也由此得以查看提交。不同分支引用的时间线可能重叠也可能分离,形成一个树状结构,但最终分支都是要合并的,这也意味着所有提交最终都会形成一条唯一的时间线。

子模块(submodule)

子模块是对其他仓库中的引用,具体而言是引用了分支-提交,对本仓库而言它也是一种受版本控制的文件,文件中存放着引用信息,所以和正常文件一样,修改时要添加到暂存区,删除时也要从仓库区中移除。

子模块所引用的分支版本信息可以从.git/index文件中找到。

标签(tag)

标签实质是给提交起一个别名从而方便识别,这是一个可选功能,通常人们会借此把一些关键的提交打上标签,如记录版本号和发布信息。

远端(remote)

远端是用于同步的其他仓库,以便备份或多人协助,因为是分布式存储,每个仓库都是独立的个体,所以不提供远端也是可以的。

工作区与暂存区

这两个区域是本地工作用仓库独有的内容,在云端的裸仓库中没有这两者的存在。这主要是为了安全和便于工作使用的临时区域,每一次的文件修改都要按顺序提交到每个区域,当仓库指向的提交变更时它们便会被重置。

  • 工作区:用户编写代码的地方,文件资源管理器能直接看到的部分。
  • 暂存区:提交代码前必须先将工作区的所有的文件添加到暂存区。
  • 仓库区:将暂存区的代码修改变成提交,真正的存储到仓库中。

常用命令

通用选项

  • HEAD:表示最新的一次提交。
  • -h:任何命令加该选项,可以快速查看使用方式。
  • --help:任何命令加该选项,可以查看命令的详细手册。

仓库初始化和配置

git init [--bare] #在当前文件夹创建一个空仓库
git clone --recursive <url> #从远端克隆一个仓库到当前目录
git config [--global] <name> <value> #添加或修改[全局]仓库配置
git config [--global] --unset-all <name> #删除[全局]仓库配置
git config [--local] --list #查看[本地]仓库所有配置

仓库信息查看

git branch -a #查看仓库中的所有分支
git log #查看当前分支的所有提交记录
git status #查看存储区状态
git submodule #查看当前分支的子模块
git tag #查看当前仓库所有标签
git diff #查看文件差异

存储区处理

git add <file> #提交工作区文件到暂存区
git rm [--cached] <file>... #删除工作区[暂存区]文件
git restore [--staged] <file> #复原工作区[暂存区]文件
git commit -m '<message>' #提交暂存区文件到仓库区
git reset [--hard] [<commit>] #将存储区中跟踪的文件重置到某次提交的状态
git clean -df #清除工作区中所有未被跟踪的文件

#<file>支持glob通配符,也可用“.”表示全部可处理文件。

分支处理

git checkout --orphan <new-branch> #创建并切换到一个空分支
git branch <new-branch> #创建一个基于当前分支的新分支
git branch -m <new-name> #重命名当前分支
git branch -d <branch> #删除目标分支
git switch <branch> #切换到目标分支

子模块处理

git submodule add <url> <path> #添加一个子模块到目标路径
git submodule init #初始化子模块,将子模块信息填入config中
git submodule update #检出父项目期望版本的子模块内容,使用前需确保子模块已初始化
git submodule deinit <path> #移除子模块,恢复到未初始化的状态(不是删除仓库对子模块的引用)

标签处理

git tag <tagname> [<commit>] #给当前[指定]提交打上标签
git tag -d <tagname> #删除指定标签

远端处理

git remote #查看当前所有的远端仓库
git remote show <name> #查看指定远端仓库的具体信息,包括pull、push的目标设置
git remote add <name> <url> #添加一个远端仓库

仓库同步

git fetch #获取所有远端分支
git rebase <branch> #直接将目标分支覆盖到当前状态
git merge <branch> #尝试将目标分支合并到当前状态
git pull #获取并合并远端分支到当前状态,等同于 fetch + merge
git push [--force] #将当前本地分支状态推送到远端分支

常用操作

添加网络代理

# url例如http://localhost:10809,具体根据不同的代理软件可能有所不同。
git config --add proxy.http <url>
git config --add proxy.https <url>

彻底删除子模块

git submodule deinit <path> #将子模块转为未初始化状态
git rm <path> #在子模块未初始化时调用,能彻底删除子模块引用,且自动修改.gitmodules文件
rm -rf .git/modules/<path> #删除失效的子模块仓库

撤回上次提交版本

git reset HEAD~1 #将仓库区和暂存区撤回到上次提交之前的状态
git push --force #强制覆盖远端分支以丢弃上次提交版本

清除所有历史记录

git checkout --orphan temp #创建并切换到一个新的空分支
git branch -D <branch> #删除旧分支
git branch -m <branch> #空分支继续使用旧分支的名称
git add . #提交当前所有文件到空分支暂存区
git commit -m '-' #提交暂存区文件作为初始提交
git push --force #强制覆盖到远程仓库,分支记录将重新开始

实用工具

参考资料

标签:Git,软件开发,版本控制,--,模块,仓库,git,提交,分支
From: https://www.cnblogs.com/BDFFZI/p/17963500

相关文章

  • 【软件开发学习笔记】设计模式
    【软件开发学习笔记】设计模式设计模式设计模式是一种针对面向对象语言的软件设计方法,是对类设计的约束和指导。设计模式由“原则”和“方法”两部分组成,一个设计良好的项目结构应能完美符合“原则”中的要求,而为了实现完美往往需要按照“方法”的指导去设计。原则:这是必须......
  • GitHub创建新仓库
    第一步、右上角点击【+】,选择【Newrepository】 第二步、设置一下仓库的基本信息在如下图的红框位置,输入仓库的名称、描述以及是否公开。第三步、滑到最下面,点击【Createrepository】,仓库就创建好了 ......
  • 关于 Github 的 2FA
    由于一些我不了解的原因,Github开启了2FA。然后有部分人就无法正常使用Github,比如我就被拦在了2FA外(挺不理解的)。由于没有移动端设备,所以很烦人。所幸找到了一个扩展:Authenticator:2FAClient,在chrome,edge,firefox上都有可用的版本。使用也很简单,点击扩展图标后,点右上角......
  • linux 安装最新版本git
    第一步,官网下载安装包https://git-scm.com/download/linux第二步,解压安装包tar-zxvfgit-2.34.1.tar.gz第三步,安装编译环境yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develgccperl-ExtUtils-MakeMaker装上面编译环境的时候,yum自动帮你......
  • GitHub常用搜索技巧
    普通关键词搜索搜索关键词为javascript的所有项目,可以搜索到数量为2百万的项目,数量庞大,不利于筛选。高级搜索(添加限定词)搜索写法含义in:nameXXX按照项目(仓库)名称搜索in:descriptionXXX按照项目(仓库)描述搜索in:readmeXXX按照README文件搜索languag......
  • Git | tag相关命令
    语法命令gittag-husage:gittag[-a|-s|-u<key-id>][-f][-m<msg>|-F<file>]<tagname>[<head>]or:gittag-d<tagname>...or:gittag-l[-n[<num>]][--contains<commit>][--no-c......
  • github 修改hosts DNS解析
    第一步打开在线dns解析github.comhttp://www.ip33.com/dns.html修改hostswindow下首先找到域名文件,一般在C:\Windows\System32\drivers\etc下,然后打开hosts文件,在里面增加一条域名解析记录,修改成功后刷新DNS解析,一般使用ipconfig/flushdns,在命令台输入便可。刷新成功后可......
  • 认识git使用git-01基础认识以及使用
     首先要下载并且安装git下载地址Git(git-scm.com)安装傻瓜式安装目录一.设置用户信息二.为常用指令配置别名编辑三.获取本地仓库1.要使用Git对我们的代码进行版本控制,首先需要获得本地仓库四.基础操作指令1.一次提交的过程编辑2.实现版本回退3.如果在文件夹中又不想提交的文件一.......
  • 在CentOS上设置和管理静态HTTP网站的版本控制
    在CentOS上设置和管理静态HTTP网站的版本控制是一项重要的任务,它可以帮助您跟踪和回滚对网站所做的更改,确保数据的一致性和完整性。以下是在CentOS上设置和管理静态HTTP网站的版本控制的步骤:1. 安装版本控制系统在CentOS上安装Git或其他版本控制系统,确保已正确配置并可正常使用。2......
  • 配置jenkins利用gitlab webhook提交自动触发打包
    1、jenkins安装gitlab插件2、gitlab对应的项目生成访问令牌3、jenkins配置api_token此处的api_token就是刚才gitlab生成的访问令牌4、jenkins项目上配置webhook点击“高级”展开拉到最底下生成项目token5、gitlab配置webhook进入gitlab项目的设置--webhook输入je......