【Git】常用的Git操作集合

常用的Git操作集合

  • 1. 分支操作
    • 1.1 查看本地所有分支
      • `git branch`
    • 1.2 查看所有分支(包含本地+远程仓库)
      • `git branch -a`
    • 1.3 切换分支
      • `git checkout test`
  • 2. 常用基本操作
    • 2.1 查看 `git` 各存储区内(文件)状态
      • `git status`
    • 2.2 查看工作区与暂存区文件差异
      • `git diff`
    • 2.3 临时存储/取消临时存储
      • `git stash`
      • `git stash pop`
    • 2.4 查看 `git` 记录
      • `git log`
      • `git log --oneline`
  • 3. 撤销操作
    • 3.1 撤销add
      • `git reset <fileName>`
    • 3.2 撤销commit
      • `git reset --soft HEAD^`
      • `git reset --mixed HEAD^`
      • `git reset --hard HEAD^`
      • `git reset --hard HEAD~n`
    • 3.3 撤销push到远程仓库的commit
      • 3.3.1 先确定要取消的commit
      • 3.3.2 取消本地仓库commit
      • 3.3.3 将本地仓库的更改同步到远程仓
  • 4. 合并 `commit`
    • 4.1 确定要合并的commit的前一个commitId 值
    • 4.2 执行 `git rebase -i <commitId>` 命令
    • 4.3 执行 `git log` 命令查看commit合并情况
  • 5. 将已提交的commit修改复制到另一个分支上
    • 5.1 使用 `cherry-pick` 复制单个commit
      • `git cherry-pick <commitId>`
    • 5.2 使用 `cherry-pick` 复制多个commit
      • `git cherry-pick <commitId1> <commitId2> ...`

1. 分支操作

1.1 查看本地所有分支

git branch

在这里插入图片描述

* 标识的分支就是当前代码所在的分支,图示表明当前在 develop 分支。

1.2 查看所有分支(包含本地+远程仓库)

git branch -a

在这里插入图片描述

1.3 切换分支

git checkout test

切换到本地的test分支。

在这里插入图片描述

git checkout origin master: 切换到远程仓库的master分支。

2. 常用基本操作

2.1 查看 git 各存储区内(文件)状态

git status

在这里插入图片描述

2.2 查看工作区与暂存区文件差异

git diff

在这里插入图片描述

git diff 命令还可以通过指定HEAD指针、版本、文件名等进行更具体的比较。

2.3 临时存储/取消临时存储

有时,在开发过程中,需要切换分支改BUG,但是当前功能又没开发完,也不适合提交,此时就可以将当前修改临时存储起来,切换分支后再去改BUG。

git stash

我们先使用git status看下git各区域的变更状态:

在这里插入图片描述

然后,我们执行git stash 命令后再执行git status观察下git各区域变更状态:

在这里插入图片描述
可以看到,差异只是在工作区,git stash 命令,将工作区的修改隐藏了,临时存储在一个特殊容器里面。

git stash pop

git stash pop命令取消git stash操作,将隐藏的对工作区内的修改进行复原。

在这里插入图片描述

2.4 查看 git 记录

git log

输入git log 命令会进入一个git提交记录显示窗口,可以上下翻页查找,输入q退出。
在这里插入图片描述
在这里插入图片描述

git log --oneline

跟上面的功能一样,只是显示的信息更加的简约、紧凑,我个人更喜欢这样用。
在这里插入图片描述

3. 撤销操作

3.1 撤销add

git reset <fileName>

撤销已经从工作区添加到暂存区,但是还没commit的文件。

在这里插入图片描述
我们可以看到,执行git reset 命令之后,已经add的文件又从暂存区回到了工作区。
我们也可以执行git reset . 取消所有在暂存区文件的add操作。

3.2 撤销commit

git reset --soft HEAD^

撤销commit操作,但是不撤销add操作。

在这里插入图片描述
可以看到,执行完git reset --soft HEAD^命令之后,已提交的修改回到了暂存区。

git reset --mixed HEAD^

撤销commit操作,同时撤销add操作,但是将修改保留在工作区。

在这里插入图片描述
可以看到,执行完git reset --mixed HEAD^命令之后,已提交的修改回到了工作区。

git reset --hard HEAD^

撤销commit操作,并撤销add操作,同时工作区也不保留修改。

在这里插入图片描述
在这里插入图片描述

可以看到,执行完git reset --hard HEAD^命令之后,已提交的修改没了,最新的commit也没了。

git reset --hard HEAD~n

撤销最近n次的commit操作,并撤销add操作,同时工作区也不保留修改。
可以根据我们的需求选择--hard, --soft 或者 --mixed选项,下面我们以n取2为例。
在这里插入图片描述
可以看到,执行完该命令后,我们提交的最新的2个commit完全消失了。

3.3 撤销push到远程仓库的commit

撤销push到远程仓库的commit的操作可分为以下3步:

3.3.1 先确定要取消的commit

git log --oneline
确定哪几个commit需要取消。

在这里插入图片描述
现在我要取消最新的2个commit,让commit哈希值为bd04cbb的commit成为最新的commit。

3.3.2 取消本地仓库commit

git reset --soft <commitId>
我们的commitId值取上一步确定的值,执行命令,结果如下。可以看到最新的2个commit记录没了。

根据我们的需求,--soft 选项也可以换成--hard 或者 --mixed,具体区别见3.2.

在这里插入图片描述

3.3.3 将本地仓库的更改同步到远程仓

git push origin <branchName>
此处branchName选择本地分支对应的远端分支,将对本地仓内该分支的修改同步到远程仓库。

--force 选项也可以直接简写成 -f

在这里插入图片描述

4. 合并 commit

4.1 确定要合并的commit的前一个commitId 值

使用git log --oneline 确定那些commit需要合并,我们这里要合并前2个commit。因此,我们要取第3个commitID为bd04cbb的值。

在这里插入图片描述

4.2 执行 git rebase -i <commitId> 命令

这里的 <commitId> 为上一步确定的 bd04cbb

在这里插入图片描述
执行完该命令进入到一个vim编辑界面:

在这里插入图片描述
在前面未注释的部分的行首,我们只保留第一行的pick,其他行都改为s(代表squash,表示对应的commit被压缩)。退出编辑模式,输入wq! 保存退出。进入另一个vim 编辑框如下。该编辑框的内容为要合并的所有commit的message,我们现在需要将所有的commit message合并为一个。

在这里插入图片描述
修改如下后保存退出。
在这里插入图片描述

4.3 执行 git log 命令查看commit合并情况

此时我们使用git log 命令查看可以看到原来的2个commit已经被合并为一个新的commit。
在这里插入图片描述

5. 将已提交的commit修改复制到另一个分支上

我们在上一步在 test 分支提交了一个 commit(添加注释)。
此时我们切换到了 develop 分支上,现在我们要把在 test 分支上的改动,复制到 develop 分支上,此时我们就需要使用 cherry-pick 命令。

5.1 使用 cherry-pick 复制单个commit

git cherry-pick <commitId>

我们当前在 develop 分支上,对test分支上的commitId 为e5ac3d4 的commit 进行 cherry-pick

在这里插入图片描述
我们从上图可以看到,其它分支上的修改被复制了过来,在develop分支上产生的新commit有新的commitId。

5.2 使用 cherry-pick 复制多个commit

git cherry-pick <commitId1> <commitId2> ...

我们现在在develop分支上,想把该分支上最新的2个commit复制到test分支上(3个及以上个commit也是同理)。

在这里插入图片描述
先切换到test分支上,在test分支上执行命令git cherry-pick a313ca3 9b2284e

在这里插入图片描述
此时,我们再来看下commit 日志,看到多个commit已经被复制到test分支:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半波整流电路原理详解+参数与计算公式

什么是半波整流电路&#xff1f; 半波整流电路的基本操作非常简单&#xff0c;输入信号通过二极管&#xff0c;由于只能通过一个方向的电流&#xff0c;二极管的整流作用&#xff0c;单个二极管只允许通过一半的波形。 下图说明了半波整流电路的基本原理。 半波整流电路工作图…

ping github 请求超时 100%丢失

1&#xff0c;现象&#xff1a;github网站打不开 作为程序员&#xff0c;经常需要从github上下载东西&#xff0c;这次想要下载nvm&#xff08;Node版本管理器&#xff09;&#xff0c;发现不行&#xff0c;网页打不开。 网上各种找&#xff0c;说要ping&#xff0c…

大模型重构千行百业,寻找数智化的春天 | 2024 AI科技峰会

文&#xff5c;郝鑫、黄小艺 刚刚过去的2023年&#xff0c;注定是不平凡的一年。 年初ChatGPT点燃了引线之后&#xff0c;百模大战、文生图应用爆火、AI Agent风靡......从IT基础设施&#xff0c;到千行百业&#xff0c;AI都在马不停蹄地重构一切&#xff0c;进入狂奔时代。 …

SPI传感器接口设计与优化:基于STM32的实践

SPI&#xff08;串行外设接口&#xff09;是一种常用的串行通信协议&#xff0c;用于在微控制器和外部设备之间进行全双工的高速数据传输。在本文中&#xff0c;我们将探讨如何基于STM32微控制器设计和优化SPI传感器接口&#xff0c;并提供相应的代码示例。 1. SPI传感器接口设…

分享 GitHub 上的敏感词汇工具类:sensitive-word

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Unity之铰链关节和弹簧组件

《今天闪电侠他回来了&#xff0c;这一次他要拿回属于他的一切》 目录 &#x1f4d5;一、铰链关节组件HingeJoint 1. 实例 2. 铰链关节的坐标属性 ​3.铰链关节的马达属性Motor &#x1f4d5;二、弹簧组件 &#x1f4d5;三、杂谈 一、铰链关节组件HingeJoint 1. 实例 说…

PyQt5零基础入门(四)——信号与槽

信号与槽 前言信号与槽单对单直接连接使用lambda表达式 信号与槽多对多一个信号连接多个槽多个信号连接一个槽信号与信号连接 自定义信号 前言 PyQt5的信号与槽是一种对象之间的通信机制&#xff0c;允许一个QObject对象发出信号&#xff0c;与之相连接的槽函数将会自动执行。…

[STM32F407ZET6] GPIO

GPIO模式 F4的GPIO功能比F1的功能更多一些, 但是整体框架一样. F4的输出配置和F1的不同, F4的配置后, 施密特触发器将会开启, 还会对输入寄存器进行采样读取. F1的配置后, 推挽输出将会关闭施密特触发器, 开漏模式读取会读输入寄存器, 推挽模式会读取输出寄存器的值. 输出(全…

贪心算法-活动安排-最详细注释解析

贪心算法-活动安排-最详细注释解析 题目&#xff1a; 学校在最近几天有n个活动&#xff0c;这些活动都需要使用学校的大礼堂&#xff0c;在同一时间&#xff0c;礼堂只能被一个活动使用。由于有些活动时间上有冲突&#xff0c;学校办公室人员只好让一些活动放弃使用礼堂而使用…

Three.js 学习笔记之模型(学习中1.18更新)

文章目录 模型 几何体 材质模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创建几何体的方式BufferAttribute Types定义顶点法线 geometry.attributes.normal BufferGeom…

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

阿里云服务器哪个地域好?地域选择的影响因素与建议

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

新上线一个IT公司微信小程序

项目介绍 项目背景: 一家IT公司,业务包含以下六大块: 1、IT设备回收 2、IT设备租赁 3、IT设备销售 4、IT设备维修 5、IT外包 6、IT软件开发 通过小程序,提供在线下单,在线制单,在线销售,业务介绍,推广,会员 项目目的: 业务介绍: 包含企业业务介绍 客户需…

Tessy—嵌入式软件单元测试/集成测试工具

产品概述 Tessy源自戴姆勒—奔驰公司的软件技术实验室&#xff0c;由德国Hitex公司负责销售及技术的支持服务&#xff0c;是一款专门针对嵌入式软件进行单元/集成测试的工具。它可以对C/C代码进行单元、集成测试&#xff0c;可以自动化搭建测试环境、执行测试、评估测试结果并生…

架设一台NFS服务器,并按照以下要求配置

1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.xxx.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将/home/tom目录仅共享给192.168.xxx.xxx这台主机&#xff0c;…

Python实战 -- PySide6 制作天气查询软件

一、环境准备 开发环境&#xff1a;Python 3.9.2 pycharm PySide6 申请天气情况 API &#xff1a;https://console.amap.com/dev/key/app designer 设计 ui 目录下 Weather.ui 转换为 Weather.py 结果显示 二、完整代码 import sysfrom PySide6 import QtWidgetsimport…

Oracle 实战手册 工作实战经验总结

目录 一、基本的数据库管理 1、数据库的启动和关闭 ​编辑2、如何确定Oracle的版本&#xff1f; 3、如何修改数据库的内存参数 4、修改用户名密码 5、如何查看最大会话数 6、如何修改oracle数据库的用户连接数 7、解锁用户 8、如何获取被锁定的数据库对象 9、如何确定…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 理论题

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

Cloudflare cdn 基本使用

个人版免费试用&#xff0c;一个邮箱账号只能缓存一个网站cdn。 地址&#xff1a;cloudflare.com 创建站点 在网站创建站点&#xff0c;填上你的域名 点击进入网站 缓存全局配置 可清除缓存&#xff0c;设置浏览器缓存时间 我设置了always online,防止服务器经常不稳定 缓…

Docker安全基线检查需要修复的一些问题

一、可能出现的漏洞 限制容器之间的网络流量 限制容器的内存使用量 为Docker启用内容信任 将容器的根文件系统挂载为只读 审核Docker文件和目录 默认情况下&#xff0c;同一主机上的容器之间允许所有网络通信。 如果不需要&#xff0c;请限制所有容器间的通信。 将需要相互通…
最新文章