git命令使用详情

news2024/9/23 3:26:27

目录

一. 安装教程

二. git配置

1. 查看git配置参数

2. 设置邮箱和用户名

3. SSH配置

4. 配置git远程库公钥

5. 编码设置

三. git 提交流程

1. 整体操作流程图

2. Git仓库包含5个区域

3. 下载、提交、更新命令

3.1. 下载

3.2. 提交

3.3. 更新(两种方式)

四. git 冲突解决

1. git 冲突的类型及合并策略

2. git pull --rebase 冲突

2.1 develop 更新时内容冲突

2.2 内容冲突处理

2.3 树冲突解决

3. cherry-pick冲突

4. git merge冲突

五. 修改历史提交

1 单个文件回退到某个历史版本

2 修改最近一次提交内容或注释(git commit --amend )

3. 修改某次历史提交(git rebase -i)

3.1 合并提交(s)

3.2 修改提交信息(r)

3.3 修改提交的内容

3.4 删掉提交(d)


一. 安装教程

安装教程icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/141688528

二. git配置

1. 查看git配置参数

  • 查看Git的配置配置参数命令
# 这条命令会列出所有设置为全局(--global)的配置选项及其值
git config --global --list

# 显示当前设置的全局用户名
git config --global user.name

# 展示所有级别的配置,包括本地仓库的配置、用户级别的配置以及系统级别的配置
git config --list

  • 执行结果

2. 设置邮箱和用户名

  • 安装完成之后需要配置自己名称和邮箱
# 设置自己的用户名
git config --global user.name "李四"

# 设置自己的邮箱
git config --global user.email "323@qq.com"
  • 如果设置名称和邮箱报错

错误信息:

        warning: user.email has multiple values error: cannot overwrite multiple values with a single value Use a regexp, --add or --replace-all to change user.email.

错误原因:
        通过 git config –list 命令 发现有多个user.name 或者多个user.email

解决问题办法:

        执行以下命令

# 执行以下命令
git config --global --replace-all user.name "李四"
git config --global --replace-all user.email "123456@qq.com"

3. SSH配置

        SSH配置需要生成公钥(http协议忽略生成公钥)

右键选择“Git Bash Here”,输入如下命令生成公钥。

并按回车3下,为什么按三下:是因为有提示你是否需要设置密码,如果设置了每次使用Git都会用到密码。
会在一个文件夹里面生成一个私钥 id_rsa和一个公钥id_rsa.pub。(可执行start ~ 命令,生成的公私钥在 .ssh的文件夹里面)

# 执行生成公钥和私钥的命令
ssh-keygen -t rsa -C '自己邮箱'

查看公钥命令

# 查看公钥内容
cat ~/.ssh/id_rsa.pub

4. 配置git远程库公钥

  • 通过【设置】->【ssh公钥】进入码云的如下界面,黏贴公钥
  • 把刚才在git bash里生成的公钥黏贴在公钥里点确定就好了

5. 编码设置

# 注释:该命令表示提交命令的时候使用utf-8编码集提交
git config --global i18n.commitencoding utf-8 

# 注释:该命令表示日志输出时使用utf-8编码集显示
git config --global i18n.logoutputencoding utf-8
 
# 注释:设置LESS字符集为utf-8
export LESSCHARSET=utf-8  

三. git 提交流程

1. 整体操作流程图

2. Git仓库包含5个区域

  1. 工作区
  2. 暂存区
  3. 本地仓库
  4. 本地远程库镜像
  5. 远程仓库

3. 下载、提交、更新命令

3.1. 下载

下载:git clone + git checkout

命令说明
git clone -b  test(分支)   https:(代码url)克隆远程库到本地
git checkout  test切换到test分支

代码示例

# 克隆 master 分支到本地
git clone -b master  https://test.jjj.com

# 切换分支到 test
git checkout test

3.2. 提交

提交 :git add + git commit + git push

命令说明
git add  分支添加文件到暂存区
git commit提交文件到本地版本库
git push将本地版本库中当前分支推送到默认远程片库。

代码示例

# 推送所有变更的文件到缓存区
git add .

# 提交变更文件到本地库
git commit -m "提交日志"

# 推送本地仓库到远程仓库
git push

3.3. 更新(两种方式)

方式一(推荐):git pull --rebase = git fetch + git rebase

命令说明

git pull --rebase

从默认远程库拉取本地库当前分支内容,并与本地库当前分支进行rebase合并

git  fetch获取远程库内容
git rebase以rebase方式合并分支

方式二(不推荐):git pull = git fetch + git merge

命令说明
git pull

从默认远程库拉取本地库当前分支内容,并与本地库当前分支进行merge合并

git fetch获取远程库内容
git merge以rebase方式合并分支

四. git 冲突解决

        git 冲突的类型和解决方法,git冲突有两种类型: 内容冲突 树冲突。内容冲突 是因为不同用户修改了同一文件的同一区域产生的;树冲突 是因为不同用户把同一文件改为不同的名字而产生。

1. git 冲突的类型及合并策略

  • 内容冲突:当产生内容冲突时,如果需要保留一方的内容,使用命令git checkout --ours/theirs < file-name > 实现,如果需要合并,可以手动修改文件。
  • 树冲突:产生树冲突时根据实际的需要,使用git rm/add  <file-name> 对文件进行添加和删除。

2. git pull --rebase 冲突

注意:在更新代码时,为了避免没有提交的文件和服务器文件产生冲突,可以先把 本地修改暂存起来,在提交完后,再弹出本地修改,流程如下。

# 1.把本地修改先暂存起来
git stash

# 2.拉取代码
git pull --rebase

# 3.在把本地暂存文件弹出来
git stash pop

2.1 develop 更新时内容冲突

  • 拉取代码是产生一个冲突内容冲突

2.2 内容冲突处理

  • 查看文件状态

  • 有三种解决冲突的方式

第一种:使用服务上的修改

第二种:使用本地修改

第三种:手动合并修改

  • 冲突后续处理

2.3 树冲突解决

  • 查看树冲突的文件状态

  • 解决冲突

  • 后续处理

3. cherry-pick冲突

        注意: cherry-pick 空提交时,会直接退出pick状态; 拣选连续的多个提交命令:git cherry-pick aa^..bb。

示例

         目前有两个分支 develop 和 master, 想把 develop 的提交拣选到 master上

1. 执行步骤
# 查看分支提交日志
git log

# 切换到 master 分支
git checkout master

# 拣选某个develop上的提交
git cherry-pick commitID

2. 在拣选的时候出现冲突

3. 手动解决冲突,先用 git status 查看出现冲突的文件

4. 使用 vim 手动对冲突的文件进行修改

5. 解决后的界面如下

6. 使用 git add 提交修改

7. git cherry-pick --continue 弹出提交信息交互界面,修改后保存退出,cherry-pick操作完成

4. git merge冲突

当执行merge时,会出现冲突。Git会停止合并过程,并抛出冲突信息

# 合并分支时出现冲突
git merge other-branch
 
# 查看冲突文件
git status
 
# 手动解决冲突
# 编辑文件,选择代码并删除 <<<<<<<, =======, >>>>>>> 标记
vi f.txt
 
# 标记冲突已解决
git add other-branch
 
# 完成合并
git merge --continue
 
# 如果需要取消合并
git merge --abort

五. 修改历史提交

1 单个文件回退到某个历史版本

1.1 查看文件修改记录:git log test.txt

1.2 回退文件到 d46d797e50c47bc 版本:git checkout d46d797e50c47bc test.txt

2 修改最近一次提交内容或注释(git commit --amend )

1. 修改最近一次提交注释内容

  1. 执行命令:git commit --amend

2. 如果要修改内容, 则执行如下过程

  1. 修改文件内容:vi test.txt
  2. 查看文件状态:git status
  3. 添加缓存区:git add .
  4. 提交本地仓库:git commit -m "提交代码"

注意:不管是修改了内容或者是提示,commitID 都会改变

3. 修改某次历史提交(git rebase -i)

命令:git rebase -i  [commitID] (其中commitID是要修改的提交的前一次ID

此命令的交互界面命令如下

常用参数说明

r, reword编辑某次提交的提交信息
e, edit修改某提提交的内容
s, squash把本次的提交合并到上一次
d, drop删除某次提交

3.1 合并提交(s)

3.1.1 查看提交日志,想把C提交合并到B提交上

3.1.2 运行 git rebase -i -A 后,在交互界面输入s,保存退出

弹出变基交互界面

3.1.3 保存后弹出包含两次提交的提交信息如下:其中以#开始的内容时注释,不带#的是信息

根据需要修改提交信息如下,然后保存退出

3.1.4 再次查看日志,前两个提交合并到一起了

3.2 修改提交信息(r)

注意修改第一次提交的命令是 git rebase -i --root

3.2.1 查看提交信息

3.2.2 变基到要修改的提交的前一个提交上

git rebase -i 0138a47

在弹出的交互界面里,把 pick字段改成r

保存后,弹出交互的提交信息界面,在这个界面里修改要提交的信息即可

3.2.3 再次查看提交信息,提交信息已经改动

3.3 修改提交的内容

3.3.1 查看要修改的提交的具体内容

修改下图中id为9490d07的提交, 通过git show查看到这个提交对文件README.md进行了修改

3.3.2 使用命令 git rebase -i 0138a47 变基到要修改提交的前一次提交上

然后弹出 rebase 的操作选项,如下图,把要修改的提交前的参数修改成e

3.3.3 保存交互界面后,对文件进行修改

Vi README.md

对文档添加如下信息,然后进行保存

3.3.4 对改动进行保存

git add README.md

git commit --amend

git rebase --continue

查看改变的提交

3.4 删掉提交(d)

3.4.1 git log --pretty=oneline -3

3.4.2 git rebase -i 0138a47  #变基

然后弹出交互界面里输入d保存

然后查看日志,刚才的提交的信息就没了

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

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

相关文章

无人机 PX4 飞控 | ROS应用层开发:基础代码框架构建

无人机 PX4 飞控 | ROS应用层开发&#xff1a;基础代码框架构建 基础代码框架构建文件建立代码基本构建测试 基础代码框架构建 本篇博客拟在构建一个 无人机 PX4 飞控 ROS应用层开发 的 基础代码框架。 其中包含了基础类文件、类头文件、main主函数文件&#xff0c;及其编译所…

数据结构-c/c++实现栈(详解,栈容量可以动态增长)

一.栈的基本介绍 栈是一种只能够在一端进行插入和删除的顺序表。如下图 空栈&#xff1a;表示不含任何元素的栈 栈顶&#xff1a;表示允许进行插入和删除元素的一端 栈底&#xff1a;表示不允许进行插入和删除元素的一端 即栈是一种后进先出的线性表数据结构 二.栈的常见操…

Redis高级---面试总结之内存过期策略及其淘汰策略

目前已更新系列&#xff1a; 当前&#xff1a;Redis高级---面试总结之内存过期策略及其淘汰策略 并发编程之----线程池ThreadPoolExecutor,Excutors的使用及其工作原理 Redis高级----主从、哨兵、分片、脑裂原理-CSDN博客 计算机网络--面试知识总结一 计算机网络-----面试知…

【深度学习】yolov8的微调

yolov8的集成度太高了&#xff0c;除了config的哪些参数以外&#xff0c;需要更精细的微调。 比如这里&#xff1a; https://github.com/ultralytics/ultralytics/blob/main/ultralytics/utils/tuner.py 应用场景&#xff0c;交通标志的向左转&#xff0c;向右转之类的&#x…

Golang | Leetcode Golang题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; type Solution struct {nums, original []int }func Constructor(nums []int) Solution {return Solution{nums, append([]int(nil), nums...)} }func (s *Solution) Reset() []int {copy(s.nums, s.original)return s.nums }func (s *Solu…

STM32G474之HAL_Delay()会导致死机的原因

使用HAL库需要HAL_Delay()函数支持&#xff0c;离开这个函数&#xff0c;和这个函数有关的函数就无法调用了。遇到这个问题&#xff0c;我们肯定会否定HAL库&#xff0c;也确实它是有点差&#xff0c;但也有好的一面。 为什么HAL库初始化了SysTick定时器&#xff0c;也使能了相…

书生大模型实战营(1)——InterStudio基础知识+Vscode SSH连接远程服务器+Linux基础指令

参加书生.浦江大模型实战训练营&#xff0c;学习大模型知识和微调技术&#xff0c;所有课程免费&#xff0c;通过闯关的形式学习&#xff0c;也比较有趣。一起来了解LLM的世界。邀请链接 产品简介 InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法…

Android Handler消息机制完全解析(二)

欢迎转载&#xff0c;转载请注明出处&#xff1a;https://blog.csdn.net/dmk877/article/details/141690289 在阅读本篇博客之前建议先阅读此篇 Android Handler消息机制完全解析(一) 在看Looper源码之前必须要理解ThreadLocal&#xff0c;ThreadLocal在Handler消息机制中起到…

信息安全--(五)物理与环境安全技术(二)机房安全分析与防护

在使用本博客提供的学习笔记及相关内容时&#xff0c;请注意以下免责声明&#xff1a;信息准确性&#xff1a;本博客的内容是基于作者的个人理解和经验&#xff0c;尽力确保信息的准确性和时效性&#xff0c;但不保证所有信息都完全正确或最新。非专业建议&#xff1a;博客中的…

FlowUs 小程序:开启高效之旅,订阅内容超精彩

一、丰富多样的订阅选择 FlowUs 小程序提供了极为丰富的订阅内容。无论你是对知识管理、项目管理感兴趣&#xff0c;还是专注于创意写作、时间规划&#xff0c;都能在这里找到适合自己的订阅选项。从专业的行业资讯到实用的技巧指南&#xff0c;从激发灵感的创意案例到深入的学…

业务解耦-Spring事件监听的三种实现方式

实现ApplicationListener 步骤如下&#xff1a; 1.写Event类&#xff0c;需要继承Spring的ApplicationEvent类 2.写监听类&#xff0c;需要实现Spring的ApplicationListener接口&#xff0c;加上Component注解 3.监听类实现onApplicationEvent方法 4.通过ApplicationContext.p…

开放大世界的全局寻路

开放大世界的寻路一直是很困扰我的一个点&#xff0c;地图大、还是动态可变的&#xff0c;所以寻路会有很多要求。就我们项目来讲&#xff0c;有这几个要求&#xff1a; 能满足极大范围的地图&#xff1b; 地图寻路数据能实时构建&#xff0c;且重建代价很小&#xff1b; 寻路的…

地质灾害监测预警系统的作用

在地球的广阔舞台上&#xff0c;自然灾害如同不可预测的演员&#xff0c;时常上演着惊心动魄的剧目。地震的震撼、滑坡的肆虐、泥石流的咆哮&#xff0c;这些地质灾害不仅给人类生命财产带来巨大威胁&#xff0c;也考验着社会的防灾减灾能力。为了应对这一挑战&#xff0c;地质…

【Linux】在 bash shell 环境下,当一命令正在执行时,按下 control-Z 会?

目录 题目分析答案 题目 分析 ctrl-c&#xff1a; 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序&#xff1b;ctrl-z&#xff1a; 发送 SIGTSTP信号给前台进程组中的所有进程&#xff0c;常用于挂起一个进程&#xff1b;ctrl-d&#xff1a; 不是发送信…

乐城堡 JoyCastle Unity岗位笔试题

1)实现 move(GameObjct gameObject, Vector3 begin, Vector3 end, float time, bool pingpong){ } 使 gameObject 在 time 秒内&#xff0c;从 begin 移动到 end&#xff0c;若 pingpong 为 true&#xff0c;则在结束时 使 gameObject 在 time 秒内从 end 移动到 begin&#xf…

机器学习中的增量学习(Incremental Learning,IL)策略是什么?

机器学习中的增量学习&#xff08;Incremental Learning&#xff0c;IL&#xff09;策略是什么&#xff1f; 在当今快速发展的数据驱动世界中&#xff0c;传统的静态机器学习模型逐渐显露出局限性。随着数据量的增长和分布的变化&#xff0c;模型需要不断更新&#xff0c;以保…

opc da 服务器数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 应用条件 2 4 查看OPC DA服务器的相关参数 2 5 配置网关采集opc da数据 4 6 用IEC61850协议转发数据 6 7 网关使用多个逻辑设备和逻辑节点的方法 9 8 在服务器上运行仰科OPC DA采集软件 10 9 案例总结 12 1 案例说明 在OPC DA服务…

使用 Vue3 Element Plus 实现el-table中的特定单元格编辑,下拉选择等

效果预览 完整代码(后面有解析) <template><div style="display: flex;align-items: center;justify-co

磁性齿轮箱市场报告:前三大厂商占有大约79.0%的市场份额

磁性齿轮箱是一种用于扭矩和速度转换的非接触式机构。它们无磨损、无摩擦、无疲劳。它们不需要润滑剂&#xff0c;并且可以针对其他机械特性&#xff08;如刚度或阻尼&#xff09;进行定制。 一、全球磁性齿轮箱行业现状与洞察 据 QYResearch 调研团队最新发布的“全球磁性齿轮…

成都高温限电:当电动汽车「无电可充」

8月末的成都&#xff0c;因为高温限电了。 近几日&#xff0c;成都市气象台连续发布了高温红色预警信号。据新华社报道&#xff0c;8月21日&#xff0c;四川电网用电负荷两次创下历史新高&#xff0c;最高达6797万千瓦&#xff0c;较去年最大用电负荷增长近13%&#xff0c;电力…