【tips】Git使用指南
文章目录
- 一、Git介绍
- 1. 什么是Git
- 2.Git对比SVN
- 3.Git安装
- 二.Git常用命令
- 1. git config
- 2. 初始化本地库
- 3. 工作区、暂存区和版本库
- 4. git add
- 5. git commit
- 6. git reset 与 git revert
- git reset
- git revert
- 三. Git 分支
- 1.初识分支
- 2.创建分支
- 3.切换分支
- 4.合并分支
- 5.删除分支
- 四.远程仓库
- 1.创建远程仓库
- 2.添加仓库地址
- 3.git push
- 4.git clone
- 5.git pull
- 五.VScode集成Git
- 六. gitignore
一、Git介绍
1. 什么是Git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
-
版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术
-
团队协作
从单兵作战转换为团队开发
2.Git对比SVN
-
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己的代码推送到中央服务器,集中式版本控制系统是必须联网才能工作
-
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,可以离线工作
3.Git安装
git官网下载
打开 cmd
窗口,输入指令检查是否安装成功
git --version
二.Git常用命令
1. git config
Git 中有三层 config 文件,分别为系统、全局、本地,对于同一配置项,优先级为本地 > 全局 > 系统,每层配置都会覆盖掉上一层的配置
查看不同级别配置文件
# 查看系统config \Git\mingw64\etc\gitconfig包含适用于系统所有用户和所有项目的值
git config --system --list# 查看当前用户(global)配置 C:\Users\Administrator.gitconfig
git config --global --list# 查看当前仓库配置信息 git项目目录中的.git/config,适用于当前项目
git config --local --list
设置用户标识,以区分不同的开发人员,可以和远程不同
# 设置全局配置 --global
git config --global user.email "you@example.com"
git config --global user.name "Your Name"# 设置本地用户标识
git config user.email "you@example.com"
git config user.name "Your Name"# 删除配置项
git config [--local|--global|--system] --unset section.key# 查看当前配置
git config --list# 查看某个配置项
git config user.name
2. 初始化本地库
cd hello/
是进入文件夹,cd ..
是返回上一级文件夹,ls
显示当前文件夹下的普通文件,ls -a
显示所有
git init
初始化后文件夹内会多一个 .git
的文件夹(这个文件夹是一个隐藏文件夹)
3. 工作区、暂存区和版本库
工作区
当前目录下的所有文件,.git不属于工作区
版本库
.git
这个目录是本地版本库(本地仓库),分为暂存区和main
托管平台
- 局域网(内网):gitlab
- 公网(外网):gitlab、github、gitee 码云
将工作区的代码提交至暂存区(stage),确定没有问题后提交到主分支 main ,即历史区,这时才会生成提交记录
如果需要再次提交,可以将之前 main 中的提交撤回到暂存区,在暂存区中一次性提交至 main 中,总共生成一次记录,避免记录混乱
最后推送远程仓库
4. git add
使用 git add
指令将代码提交至暂存区
# 把文件夹下的单独文件 index.txt 放在暂存区
git add index.txt
# 把文件夹下的单独一个文件夹 assets 放在暂存区
git add assets/
# 把文件夹下所有的内容都放在暂存区
git add --all
# git add --all 简单的写法
git add .# 查看文件状态(绿色的表示在暂存区,红色的表示只在工作区)
git status# 查看文件内容
cat index.txt# 删除暂存区的文件
git rm --cached index.txt
5. git commit
使用git commit
指令将暂存区的内容提交至历史区(版本库)
# 将暂存区的内容放到历史区(版本库),不加-m会进入vim模式,按i切换到insert模式,写注释(不要在#后面写,另起一行),然后按esc键,按:wq退出
git commit -m "message"# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库
git commit -am "message"# 使用一次新的commit, 替代上一次提交,如果代码没有任何新变化, 则用来改写上一次commit的提交信息
git commit --amend -m "message"
使用 git log
指令查看版本信息
# 查看当前历史区版本信息,显示最顶端指针及以下的记录
git log
# 查看本地库所有的操作记录
git reflog
6. git reset 与 git revert
git reset
使用 git reset 版本编号
进行历史回退,回滚到对应的commit-id,共有如下三种命令方式:
--mixed
:默认,可以不带该参数,回滚到所有git add
和git commit
命令执行之前,暂存区清空,全部到工作区
--soft
:工作区不变,暂存区 = 原来的 + 回滚后和回滚前的版本差异
--hard
:撤销工作区中所有未提交的修改内容,将所有工作区和暂存区的文件修改全部清空覆盖,不能找回
# 回退到上一次提交的版本
git reset --hard HEAD^# 回退到上上次提交的版本 hard 之前从历史区回退到工作区
git reset --hard HEAD^^
git reset --hard HEAD~2
git reset --hard reflog中显示的回退前那一次的地址(或者前面的6个字母)# soft从历史区回退到暂存区,比如注释写的不够详细可以回退到暂存区再写一下再推到历史区,或者修复了一个bug,把前面那个版本退回,将新代码推到暂存区,再一起推到历史区
git reset --soft HEAD^
head指针,表示当前指向的位置,head->main,每提交一次会向前一次,想回退版本让指针向回移动一次
回退后,此时git push会报错,因为本地库HEAD指向的版本比远程库要旧
使用-f
参数强制推送
git push -f
git revert
"反做"某一个版本,撤销其中的commit-id并重新生成一个commit-id,以达到撤销该版本的修改的目的,本身不会对其他的提交commit-id产生影响,例如想要修改版本二,但不想影响版本三,则可用git revert
修改版本二并生成新的版本四,不影响版本三
也就是说,撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交,版本会递增且不影响之前提交的内容
如果要推送到远程服务器使用git push
即可
# 撤销前一次 commit
git revert HEAD# 撤销前前一次commit
git revert HEAD^# 撤销某一次commit,会让程序员修改注释,如果想要使用默认注释添加 -n 或 --no-commit 参数
git revert commit_id# 连续撤销多个commit
git revert -n commit_id_start..commit_id_end
# 或者下述写法
git revert -n commit_id_1
git revert -n commit_id_3
三. Git 分支
1.初识分支
git
在初始化的时候,会自动生成一个分支,叫做 main
,表示主要分支的意思
可以自己开辟出很多独立分支,每个功能是一个独立的分支
2.创建分支
使用 git branch 分支名称
指令开辟分支
# 开辟一个 login 分支
git branch login
查看当前分支情况
# 查看当前分支情况
git branch
前面有 *
号并且有高亮显示的,表示当前所处的分支
3.切换分支
使用 git checkout 分支名称
或git switch 分支名称
指令来切换分支
建议使用switch
命令,checkout
是一个很底层的命令,可以完成很多事情,在特定情况下使用会造成困扰
# 切换到 login 分支
git checkout login
git switch login# 创建一个新分支并切换到该分支,保留main中所有文件
git checkout -b login
git switch -c login# 创建一个新分支并切换到该分支,删除所有跟踪文件
git switch --orphan login
按照分支将所有功能开发完毕后,只要把所有代码都合并到 main
主分支上就行了
4.合并分支
使用 git merge
进行分支合并,将别的分支的内容合并到此时所处的分支上
# 切换到 main 分支
git switch main# 把 login 的内容合并到自己的分支
git merge login
当两个分支对同一个文件均进行过修改时,合并后会产生冲突,需要手动合并(出现master|MERGING的时候),这时打开文件把需要留的东西留下需要删的东西删掉,然后重新add和commit就可以了(合并后的还是只在main里面,login里面还是他原来的子功能)
5.删除分支
切换到别的分支,使用 git branch -d 分支名称
指令删除分支
# 先切换到别的分支
git switch main# 删除 login 本地分支
git branch -d login# 强制删除
git branch -D login# 有必要的情况下,删除远程分支
git push origin --delete login
四.远程仓库
1.创建远程仓库
在远程代码托管平台 github 中创建一个新仓库
2.添加仓库地址
使用 git remote add origin 仓库地址
地址添加远程仓库
# 添加仓库地址
git remote add origin <仓库地址># 删除仓库地址(比如第一次后面的地址写错了)
git remote remove origin
remote:远程
add:添加
origin:一个变量名(指代后面一长串的地址,即指代这个仓库,可以修改为别的名字)
3.git push
使用 git push
指令将历史区中的所有内容推送到远程仓库中
# 上传内容,推送到 main 分支
git push origin main# 如果当前分支与多个主机存在追踪关系,使用 -u 参数指定一个默认主机,后面可以不加参数使用 git push
git push -u origin main
第二次上传时,因为有刚才的记录,不需要再写 origin
和 main
,会默认传递到 origin
这个地址的 main
分支上,如果需要推送到其他分支,需要加以说明
# 第二次上传
git push
4.git clone
使用 git clone 仓库地址
指令将远程仓库中的内容克隆一份到本地,默认克隆main
主分支
可以克隆别人的 公开 的仓库,也可以克隆自己的仓库
# 克隆仓库主分支
git clone <仓库地址># 克隆远程指定分支
git clone -b <分支名> <仓库地址>
5.git pull
与远程仓库关联后,如果代码有他人进行更新,可以使用git pull
获取最新代码
# 拉取远程 main 最新代码到本地分支 main 并进行合并
git pull origin master
git pull
如果远程和本地都有修改,再pull就会产生冲突,和当前一样手动合并,然后add,commit,push
提交分支git push origin login,再git pull origin login拉取,不会和主分支合并
对于bugfix分支,应该是切到master分支然后merge合并,然后把他删掉。如果已经将bugfix推上去了,可以用
git push origin :bugfix用空覆盖,将远程的bugfix分支删除
用fork把他人的项目整到自己的github上,然后对这个项目修改(clone……),然后pull后点pull request,如果作者批准并且merge就可以上到他的项目里
五.VScode集成Git
VSCode内置版本控制机制,并自带对Git和Github的支持,可以安装插件以支持其他控制软件,如SVN等,可以在其中进行可视化 git 管理
六. gitignore
在一些项目中,我们不想让本地仓库中所有文件都上传到远程仓库中,因为其中有一些测试文件、配置文件、依赖文件等,内容太大,并且我们只想展示源代码,则可以写一个.gitignore
文件,将不需要推送的文件进行自动忽略
git 忽略规则匹配语法:
- 空行不匹配任何文件,可作为分隔符,可用反斜杠转义
- 如果本地仓库文件已被跟踪,那么即使在 .gitignore 中设置了忽略,也不起作用
- .gitignore 文件也会被上传的到远程仓库,所以同一个仓库的人可以使用同一个.gitignore 文件
- 对于一个项目,可以在最上层设置
.gitignore
文件,也可以在各个文件夹中设置,所以有根目录和当前目录指令的区别
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
# 开头的是注释# 忽略根目录下的 bin 文件
/bin# 忽略当前路径下的 bin 文件夹
bin/# 忽略当前路径下的.c文件,不忽略子目录中的.c文件
/*.c# 忽略 bin 文件夹下的.c文件,不忽略子目录中.c文件
bin/*.c# 忽略所有.log文件
*.log# 忽略/bin, a/bin, a/b/bin等
**/bin# 忽略a/b, a/x/b, a/x/y/b等
a/**/b# 不忽略 bin 目录下的 run.sh 文件
!/bin/run.sh# 忽略当前路径的 config.php 文件
config.php
相关文章:
【tips】Git使用指南
文章目录 一、Git介绍1. 什么是Git2.Git对比SVN3.Git安装 二.Git常用命令1. git config2. 初始化本地库3. 工作区、暂存区和版本库4. git add5. git commit6. git reset 与 git revertgit resetgit revert 三. Git 分支1.初识分支2.创建分支3.切换分支4.合并分支5.删除分支 四.…...
【字节序】
字节序 高字节(低字节)高地址(低地址)大端模式(小端模式) 高字节(低字节) 一个16位(双字节)的数据,比如0xAABB,那么高位字节就是0xAA,低位是0xBB …...

数据结构(五)——树森林
5.4 树和森林 5.4.1 树的存储结构 树的存储1:双亲表示法 用数组顺序存储各结点,每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…...

vscode配置c/c++调试环境
本文记录win平台使用vscode远程连接ubuntu server服务器下,如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器,第一步安装编译构建套件(gcc、g、make、链接器等)和调试器…...
食品输送带的材质
食品输送带的材质:确保安全与卫生的关键选择 在食品生产和加工过程中,食品输送带扮演着至关重要的角色。它负责将原材料、半成品和成品在各个环节之间进行有效传输,确保生产流程的顺畅进行。然而,在食品行业中,输送带…...
普通用户权限运行Docker
普通用户权限运行Docker 安装Docker Docker的安装比较简单,在Docker官网已经给出了具体的方案,可以直接使用apt安装 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/…...

7.Java并发编程—掌握线程池的标准创建方式和优雅关闭技巧,提升任务调度效率
文章目录 线程池的标准创建方式线程池参数1.核心线程(corePoolSize)2.最大线程数(maximumPoolSize)3.阻塞队列(BlockingQueue) 向线程提交任务的两种方式1.execute()1.1.案例-execute()向线程池提交任务 2.submit()2.1.submit(Callable<T> task)2.2.案例-submit()向线程池…...

从边缘设备丰富你的 Elasticsearch 文档
作者:David Pilato 我们在之前的文章中已经了解了如何丰富 Elasticsearch 本身和 Logstash 中的数据。 但如果我们可以从边缘设备中做到这一点呢? 这将减少 Elasticsearch 要做的工作。 让我们看看如何从具有代理处理器的 Elastic 代理中执行此操作。 E…...

day29|leetcode|C++|491. 非递减子序列|46. 全排列|47. 全排列 II
Leetcode 491. 非递减子序列 链接:491. 非递减子序列 thought: 设 stack 中最后一个值的位置为 last。如果 stack 为空,则 last -1。 设当前正在处理的位置为 pos。如果在 nums 的子区间 [last1, pos) 中,存在和 nums[pos] 相同的值&…...

[Java、Android面试]_12_java访问修饰符、抽象类和接口
文章目录 1. java访问修饰符2. 抽象类和接口2.1 抽象类2.2 接口2.3 抽象类和接口的区别 本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限&…...

Linux:Prometheus的源码包安装及操作(2)
环境介绍 三台centos 7系统,运行内存都2G 1.prometheus监控服务器:192.168.6.1 主机名:pm 2.grafana展示服务器:192.168.6.2 主机名:gr 3.被监控服务器:192.168.6.3 …...
MongoDB聚合运算符:$integral
文章目录 语法使用举例 $integral聚合运算符只能用在$setWindowField阶段,返回曲线下面积的近似值,该曲线是使用梯形规则计算的,其中每组相邻文档使用以下公式形成一个梯形: $setWindowFields阶段中用于积分间隔的sortBy字段值$i…...

手撕算法-买卖股票的最佳时机 II(买卖多次)
描述 分析 使用动态规划。dp[i][0] 代表 第i天没有股票的最大利润dp[i][1] 代表 第i天持有股票的最大利润 状态转移方程为:dp[i][0] max(dp[i-1][0], dp[i-1][1] prices[i]); // 前一天没有股票,和前一天有股票今天卖掉的最大值dp[i][1] max(dp[i-1…...
技术创新与产业升级
在政府工作报告中,新兴技术如云计算、大数据、人工智能等被多次提及,这反映了政府高度重视新一代信息技术在推动经济社会发展中的重要作用。对于计算机行业而言,抓住这些新兴技术的发展机遇,推动技术创新和产业升级,将是未来发展的关键所在。 云计算作为一种新兴的计算模式,正…...

透视未来工厂:山海鲸可视化打造数字孪生新篇章
在信息化浪潮的推动下,数字孪生工厂项目正成为工业制造领域的新宠。作为一名山海鲸可视化的资深用户,我深感其强大的数据可视化能力和数字孪生技术在工厂管理中的应用价值,同时我们公司之前也和山海鲸可视化合作制作了一个智慧工厂项目&#…...

三.寄存器(内存访问)
1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器,所以有时候用个别的寄存器先把数据段存储起来,再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段...
Day31 贪心算法
Day31 贪心算法 455.分发饼干 我的思路: 小孩数组g指针一直前移,只有饼干数组s满足条件时,才前移,并且更新num 解答: class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.…...

【WEEK4】 【DAY5】AJAX - Part Two【English Version】
2024.3.22 Friday Following the previous article 【WEEK4】 【DAY4】AJAX - Part One【English Version】 Contents 8.4. Ajax Asynchronous Data Loading8.4.1. Create User.java8.4.2. Add lombok and jackson support in pom.xml8.4.3. Change Tomcat Settings8.4.4. Mo…...
力扣100热题[哈希]:最长连续序列
原题:128. 最长连续序列 题解: 官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表 官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新,…...
python笔记基础--文件和存储数据(7)
目录 1.从文件中读取数据 2.写入文件 3.存储数据 3.1使用json.dump()和json.load() 3.2保存和读取用户生成的数据 3.3重构 1.从文件中读取数据 读取整个文件 with open(data.txt) as file_object: contents file_object.read()print(contents)print(contents.rstrip…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...