当前位置: 首页 > news >正文

【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 addgit 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

第二次上传时,因为有刚才的记录,不需要再写 originmain ,会默认传递到 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.删除分支 四.…...

【字节序】

字节序 高字节&#xff08;低字节&#xff09;高地址&#xff08;低地址&#xff09;大端模式&#xff08;小端模式&#xff09; 高字节&#xff08;低字节&#xff09; 一个16位(双字节)的数据&#xff0c;比如0xAABB&#xff0c;那么高位字节就是0xAA&#xff0c;低位是0xBB …...

数据结构(五)——树森林

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

vscode配置c/c++调试环境

本文记录win平台使用vscode远程连接ubuntu server服务器下&#xff0c;如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器&#xff0c;第一步安装编译构建套件&#xff08;gcc、g、make、链接器等&#xff09;和调试器&#xf…...

食品输送带的材质

食品输送带的材质&#xff1a;确保安全与卫生的关键选择 在食品生产和加工过程中&#xff0c;食品输送带扮演着至关重要的角色。它负责将原材料、半成品和成品在各个环节之间进行有效传输&#xff0c;确保生产流程的顺畅进行。然而&#xff0c;在食品行业中&#xff0c;输送带…...

普通用户权限运行Docker

普通用户权限运行Docker 安装Docker Docker的安装比较简单&#xff0c;在Docker官网已经给出了具体的方案&#xff0c;可以直接使用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 文档

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

day29|leetcode|C++|491. 非递减子序列|46. 全排列|47. 全排列 II

Leetcode 491. 非递减子序列 链接&#xff1a;491. 非递减子序列 thought: 设 stack 中最后一个值的位置为 last。如果 stack 为空&#xff0c;则 last -1。 设当前正在处理的位置为 pos。如果在 nums 的子区间 [last1, pos) 中&#xff0c;存在和 nums[pos] 相同的值&…...

[Java、Android面试]_12_java访问修饰符、抽象类和接口

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

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统&#xff0c;运行内存都2G 1.prometheus监控服务器&#xff1a;192.168.6.1 主机名&#xff1a;pm 2.grafana展示服务器:192.168.6.2 主机名&#xff1a;gr 3.被监控服务器&#xff1a;192.168.6.3 …...

MongoDB聚合运算符:$integral

文章目录 语法使用举例 $integral聚合运算符只能用在$setWindowField阶段&#xff0c;返回曲线下面积的近似值&#xff0c;该曲线是使用梯形规则计算的&#xff0c;其中每组相邻文档使用以下公式形成一个梯形&#xff1a; $setWindowFields阶段中用于积分间隔的sortBy字段值$i…...

手撕算法-买卖股票的最佳时机 II(买卖多次)

描述 分析 使用动态规划。dp[i][0] 代表 第i天没有股票的最大利润dp[i][1] 代表 第i天持有股票的最大利润 状态转移方程为&#xff1a;dp[i][0] max(dp[i-1][0], dp[i-1][1] prices[i]); // 前一天没有股票&#xff0c;和前一天有股票今天卖掉的最大值dp[i][1] max(dp[i-1…...

技术创新与产业升级

在政府工作报告中,新兴技术如云计算、大数据、人工智能等被多次提及,这反映了政府高度重视新一代信息技术在推动经济社会发展中的重要作用。对于计算机行业而言,抓住这些新兴技术的发展机遇,推动技术创新和产业升级,将是未来发展的关键所在。 云计算作为一种新兴的计算模式,正…...

透视未来工厂:山海鲸可视化打造数字孪生新篇章

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

三.寄存器(内存访问)

1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器&#xff0c;所以有时候用个别的寄存器先把数据段存储起来&#xff0c;再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段...

Day31 贪心算法

Day31 贪心算法 455.分发饼干 我的思路&#xff1a; 小孩数组g指针一直前移&#xff0c;只有饼干数组s满足条件时&#xff0c;才前移&#xff0c;并且更新num 解答&#xff1a; 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热题[哈希]:最长连续序列

原题&#xff1a;128. 最长连续序列 题解&#xff1a; 官方题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;题解&#xff0c;最长连续序列 &#xff1a;哈希表 官方解题思路是先去重&#xff0c;然后判断模板长度的数值是否存在&#xff0c;存在就刷新&#xff0c…...

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…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...