30分钟了解并学会git的使用(绝对干货)

news2025/2/13 12:55:13

概述:

        在programmer行业有一句流传许久的话:不会用git的程序员,不是真的程序员!!

足以看出来git在业界的认可度有多高,所以我们混这行的都应该学会这个由Linux之父林纳斯开发

的第二大发明,下面我用30分钟时间来带你了解它的前世今生,并熟练掌握它的用法。

Git的前世今生(产生背景):

                                                         Linux之父--林纳斯

        1991年,Linux之父林纳斯(Linus)开发出了初版Linux系统并把Linux系统代码开源,之后Linux发展非常的迅速,全球很多热心的程序员都纷纷为Linux系统添砖加瓦,这么多人给Linux系统贡献代码,这些代码如何管理的呢?

        事实上,在2002年之前,这些热心的程序员都是通过diff的方式把源代码文件发送给Linus,最后Linus手动将代码合并起来。这样看来,非常的复杂。那么为什么不把代码放在当时的cvs和svn这些集中式的版本管理系统呢?因为Linus坚决反对这种速度慢,而且还需要联网的版本管理系统。

        不过,在2002年之后,代码实在太多了。Linus也撑不下去了,无奈之下找了一个商业的版本控制系统BitKeeper,BitKeeper的老板一看是Linux之父在使用他们的产品,颇有魄力的直接授权Linus及为Linux贡献代码的热心开发者免费使用他们的系统。

        但是好景不长,在2005年,Linux社区里的一位大牛,开发Samba的Andrew试图去破解BitKeeper的协议,其实不止他一个人这么干过,结果就是被BitKeeper公司发现了,结果可想而知。在此期间,Linus其实是可以挽回的,但是可能由于Linus江湖气息很重,一直没有道歉。

        紧接着,更加出人意料的事情就来了,Linus只是花了两周的时间就用C语言写了一个分布式版本控制系统,它就是Git。一个月之内,Linux的代码就交给了Git来管理!

        截至现在的2023年,Git已经成为了全球范围内影响力和使用率最高的版本管理工具了!

Git介绍:

        Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

版本控制:

        版本控制(Revision control)是一种在开发的过程中用于管理我们对文件,目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单说就是用于管理多人协同开发项目的技术。    

Git(分布式版本控制,没有中央服务器,可以离线提交)

SVN(集中式版本控制,有中央服务器,不可以离线提交)

Git的下载与安装:

 下载地址:Git

下一步下一步,傻瓜式安装即可

安装完成后在桌面右击会有Git项:

Git Bash:Unix与Linux风格命令行,使用最多,推荐最多

Git CMD: Windows风格命令(这个在安装后的开始菜单Git文件夹下)

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

Git配置

配置用户名和邮箱:

当安装Git后首先要做的是设置用户名和邮箱地址这是非常重要的,因为每次Git提交都会使用该信息,它被永远的嵌入到你的提交中:

配置用户名git config --global user.name "your_username"

配置邮箱git config --global user.email "your_username@163.com"

(1)只需要做一次这样的设置,因为传递了--global选项,Git将总是使用该信息来处理你系统中所做的一切操作。但如果你希望在不同的项目中使用不同的用户名和邮箱地址,你可以在该项目中运行上面命令时不加 --global选项。总之--global为全局配置,不加为某个特定项目的配置。

(2)环境变量可以配置也可以不配置,配置环境变量是为了在电脑的任何地方都能使用,如通过cmd进行Git操作,当然软件在我们安装的时候它自己已经帮我们配置了。

列出所有配置项:git config -l

 编辑配置项:git config -e(需要在具体项目里操作)

 编辑用户(全局)配置:git config -e --global

配置项分类:

1、仓库级别 local 【优先级最高】

2、用户级别 global【优先级次之】

3、系统级别 system【优先级最低】

删除配置项:git config [--local|--global|--system] --unset user.email 

Git工作区域:

Git本地有三个工作区域:工作目录(Working Directory),暂存区(Stage/Index),本地资源库(Repository或Git Directory)。如果再加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

Workspace:工作区,就是平时存放项目代码的地方

Index/Stage:暂存区,用于临时存放你的改动,事实上它是一个文件,保存即将提交的列表信息

local Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本

Remote Repository:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

备注:以上四个工作区其实跟我们挂钩的只有工作区和远程仓库,暂存区和仓库区我们只需要通过命令操作即可。

Git的工作流程:

1.在工作区中添加,修改文件

2.将需要进行的版本管理的文件放入暂存区域

3.将暂存区域文件提交到本地仓库

4.将本地仓库的代码推送到远程仓库

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你的项目目录,也可以是空目录,建议不要有中文。

Git常用命令:

一:新建代码

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

(1)在当前目录新建一个Git代码库:git init

(2)在当前目录下新建一个目录,并将其初始化为Git代码库:git init [project-name]

(3)克隆远程仓库:git clone [url]

二:增加/删除文件到暂存区

(1)添加指定文件到暂存区:git add [file1] [file2] ...

(2)添加指定目录到暂存区,包括子目录:git add [dir]

(3)加当前目录的所有文件到暂存区:git add .

(4)删除工作区文件,并且将这次删除放入暂存区:git rm [file1] [file2] ...

(5)停止追踪指定文件,但该文件会保留在工作区:git rm --cached [file]

(6)改名文件,并且将这个改名放入暂存区:git mv [file-original] [file-renamed]

三:代码提交

(1)提交暂存区到本地仓库:git commit -m [message]

(2)提交暂存区的指定文件到本地仓库区:git commit [file1] [file2] ... -m [message]

(3)提交工作区自上次commit之后的变化,直接到仓库:git commit -a

(4)提交时显示所有diff信息:git commit -v

(5)使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息:git commit --amend -m [message]

(6)重做上一次commit,并包括指定文件的新变化:git commit --amend   ...

四:分支与分支合并

(1)列出所有本地分支:git branch

(2)列出所有远程分支:git branch -r

(3)列出所有本地分支和远程分支:git branch -a

(4)新建一个分支,但依然停留在当前分支:git branch [branch-name]

(5)切换分支并更新工作区:git checkout [branch-name]

(6)新建一个分支,与指定的远程分支建立追踪关系:

git branch --track [branch] [remote-branch]

(7)建立追踪关系,在现有分支与指定的远程分支之间

git branch --set-upstream [branch] [remote-branch]

(8)合并指定分支到当前分支:git merge [branch]

合并新建分支代码到主分支的操作流程

git branch test    # 新建test分支

git checkout test  # 切换到test分支

git commit -m 'test branch commit'   # 修改完test分支代码后提交到暂存区

git push -u origin test      # 推送代码到test分支

git checkout master         # 切换到主分支

git merge test                   # 合并test分支到主分支

git push -u origin master   # 把test分支代码合并推送到主分支

(9)选择一个commit,合并进当前分支:git cherry-pick [commit]

(10)删除本地分支:git branch -d test

(11) 删除远程分支:git push -u origin -d test

五:标签

(1)列出所有tag:git tag

(2)新建一个本地tag号:git tag [tag]

(3)查看tag信息:git show [tag]

(4)提交指定tag到远程仓库:git push origin [tag]

提交所有tag: git push origin --tags

六:查看信息

(1)显示有变更的文件:git status

(2)显示当前分支的版本历史:git log

(3)显示commit历史,以及每次commit发生变更的文件:git log --stat

(4)显示某个文件的版本历史,包括文件改名:

git log --follow [file]

git whatchanged [file]

(5)显示指定文件相关的每一次diff:git log -p [file]

(6)显示指定文件是什么人在什么时间修改过:git blame [file]

(7)显示暂存区和工作区的差异:git diff

(8)显示暂存区和上一个commit的差异:git diff --cached []

(9)显示工作区与当前分支最新commit之间的差异:git diff HEAD

(10)显示两次提交之间的差异:git diff [first-branch]...[second-branch]

(11)显示某次提交的元数据和内容变化:git show [commit]

(12)显示某次提交发生变化的文件:git show --name-only [commit]

(13)显示某次提交时,某个文件的内容:git show [commit]:[filename]

(14)显示当前分支的最近几次提交:git reflog

七:远程同步

(1)下载远程仓库的所有变动:git fetch [remote]

(2)显示所有远程仓库:git remote -v

(3)显示某个远程仓库的信息:git remote show [remote]

(4)增加一个新的远程仓库,并命名:git remote add [shortname] [url]

(5)取回远程仓库的变化,并与本地分支合并:git pull [remote] [branch]

(6)上传本地指定分支到远程仓库:git push [remote] [branch]

(7)强行推送当前分支到远程仓库,即使有冲突:git push [remote] --force(慎用)

(8)推送所有分支到远程仓库:git push [remote] --all

(9)恢复暂存区的指定文件到工作区:git checkout [file]

(10)恢复某个commit的指定文件到工作区:git checkout [commit] [file]

(11)恢复上一个commit的所有文件到工作区:git checkout .

(12)重置暂存区的指定文件,与上一次commit保持一致,但工作区不变:git reset [file]

(13)重置暂存区与工作区,与上一次commit保持一致:git reset --hard

(14)重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变:git reset [commit]

(15)重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致:git reset --hard [commit]

(16)重置当前HEAD为指定commit,但保持暂存区和工作区不变:git reset --keep [commit]

(17)新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支:git revert [commit]

八:忽略文件.gitignore

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立“.gitignore”文件,此文件有如下规则:

1.忽略文件中的空行或以井号(# )开始的行将会被忽略。

2.可以使用Linux通配符。例如∶星号(*)代表任意多个字符,问号(﹖)代表一个字符,方括号([abc] )代表可选字符范围,大括号( {string1,string2……})代表可选的字符串等。

3.如果名称的最前面有一个感叹号( !),表示例外规则,将不被忽略。

4.如果名称的最前面是一个路径分隔符(/ ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

5.如果名称的最后面是一个路径分隔符(/ ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

例子:

*.txt   #忽略所有的.txt结尾的文件

!lib.txt  #但lib.txt除外

/temp  #进忽略项目根目录下的TODO文件,不包括其他目录temp

bulid/  #忽略bulid目录下的所有文件

doc/*.txt #会忽略doc/notes.txt 但是不包括doc/sever/arch.txt

九:readme.md规则

README应该是介绍项目整体的一个概览。其实这个静态文件是有约定成俗的规范,这个规范也就是众多开源开发者相互磨合所形成的。

项目名称与项目介绍

代码实现了什么功能?

项目如何使用? 如何部署?如何运行?(系统环境参数,部署要素,操作说明等)

代码组织架构是什么样的?(目录结构说明等)

版本更新内容摘要(这个非常重要)

第一次提交代码操作流程:

(1)在gitlab等代码仓库上新建代码仓库例如test111

(2)打开项目目录git bash here

 

 (3)自定义并初始化代码库 git init 自定义项目名称

 

 

 (4)cd 到项目里,会看到有.git目录,git add . 添加当前目录所有文件到暂存区

 (5)git stutus 查看暂存区的文件和状态

 (6)git commit -m ‘备注信息’ 提交代码到本地仓库

 (7)git remote add origin  远程仓库地址

如果没有同步远程代码库需要执行:判断获取远程仓库的变化,并参与本地分支合并

git pull --rebase origin master  把远程库中代码合并到本地,–rebase的作用是取消掉本地库中之前的提交

 (8)git push -u origin master 推送最终代码

 (9)代码提交成功

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

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

相关文章

【QT/OpenCV】Qt创建并发布OpenCV dll项目

文章目录 01、开发版本02、QT创建dll项目03、dll项目配置说明04、dll动态库测试 01、开发版本 以下所有源码与软件都是基于下面的版本。 1、QT: Based on Qt 5.12.2 (MSVC 2017, 32 bit) 2、OpenCV: OpenCV – 4.5.1 tips: OpenCV的版本不一…

web漏洞-逻辑越权之登录脆弱支付篡改(34)

这节课是这两个内容,登录的内容会讲不完,会有一小点部分,在别的课将, #登录应用功能点产生的安全问题 只要有登录功能都可以检测(排除之前讲过的) 1.登陆点的暴力破口(很好理解 2.http/http…

【第三节】列表

上一节介绍了最常见的两种数据类型 字符串和数字 这一节将介绍列表 列表 首先,什么是列表?列表是由一系列按照特定顺序排列的元素组成,在python中由中括号[ ]定义 首先列表是一系列的元素,这些元素的种类可以不同,一…

python3 爬虫相关学习9:BeautifulSoup 官方文档学习

目录 1 BeautifulSoup 官方文档 2 用bs 和 requests 打开 本地html的区别:代码里的一段html内容 2.1 代码和运行结果 2.2 用beautiful 打开 本地 html 文件 2.2.1 本地html文件 2.2.2 soup1BeautifulSoup(html1,"lxml") 2.3 用requests打开 本地 h…

微服务治理【注册发现】Nacos

目录 Nacos是什么? Nacos有什么用? 使用 Nacos 服务发现的流程图 Nacos是什么? Nacos是阿里巴巴开源的一个服务发现、配置管理和服务管理平台,是一种基于云原生架构的动态服务发现和配置管理工具。 Nacos有什么用&#xff…

什么是API测试?开发必知的8种API自动化测试类型

API测试 API自动化测试在产品质量控制和CI/CD流程检测中扮演着非常重要的角色。与GUI测试不同,API测试可以更灵活应地适应发布周期短和频繁变更的需求或产品,而且也不会破坏测试输出结果。 什么是API测试? API是应用程序编程接口的首字母缩…

jetLinks协议开发对接真实设备方式

jetLinks协议开发对接真实设备方式 拿到设备确定设备的SDKSDK调用流程梳理SDK集成JetLinks 拿到设备 首先拿到设备,确认设备型号 然后登入海康威视官网,下载 https://www.hikvision.com/cn/support/tools/hitools/ 连接设备修改其对应的IP地址使得本…

信号都是如何产生的,干货满满

目录 一、哪三大阶段 二、产生信号 1、通过键盘产生信号 2、系统调用 3、软件条件产生信号 4、硬件异常产生信号 三、Term和core是什么 一、信号一生三大阶段 1、产生信号:由通过键盘、系统调用、软件条件、硬件异常产生这几种方法产生信号。 2、信号储存&a…

JMeter必知必会系列 —— JMeter基础

1.1 JMeter概述 JMeter简介 Apache JMeter™是Apache组织开发的一款开源软件,是典型的纯Java开发的应用程序,可以在不同平台比如Windows、Linux或macOS系统上进行软件测试。JMeter主要用于应用程序的功能负载测试以度量软件的性能,也可以用于…

项目使用tensorflow2会出错,下载并使用tensorflow1

背景:使用pycharm安装总显示安装失败,使用pip安装也不行,只能使用conda配置虚拟环境手动安装 1、下载安装anaconda 官网下载,双击安装。用anaconda就是想使用虚拟环境,万一没弄好直接删了重新搞就行。 2、创建虚拟环境…

Kendo UI R2 2023 crack

Kendo UI R2 2023 crack 新组件:角度PDFViewer 直接在Angular应用程序中查看PDF文件,无需第三方软件或附加组件。 凭借直观的分页机制、强大的搜索功能和灵活的缩放选项,用户可以轻松导航和浏览PDF内容。 角度16支架 Angular 16引入了一系列改…

AWS CodeWhisperer(代码辅助工具)使用体验

工具 1.vscode 2.AWS Toolkit插件 CodeWhisperer插件的功能 1.自动优化代码:CodeWhisperer插件可以通过代码分析来自动优化代码,从而提高代码的质量和效率。 2.智能代码提示:CodeWhisperer插件可以根据代码上下文提供智能代码提示&#x…

C语言之数组详解(1)(更新前面数组博客的不足)

目录 一、一维数组 1.一维数组的创建和初始化 (1).数组的创建 (2).数组的初始化 2.一维数组的使用 3.一维数组在内存中的存储 二、二维数组 1.二维数组的创建和初始化 (1).二维数组的创建 (2).二维数组的初始化 2.二维数组的使用 3.二维数组在内存中的存储 三、数组作为函数参…

尚硅谷大数据技术Spark教程-笔记08【SparkSQL(介绍、特点、数据模型、核心编程、案例实操、总结)】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【SparkCore(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程…

14.一天搞定主流小程序按分类列表显示文章1

小程序按分类列表显示文章1 (视频对应无13) 本教程均在第一节中项目启动下操作 小程序按分类列表显示文章1 (视频对应无13)前言一、新增分类界面:![在这里插入图片描述](https://img-blog.csdnimg.cn/1dffd20abc8f47d3961dee59426f3a8f.png)二.新增接口apiflex布局组件数据表绑…

Cocos creator常驻节点使用方式addPersistRootNode

最近在做小游戏的时候,遇到了进入result场景时候的传值问题。 场景加载传值,通过常驻节点实现。 在game_scene中添加常驻节点GameResultData空节点。 创建脚本GameResultData.ts,声明要传递的值的内容。 const {ccclass, property} cc._de…

vscode配置格式化

安装好插件 : Vetur 打开vscode --> 文件 --> 首选项 --> 设置 --> 扩展 --> vetur 点击: 写入以下代码 // { // "files.autoSave": "onFocusChange", // "explorer.confirmDelete": false, // "editor.…

南大通用GBase 8c 多模多态分布式数据库系列一之基本介绍、核心技术、架构演进

前言 随着传统的关系型SQL数据库(Oracle,MySQL,PostgreSQL等)难以满足日益增长的高数据量、快速数据处理要求、高数据库安全及强容灾能力要求(RPO,RTO)等挑战,尽管NoSQL非关系型数据…

【超详细练气篇】STL之string类---常见接口函数(1)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

企业级ChatGPT开发入门实战直播21课第2课 运行日志及代码解析

企业级ChatGPT开发入门实战直播21课第2课 运行日志及代码解析 Gavin老师在企业级ChatGPT开发入门实战直播21课第2课中,讲解的ChatGPT应用案例开发架构图: ChatGPT案例运行日志 2023-06-11 16:06:57 DEBUG Calling on_part_begin with no data 2023-06-11