Git基本操作

1. 什么是Git?

Git是一种分布式版本控制系统,广泛用于协作开发、版本管理和分支管理

  • 协作开发:每个开发者在本地都有完整的仓库,可以从远程仓库拉取最新更新到本地仓库,也可以提交本地仓库的修改到远程仓库
  • 版本管理:Git记录了项目的每一次更改,并可以通过查看历史记录比较差异和文件恢复
  • 分支管理:Git支持开创多个独立的工作线,运行开发者在分支进行开发、测试和修复,将项目发布在主分支(master或main)

Git本义其实是饭桶、傻瓜的意思,创始人林纳斯·托瓦兹(Linus Torvalds)想说哪怕是傻瓜都可以使用git实现分布式版本控制
后人将“Git” 解释为 “Global Information Tracker” ,即全球信息追踪器,一定程度上蕴含了Git的功能,但这并不是命名的真实意图

2. Git原理

【Git仓库(Repository)】

  • 远程仓库:托管在网络服务器上的Git仓库(Github或Gitee),用于开源共享和协作开发
  • 本地仓库:托管在开发者个人计算机上的Git仓库,包含项目的所有文件及其版本历史记录

【Git的四个区】

  • 工作区/本地库:存放项目的本地副本,是编辑文件的地方
  • 暂存区:暂时存放你准备提交的修改
  • 版本库:保存了项目的所有提交记录,即项目的所有版本历史
  • 远程库:托管在网络服务器上的Git仓库

3. Git操作

3.1 Git安装

git 安装网上很多教程,这里推荐这个链接,Git安装教程

3.2 SSH

SSH(Secure Shell):安全外壳协议,提供了对计算机的加密连接,确保数据在传输过程中的机密性和完整性,主要用于远程登录、文件传输和命令执行

【SSH的认证】

方法方式适用性质
密码(password)用户提供用户名和密码给服务器来验证身份临时访问每次都需要输入,麻烦
密钥(secret key)私钥存储在本地,公钥存储在服务器长期访问配置好之后免密登录,私钥不容易泄露

【SSH的认证流程】

  1. 生成SSH密钥对-t rsa指定密钥类型为RSA,b 4096指定密钥长度为4096位,-C your_email为密钥添加邮箱参数
ssh-keygen -t rsa -b 4096 -C your_email

your_email是在github或gitee注册时用的邮箱!

  1. 按提示操作

    1. 输入文件保存位置:可以自己设置路径,默认是保存在c/Users/DELL/.ssh
    2. 输入私钥访问密码
    3. 确认私钥访问密码
  2. 复制公钥:切换到路径下的目录,复制公钥文件id_rsa.pub内容

  3. 添加公钥:在github或gitee中的个人设置中添加公钥(标题可以写笔记本电脑的名字,用于标识此电脑)

  4. 测试SSH连接

ssh -T git@gitee.com
ssh -T git@github.com

3.3 配置

  1. 配置本地的用户名和邮箱:帮助客户端身份被Gitee/Github服务器正确识别
git config --global user.name your_name
git config --global user.email your_email

使用命令git config --list可以查看配置信息

  1. 初始化Git仓库
cd path_to_your_project
git init

会创建一个名为.git的子目录,需要设置显示隐藏的项目才能看到

  1. 连接到远程仓库:引用名是可选的,默认是origin,哪怕自定义了远程仓库引用名,origin依然保留
git remote add 引用名 远程仓库URL

可以通过git remote -vgit remote show来查看连接信息

3.4 获取

3.4.1 获取整个仓库

克隆仓库:将远程仓库完整地克隆到本地,如果本地存在同名文件或文件夹会报错,因此这个方法适用于最初在空文件夹中获取远程仓库

git clone 远程URL

后台会自定建立一个本地仓库和远程仓库的连接!不再需要先前的手动连接!

3.4.2 获取最新更改

拉取仓库:从远程仓库的分支拉取最新的更改到本地仓库(注意合并冲突

git pull 引用名 分支名

本地仓库和远程仓库必须存在连接才能使用该命令

3.5 发布

  1. 修改:在本地添加、删除和编辑文件

  2. 上传:将工作区的修改上传到暂存区(第一个针对全部文件,第二个是指定文件或文件夹)

git add .
git add path-to-file
  1. 提交:将暂存区的修改提交到到版本库
git commit -m 声明内容

-m 声明内容是必须的!这符合协作开发时每个人都清楚知道文件更改详情的原则!如果不使用-m选项会自动进入Vim编辑器,十分不好用

  1. 推送:将分支版本库的修改推送到远程仓库的分支
git push 引用名 分支名

分支名是远程仓库的分支名,不是本地仓库的

3.6 撤销

软撤销:撤销最近n次提交,但是保留更改在工作区,以便修改提交声明

git reset --soft HEAD~n

硬撤销:撤销最近n次提交,并且丢弃工作区的所有更改,以便回到历史版本,重新修改文件

git reset --hard HEAD~n

撤销推送:撤销已经推送的提交,回到之前版本,以便回到本地仓库的历史版本进行新一次的工作流

git revert commit-hash -m 声明内容

虽然只使用git revert不会撤销远程仓库的修改,但会自动创建一个撤销的提交,此时使用git push即可实现撤销对远程仓库的修改
commit-hash提交的哈希值可以通过git log指令查看

3.7 分支操作

查看本地分支

git branch

查看远程分支

git branch -r

新建分支

git branch name

在本地新建的分支,跟远程的分支一点关系都没有!

分支重命名

git branch -m old-name new-name

切换分支

git switch name
git checkout name

switch只有2.23或更高版本的Git才可以使用,可以使用git --version查看当前git版本

删除分支

git branch -d name

不能删除当前分支

3.8 引用名操作

添加引用名

git rmeote add name 远程库URL

修改引用名

git remote rename old-name new-name

删除引用名

git remote remove name

查看全部引用名

git remote show

查看引用名的具体信息

git remote show name

3.9 四个区的操作(进阶)

查看版本库的提交信息:提交的哈希值,作者信息,提交日期和提交的简短说明

git log

查看暂存区状态:列出了有几个本地提交尚未推送到远程仓库,并显示哪些更改已被添加到暂存区,哪些更改还在工作区

git status

查看暂存区和版本库的差异:每次使用git add都会更新暂存区的修改,而版本库只保留最后一次提交的修改,使用以下指令可以审查和比较代码的变化

git diff --cached
git diff --staged

实际上,diff的用法还有很多,既可以比较指定版本的差异,还可以比较分支的差异,甚至可以通过选项来设置比较手段,可以查阅相关资料

拉取远程库到版本库:从远程仓库下载最新更改到版本库,但不合并这些更改到当前工作分支

git fetch 引用名 分支名

拉取版本库到本地库:合并指定分支到当前分支

git merge 引用名/分支名 -m 声明内容

在合并之前,不允许对本地库进行未提交的更改,否则会造成合并冲突

3.10 通用

实际上,如果只是单纯的获取和提交,使用到的指令可能只有这几个:

  1. 获取更新:git pull 引用名 master
  2. 上传修改:git add .
  3. 提交修改:git commit -m 声明
  4. 推送修改:git push 引用名 master

4. Pull Request

待更

5. 参考资料

Git 极客教程

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

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

相关文章

OpenAI重磅回归开源!首发推理模型不限商用,直面DeepSeek挑战

一夜之间,OpenAI更新三大动向,开源、融资、用户暴增。 第一,将开源一个具备推理能力的大语言模型,包含参数权重那种。上一次这样开源还是6年前推出GPT-2。 这几乎就是冲着DeepSeek-R1来的。 奥特曼表示,这个模型非常…

优先级队列(priority_queue)

一、什么是优先级队列? 首先要注意到就是别与队列搞混了,队列是一种先进先出(FIFO)的数据类型。每次元素的入队都只能添加到队列尾部,出队时从队列头部开始出。 1、优先级队列的定义 简单理解: prioriity_…

1.1 计算机网络的概念

首先来看什么是计算机网络,关于计算机网络的定义并没有一个统一的标准,不同的教材有 不同的说法(这是王道书对于计算机网络的定义),我们可以结合自己的生活经验去体会这个 定义。 可以用不同类型的设备去连接计算机网络…

Linux(25)——进程调度

目录 一、Linux 进程调度: 二、进程优先级: 1、普通调度策略: 2、完全公平调度程序: 三、nice 值: 1、nice 值范围: 2、nice 值修改权限: (1)降低: …

Linux驱动开发实战(十):pinctrl子系统实验:RGB LED引脚初始化详解

Linux驱动开发实战(十):pinctrl子系统实验:RGB LED引脚初始化详解 文章目录 Linux驱动开发实战(十):pinctrl子系统实验:RGB LED引脚初始化详解前言一、设备树配置解析引脚复用配置左…

【工具】BioPred一个用于精准医疗中生物标志物分析的 R 软件包

介绍 R 语言包 BioPred 提供了一系列用于精准医疗中的亚组分析和生物标志物分析的工具。它借助极端梯度提升(XGBoost)算法,并结合倾向得分加权和 A 学习方法,帮助优化个体化治疗规则,从而简化亚组识别过程。BioPred 还…

CentOS 7上手动强制升级docker-compose(不使用yum)

在CentOS 7上手动强制升级docker-compose(不使用yum)的步骤如下 一.安装成功截图 二.升级步骤 2.1 确定当前docker-compose路径 which docker-compose通常路径为 /usr/local/bin/docker-compose 或 /usr/bin/docker-compose。 以下是笔者之前已经清理…

pip安装第三方库,但PyCharm中却无法识别

点击菜单栏File,选择Settings 系统默认的是PyCharm安装目录下的python.exe 解释器,不要用。 选择你的PYTHON的安装目录下的python.exe 解释器。如果不存在的话,增加进去 如果文件》设置打不开,需移除法化包。 打开 pycharm 安装目…

WEB安全-CTF中的PHP反序列化漏洞

什么是序列化? 简单来说序列化是将数组或对象转换成字符串的过程,这样的好处是利于对象存储与传输,在PHP中,序列化函数是serialize(),反序列化是unserialize() 无类序列化 无类序列化顾名思义就是不包含class的序列…

【实战】渗透测试下的传输命令

目录 bitsadmin certutil curl ftp js nc perl php py scp vbs wget WindowsDefender bitsadmin 不支持https、ftp协议,php python带的服务器会出错 >bitsadmin /transfer n http://192.168.1.192/Client.exe e:\1.exe >bitsadmin /rawreturn /…

如何在 SwiftUI 视图中使用分页(Paging)机制显示 SwiftData 数据(三)

概述 小伙伴们都知道,自从有了 SwiftData 的加持,现在 SwiftUI 可以非常惬意的利用描述型命令创建以数据驱动为本的视图了。这在测试或演示小项目中工作的完美无缺,不过真实世界要“残酷”的多。 实际情况是,我们无法一次性将海量数据统统拉入内存以便在 SwiftUI 中显示,…

DFS/BFS简介以及剪枝技巧

DFS简介 DFS含义 ⭐ DFS,即Depth-first-search,是深度优先搜索的简称。 它的主要思路是一直沿当前分支搜索,当搜索到尽头之后返回,再逐步向其他地方扩散。 我们可以通过一个树形结构说明DFS的遍历顺序 A/ | \B C D/ \ |E…

Baker团队用LigandMPNN玩转原子级蛋白质设计

Nat. Methods | Baker团队用LigandMPNN玩转原子级蛋白质设计 在小分子、核苷酸和金属离子等配体的环境下进行蛋白质序列设计,对于酶、配体结合蛋白及生物传感器的开发至关重要。然而,现有基于深度学习的方法难以有效建模非蛋白组分。研究人员提出了一种…

功能混合度计算全流程(原理讲解+软件实操)

目录 0、简介1、原理讲解(部分内容)2、软件实操(部分内容) 下面两个视频是OSM路网简化的部分视频内容: 功能混合度计算1-原理讲解 功能混合度计算2-软件实操 0、简介 优势:全网最全最细! 1、有…

Spring 事务

一.实现 以前写过MySQL的事务,看这里:MySQL事务-CSDN博客 Spring事务的实现主要有两种方法:1.编程式事务;2.声明式事务。 1.编程式事务 编程式事务主要有三个重要步骤:1.开启事务;2.提交事务&#xff1…

速查Linux常用指令

一、用户配置 1. 超级用户与普通用户 1)Ubuntu 更新 root 密码 sudo passwd root(执行 sudo 时输入的是当前用户的密码) sudo 是权限提升,使用时,身份就会提升为 root 。 2)普通用户($&#…

Python入门(6):Python序列结构-元组

在数学里,序列也称为数列,是指按照一定顺序排列的一列数,而在程序设计中,序列是一种常用的数据存储方式,几乎每种程序设计语言都提供了类似的数据结构,如C语言或Java 中的数组等。 在 Python 中,序列是最基…

MySQL(一)

MySQL定义 ⭐ MySQL是一个“客户端——服务器”结构的软件 客户端:主动给服务器发起的数据,称为请求。 服务器:被动接收,给客户端返回的数据,称为响应。 客户端和服务器是通过网络通信进行的。 内存和硬盘的区别&am…

idea报错:程序包不存在

这里的程序包是我们项目里自己写的,idea却报错不存在。 解决方法: 参考这位大佬的方法,OK。

oracle常用sql

获取主键 1. 查询主键的两种常用方法 Oracle 的主键信息存储在以下两个视图中: USER_CONSTRAINTS:存储当前用户下所有表的约束信息(如主键、外键等)。 USER_CONS_COLUMNS:存储约束对应的列信息。 方法 1&#xff…