Git 本地库基本教程

news2024/11/20 6:31:19

目录

一. Git 概述

1.1   何为版本控制 

1.2   为什么需要版本控制 

 1.3   版本控制工具

1.3.1   集中式版本控制工具

1.3.2   分布式版本控制系统

1.4   Git简介

1.5   Git工作机制 

1.6   Git 和代码托管中心

1.6.1   局域网

1.6.2   互联网

二. Git 安装

 三. Git 常用命令

 3.1   设置用户签名 

3.1.1   基本语法

 3.1.2   说明

3.2   初始化本地库

3.2.1   基本语法

3.2.2   案例实操 

3.3   查看本地库状态

3.3.1   基本语法

3.3.2   初次查看:工作区没有任何文件

3.3.3   新增文件 & 再次查看状态(检测到未追踪的文件)

3.4   添加暂存区

 3.4.1   基本语法

3.4.2   查看状态(检测到暂存区有新文件)

3.5   提交本地库

3.5.1   基本语法

3.5.2   查看提交(没有文件需要提交)

3.6   修改文件

3.6.1   基本语法

​编辑

3.7   历史版本(版本穿梭)

3.7.1   查看历史版本

​编辑

3.7.2   版本穿梭

四. Git分支操作 

4.1   什么是分支?

4.2   分支的好处

4.3   分支的操作

4.3.1   查看分支

①基本语法

②实操案例

4.3.2   创建分支

①基本语法

②实操案例

4.3.3   切换分支

①基本语法

②实操案例

4.3.4   修改分支

①基本语法:vim 文件名

②修改

③查看本地库状态(git status)

4.3.5   合并分支

①基本语法

②实操案例

4.3.6   产生冲突

①冲突产生的原因

②制造冲突

③产生冲突

④手动合并

4.3.7   解决冲突

①add(添加到暂存区)

②commit(执行提交)

4.3.8   删除分支

①基本语法

②删除本地分支

​编辑

③删除远程分支

4.4   创建分支和切换分支图解


一. Git 概述

  • Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
  • Git易于学习、占地面积小、性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1.1   何为版本控制 

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

1.2   为什么需要版本控制 

  • 从个人开发过渡到团队协作。

 1.3   版本控制工具

1.3.1   集中式版本控制工具

CVS、SVN(Subversion)、VSS……

  • 集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来这已经成为版本控制系统的标准做法。

优缺点: 

  • 优点:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易。
  • 缺点:中央服务器的单点故障期间,谁都无法提交更新,也就无法协同工作。

1.3.2   分布式版本控制系统

Git、Mercurial、Bazaar、Darcs……

  • 像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
  • 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.4   Git简介

1.5   Git工作机制 

  • 工作区:代码存放的磁盘的目录位置 

1.6   Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。(从本地库推送(push)到远程库)

1.6.1   局域网

        GitLab(基于局域网)

1.6.2   互联网

        Github(基于外网)

        Gitee码云(基于国内网站)

二. Git 安装

1.搜索git官网,会有最新版git下载链接Giticon-default.png?t=N7T8https://git-scm.com/

 2.点击Download for Windows,进入如下界面中点击下载(自动下载与电脑位数匹配的程序)

 3.下载之后双击安装

①GNU霸王条款,无脑同意next就行

②安装路径(最好放在没有中文且没有空格的路径里面)

 

③Git选项配置,推荐默认配置,直接next

 ④后面一直next就行了 

4.如何看是否安装成功

  • 右击桌面选择显示更多选项,有下面的选择则安装成功

 三. Git 常用命令

命令名称作用
git config --global user.name   用户名设置用户签名
git config --global user.email   邮箱设置用户签名
git init初始化本地库

git status

查看本地库状态
git add   文件名添加到暂存区
git commit -m "日志信息"   文件名提交到本地库
git reflog查看历史记录
git reset --hard   版本号版本穿梭

 3.1   设置用户签名 

3.1.1   基本语法

git config --global user.name   用户名

git config --global user.email   邮箱

  1. 打开open git bash here
  2. 按照基本语法设置用户名和邮箱(实际和虚拟的皆行)
  3. 设置好了之后去c盘用户文件夹找到.gitconfig打开,显示你设置的用户名和邮箱即为成功。

 3.1.2   说明

        签名的作用是区分不同的操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。

        注意:这里设置的用户签名和邮箱与将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

3.2   初始化本地库

3.2.1   基本语法

git  init

3.2.2   案例实操 

如图,初始化成功后该文件夹就会出现一个 .git 的文件夹。(如果没有,点击文件夹上方查看打开隐藏项目)

  • Windows系统有D:、C:的盘符存在,所以在文件夹中进入git bush here比较好。
  • git bash here界面里面的命令操作和Linus系统是一样的。

3.3   查看本地库状态

3.3.1   基本语法

git status

3.3.2   初次查看:工作区没有任何文件

  • On branch master  // 当前本地库位于分支master
  • No commits yet  //目前还没有提交过任何东西
  • nothing to commit   //没有东西可以提交

3.3.3   新增文件 & 再次查看状态(检测到未追踪的文件)

  • untracker files   //未被追踪的文件(只存在工作区域,git并未追踪 )
  • 使用git add去追踪文件

3.4   添加暂存区

 3.4.1   基本语法

git add name(这个name是你要添加的文件或者文件夹的名称)

3.4.2   查看状态(检测到暂存区有新文件)

文件从红色字体变成了绿色字体,说明git已经追踪(知道)了这个文件。

使用“git rm --cached 文件名”可以从暂存区删除你要删除的文件。

3.5   提交本地库

3.5.1   基本语法

git commit -m "日志信息" name(文件名)

3.5.2   查看提交(没有文件需要提交)

  • git bash窗口中第三行显示的就是你commit成功的状态,后面 test hello world 就是基本语法中的“日志信息”。

  • git bush窗口第四行提示:1个文件被改变,7行内容被插入。

3.6   修改文件

3.6.1   基本语法

  • vim name(文件名)
  • 也可以直接打开文件进行修改,不需要在 git bash here 窗口通过指令进行修改。

文件已被修改(相当于新文件),需要从工作区再次add到暂存区,并且需要commit。

3.7   历史版本(版本穿梭)

3.7.1   查看历史版本

  • git reflog   查看版本信息
  • git log   查看版本详细信息

3.7.2   版本穿梭

git reset --hard 版本号(上图中黄色的字符串就是版本号,分为详细版本号和精简版本号)

穿越之后,你的指针就指向你的穿越目标所对应的版本,并修改时从指针所指为基础开始修改。

附:cat 文件名——可以查看文件内容

四. Git分支操作 

  • 从右向左看!!!

4.1   什么是分支?

        在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个人物的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也就是指针的运用)

4.2   分支的好处

        同时并行推进多个功能开发,提高开发效率。

        各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.3   分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

4.3.1   查看分支

①基本语法

git branch -v

②实操案例

4.3.2   创建分支

①基本语法

git branch 分支名

②实操案例

(创建一个test分支,图中我的test分支有内容是因为他会把主分支master的内容复制了一份)

!git后面括号内有个蓝色的master,说明当前分支仍处于master分支

4.3.3   切换分支

①基本语法

git checkout 分支名

②实操案例

(括号内蓝色的分支为test)

4.3.4   修改分支

①基本语法:vim 文件名

②修改

细节讲解:Windows下 git commit 后会进入vim界面。 输入小写字母 i ,此时进入编辑模式,可以输入你想输入的内容。 按下 esc 键,此时退出编辑模式,输入英文语法下的冒号 : ,再输入 wq 即可保存退出

  • 可以看到我的代码已经经过了修改
③查看本地库状态(git status)

第一行on branch test说明此时不在主分支master上,然后修改过后并没有add、commit、push等行为,显示红色(具体细节往前翻至3.3、3.4、3.5)

add后

commit后并查看(cat)

4.3.5   合并分支

切换会原主线master发现并没有修改内容,仍然是原内容

①基本语法

git merge 分支名

②实操案例

(文件内容已修改,这里test分支是基于原master分支上进行修改,因此合并十分顺利,没有产生冲突,具体内容看下一小节)

4.3.6   产生冲突

①冲突产生的原因

        合并分支时,两个分支在同一文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码的内容。

②制造冲突

先修改master主线的内容

再修改test支线的代码内容

③产生冲突

(第二行显示冲突;第三行显示自动合并失败)

注意:下一行代码()中提示werging说明正在合并中

④手动合并

vim打开文件后

  • <<<<<<< HEAD 表示当前分支

(这中间是当前分支的修改内容)

  • ======= 分界线(楚河汉界)

(这中间是产生冲突的分支修改内容)

  • >>>>>>> test 表示与主线产生冲突的分支

手动合并很简单啊,只需要把你想要留下的部分留下,不想要的删除,之后再把<<<<=====>>>>这些特殊符号删除即可(这里保持代码行数不变)

这里我删除了三条分界线,第一部分的return和第二部分的printf,然后esc,wq退出即可。

4.3.7   解决冲突

由4.3.6 手动合并之后,我们还需要两步操作(add、commit)

①add(添加到暂存区)

②commit(执行提交)

注意注意!!!

        此时使用git commit命令时不能带文件名!!!

这里我尝试commit时加上了文件名,然后给git报错:不知道commit哪一个分支里面的demo.c

不带文件名之后成功合并,可以看下一行代码()中已经没有merging,而是master

!!!这时候的主线还在master上,所以手动合并的结果在master上显示,并不会在test中有所修改。

4.3.8   删除分支

注意:当你在你要删除的分支上的时候,git是不允许你去删除分支的!

①基本语法
// 删除本地分支
git branch -d localBranchName

// 删除远程分支
git push origin --delete remoteBranchName
②删除本地分支

        如果你还在一个分支上,那么 Git 是不允许你删除这个分支的。所以,请记得退出分支:git checkout master

        通过 git branch -d <branch>删除一个分支,比如:git branch -d fix/authentication

        当一个分支被推送并合并到远程分支后,-d 才会本地删除该分支。如果一个分支还没有被推送或者合并,那么可以使用-D强制删除它。

③删除远程分支
  • 使用这个命令可以远程删除分支:git push <remote> --delete <branch>
  • 比如: git push origin --delete fix/authentication,这个分支就被远程删除了。
  • 你也可以使用这行简短的命令来远程删除分支:git push <remote> :<branch>,比如:git push origin :fix/authentication
  • 如果你得到以下错误消息,可能是因为其他人已经删除了这个分支。
error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'git@repository_name'
  • 使用以下命令同步分支列表:
git fetch -p

-p 的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。

4.4   创建分支和切换分支图解

master 

创建hot-fix(热修)分支【热修是常用分支名称,本人为了偷懒就写了一个test】 

将hot-fix分支合并至master主线 

总结:master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针。

        HEAD如果指向master,那么我们就在master分支上;如果指向hot-fix,我们就在hot-fix分支上。(在.git里面找到HEAD文件可以查看当前指针所指向分支)

        所以啊,所谓的切换分支,其实就是移动HEAD指针指向不同的地方。 (wok!真心累死我了,爆肝完第四章)

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

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

相关文章

SystemC 学习之与 System Verilog 的混合仿真(九)

1、下载 uvmc (uvm connect) https://download.csdn.net/download/yp18792574062/88529417?spm1001.2014.3001.5501 2、配置相关环境变量 export UVM_HOME${VCS_HOME}/etc/uvm export UVMC_HOME/home/yangpan/yangpan/uvmc/uvmc-2.3.1 然后执行 source ~/.zshrc 更新 3、…

让公有云服务“宁安如梦”的“定心丸”在哪里?

电视剧《宁安如梦》正在热播中&#xff0c;该剧讲述了主人公在经历人生的重大风险后&#xff0c;重获新生再活一遍&#xff0c;以确定性的方式抵御和化解原有的重大风险。然而&#xff0c;在现实的生活中&#xff0c;却没有这样的重来机会。 2023年11月13日&#xff0c;Gartne…

二、服务拆分及远程调用

目录 一、注意事项&#xff1a; 1.单一职责: 2.数据独立: 3.面向服务&#xff1a; 二、服务拆分例子&#xff1a; 三、远程调用例子&#xff1a; 微服务调用方式&#xff1a; 四、提供者与消费者 服务调用关系&#xff1a; 一、注意事项&#xff1a; 1.单一职责: 不同…

某建筑网页js逆向分析过程(有坑)

某建筑网页&#xff1a; 网站&#xff1a; import base64 # 解码 website base64.b64decode(aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55.encode(utf-8)) print(website)JSON.parse() ​ 当你有一个包含JSON字符串的变量时&#xff0c;你可以使用JSON.parse()将…

No209.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

19 - 如何用协程来优化多线程业务?

近几年&#xff0c;国内很多互联网公司开始使用或转型 Go 语言&#xff0c;其中一个很重要的原因就是 Go 语言优越的性能表现&#xff0c;而这个优势与 Go 实现的轻量级线程 Goroutines&#xff08;协程 Coroutine&#xff09;不无关系。那么 Go 协程的实现与 Java 线程的实现有…

高效免费办公神器——ONLYOFFICE入手指南

前言&#xff1a; 作为开发者&#xff0c;有时候经常为寻找适合的开发工具而苦恼&#xff1b;或者因为高昂的费用而犹豫不决&#xff1b;亦或喜欢的办公产品只能在单一的平台上使用&#xff0c;与其把时间花在复杂的工具使用上&#xff0c;不如节省出时间投入思考和技术的提升。…

【洛谷算法题】P5711-闰年判断【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5711-闰年判断【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&a…

js写轮播图,逐步完善

目录 1、自动轮播 2、点击更换 3、自动播放加左右箭头点击切换 4、完整版轮播图 1、自动轮播 用定时器setInterval()来写&#xff0c;可以实现自动播放 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><met…

一例plugx样本的分析(AcroRd32cWP)

这是一例plugx的样本&#xff0c;使用了一个合法签名的程序 &#xff0c;使用侧加载的方式加载一个恶意的dll&#xff0c;解密一个dat文件来&#xff0c;在内存中执行一个反射型dll来完成恶意功能。 这个病毒会使用摆渡的方式的来窃取内网的文档数据&#xff0c;具有严重的失泄…

Git新建分支

修改代码之Git策略思考&#xff1a; 有三种办法&#xff1a; 需要在主分支上新建一个分支&#xff0c;不合并新建版本。其实也是先新建一个分支&#xff0c;然后合并到主分支&#xff0c;再删除分支。直接新建远程仓库。 考虑&#xff0c;3&#xff09;最浪费&#xff0c;其…

QGIS之十七按范围选择要素

效果 步骤 1、准备数据 &#xff08;1&#xff09;、范围面 &#xff08;2&#xff09;、point 2、Qgis中裁剪 工具箱中搜索“裁剪” 注意编码问题 3、裁剪结果

Skybox天空盒子的更换教程_unity基础开发教程

Skybox天空盒子的更换 Skybox的下载与导入更换SkyboxSkybox属性自定义 Skybox的下载与导入 打开资源商店 搜索FREE Skybox 这里是我使用的是这一款资源&#xff0c;点击添加至我的资源 打开包管理器Package Manager Packages选择My Assets 搜索Sky 选择刚刚添加的天空盒子 点…

​TechSmith Camtasia 2024破解版功能介绍及使用教程

在现在的网络互联网时代&#xff0c;越来越多的人走上了自媒体的道路。有些自媒体人会自己在网络上录制精彩视频&#xff0c;也有一些人会将精彩、热门的电影剪辑出来再加上自己给它的配音&#xff0c;做成大家喜欢看的电影剪辑片段。相信不管大家是自己平时有独特的爱好也好、…

滚雪球学Java(63):Java高级集合之TreeSet:什么是它,为什么使用它?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

【物联网】BDS/GNSS 全星座定位导航模块——ATGM332D-5N

随着科技的不断进步&#xff0c;导航系统已经成为我们日常生活中不可或缺的一部分。传统的导航系统往往只提供基本的地图和路线规划&#xff0c;对于一些特殊需求或个性化定位并不够满足。全星座定位导航模块的出现&#xff0c;为我们带来了全新的导航体验。通过结合星座学说和…

上海亚商投顾:沪指震荡反弹 鸿蒙、算力概念股集体爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡&#xff0c;创业板指冲高回落&#xff0c;市场热点继续轮动。华为鸿蒙概念股继续活跃&#…

Leetcode刷题详解—— 图像渲染

1. 题目链接&#xff1a;733. 图像渲染 2. 题目描述&#xff1a; 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。…

计算机组成原理——指令系统题库1-20

1、以下有关指令系统的说法中错误的是什么。 A、 指令系统是一台机器硬件能执行的指令全体 B、 任何程序运行前都要先转化为机器语言 C、 指令系统是计算机软件、硬件的界面 D、 指令系统和机器语言是无关的。 2、在CPU执行指令的过程中&#xff0c;指令的地址由什么给出。…

计算机缺失vcruntime140.dll如何修复?超简单的5个解决方法

在我们日常使用电脑的过程中&#xff0c;可能会遇到各种各样的问题和错误提示。其中&#xff0c;一个比较常见的错误提示就是“vcruntime140.dll丢失”。这个错误通常发生在我们尝试运行某个程序或应用时&#xff0c;系统无法找到或加载所需的vcruntime140.dll文件。 vcruntime…