Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令

  • 1 一些场景
    • 1.1 场景1
    • 1.2 场景2
    • 1.3 场景3
    • 1.4 场景4
    • 1.5 场景5
    • 1.6 场景6
    • 1.7 场景7
    • 1.8 场景8
    • 1.9 场景9
    • 1.10 场景10
    • 1.11 场景11
    • 1.12 场景12
    • 1.13 场景13
    • 1.14 场景14
    • 1.15 场景15
  • 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\- file
  • 3 git checkout commitID和git reset --hard commitID的区别
    • 3.1 git checkout commitID
    • 3.2 git reset --hard commitID
    • 3.3 使用场景对比
  • 4 git rebase -i

1 一些场景

1.1 场景1

如何将分支hotfix/bug-123的提交 abc,拿到 feature/bug-123分支?
假设你当前在feature分支

有三种方法:

  1. 使用 git cherry-pick
git checkout feature/bug-123
git cherry-pick abc
# 解决冲突(如果有)
git add <冲突文件>
git cherry-pick --continue
# 此时提交 abc 现在已经被应用到 feature/bug-123 分支
  1. 使用 git merge
    如果 hotfix/bug-123 分支只有提交 abc 是你需要的,可以直接合并整个分支
git checkout feature/bug-123
git merge hotfix/bug-123
# 解决冲突(如果有)
git add <冲突文件>
git commit
# 此时hotfix/bug-123 分支的提交(包括 abc)现在已经被合并到 feature/bug-123 分支
  1. 使用 git rebase
    如果 feature/bug-123 分支需要保持线性历史,可以使用 rebase
git checkout feature/bug-123
git rebase hotfix/bug-123
# 解决冲突(如果有)
git add <冲突文件>
git rebase --continue
# 此时feature/bug-123 分支现在包含了 hotfix/bug-123 分支的提交(包括 abc),并且提交历史是线性的

推荐方法:使用 git cherry-pick,因为它只提取指定提交,不会引入其他无关的更改

1.2 场景2

你刚提交的 commit message 写错了,如何快速修改?

  1. 执行交互式 rebase:
    在终端中输入以下命令,打开交互式 rebase 界面,HEAD~1 表示最近的一次提交:
git rebase -i HEAD~1
  1. 编辑提交信息
    这时会打开一个编辑器,显示类似以下内容:
pick <commit_hash> <commit_message>

pick 代表要保持这个提交不变。将 pick 改为 reword,然后保存退出编辑器

reword <commit_hash> <commit_message>
  1. 修改提交信息
    执行完 rebase 后,Git 会再次打开编辑器,让你修改提交信息。你可以在这里编辑提交的 message
  2. 完成 rebase
    修改完提交信息后,保存并关闭编辑器。Git 会自动完成 rebase,并更新提交信息

1.3 场景3

如何暂存本地修改,以切换到其他工作分支?请写出关键的git 命令?

使用 git stash 将当前修改保存到栈中、

git stash

这会将工作目录和暂存区的修改都暂存起来,并恢复到上次提交的状态

1.4 场景4

git status 显示了一堆无关的文件,如何屏蔽这些无关文件的显示?

使用.gitignore 文件

1.5 场景5

切换分支后,由于代码目录下的编译缓存文件存在冲突导致编译出错。执行什么清除命令删除所有无关文件?

使用 git clean 清除未跟踪的文件
git clean 命令用于删除工作目录中未跟踪的文件(例如编译缓存文件、临时文件等),这些文件没有被添加到 Git 版本控制中

git clean -fd
# -f:强制删除文件(Git 默认会保护未跟踪的文件,使用 -f 强制执行删除操作)
# -d:删除未跟踪的目录(如果有的话)

1.6 场景6

你错误提交了一个远程分支(feature儿ask-2233),如何删除它?

要删除远程分支,使用 git push 命令并指定删除操作。远程分支的删除可以通过以下命令实现

git push origin --delete feature/task-2233

1.7 场景7

如何 clone 所有子模块?假设主项目已克隆在本地

  1. 初始化子模块
    首先,进入到你已经克隆的主项目目录,然后使用 git submodule update --init 来初始化子模块。这个命令会根据主项目中的 .gitmodules 配置文件初始化子模块
cd /path/to/your/repo  # 进入你的主项目目录
git submodule update --init
  1. 更新所有子模块(包括嵌套的子模块)
    如果主项目中有子模块嵌套子模块(即子模块也有自己的子模块),你可以使用 --recursive 选项来递归地初始化和更新所有子模块
git submodule update --init --recursive
  1. 克隆子模块的最新版本
    如果你希望更新到子模块的最新版本,或者确保它们与主项目同步,可以使用以下命令
git submodule update --remote --recursive
  1. 查看子模块的状态
    你可以使用 git submodule status 来查看当前子模块的状态,确保它们已经正确地初始化和更新
git submodule status

1.8 场景8

Git 如何配置用户名(假设叫 Zhang San)?

git config --global user.name "Zhang San"

这个命令会全局配置你的 Git 用户名为 “Zhang San”,也就是说,你在所有仓库中都会使用这个名字

如果你想只为某个特定仓库设置用户名,可以在该仓库目录下执行以下命令,去掉 --global

git config user.name "Zhang San"

1.9 场景9

当你在另一分支修复 bug 并提交之后,返回feature/task-2233 继续工作,如何重新应用之前的修改?

git stash pop

1.10 场景10

列出所有 v8.0.55xx开头的标签

git tag -l "v8.0.55*"

1.11 场景11

查看提交 e44c5c2的详细内容(commit message 以及修改内容)

  1. 查看提交消息和详细信息
git show e44c5c2

这将显示该提交的详细内容,包括:

  • 提交的 hash(e44c5c2)
  • 提交的作者信息(姓名和邮箱)
  • 提交的日期
  • 提交的消息(commit message)
  • 所有修改的文件和内容
    在这里插入图片描述
  1. 只查看提交消息
    如果你只关心提交消息,可以使用以下命令
git log -1 --format=%B e44c5c2

在这里插入图片描述
3. 查看修改内容
如果你需要查看修改的具体内容(即每个文件中有哪些行被添加、删除或者修改),使用 git diff

git diff e44c5c2^! 

在这里插入图片描述

1.12 场景12

如何将当前所在的本地分支名称 hotfix/1234修改为hotfix/bug-1234?

  1. 确保你在 hotfix/1234 分支上
    首先,确认你当前在 hotfix/1234 分支上。如果你还没有切换到该分支,可以使用以下命令
git checkout hotfix/1234
  1. 重命名本地分支
    使用 git branch -m 命令来重命名当前的本地分支
git branch -m hotfix/bug-1234

这将把 hotfix/1234 本地分支重命名为 hotfix/bug-1234

  1. 更新远程分支(如果需要)
    如果你已经将 hotfix/1234 推送到了远程仓库,并且想要将远程分支也重命名,你需要执行以下步骤:
    删除远程旧分支(hotfix/1234)
git push origin --delete hotfix/1234

推送新分支(hotfix/bug-1234)

git push origin hotfix/bug-1234

设置上游分支(用于跟踪远程分支)

git push --set-upstream origin hotfix/bug-1234

1.13 场景13

如何将当前所在的本地分支名称 hotfix/1234修改为hotfix/bug-1234?

确定目标 commit-id,通过以下命令基于该提交创建一个新的分支

git checkout -b support <commit-id>

1.14 场景14

如何将新增加修改追加到最近一个提交?

  1. 首先,添加你的修改到暂存区
git add your-file
  1. 使用 git commit --amend 追加修改
    然后,使用 git commit --amend 命令来修改最近的提交,将新修改合并到这个提交中
git commit --amend

执行这个命令后,Git 会打开你的默认编辑器,让你可以修改提交信息。如果你不需要修改提交信息,可以直接保存并关闭编辑器
3. 完成
这样,你的修改就会被追加到最近的提交中,提交历史看起来就像是一次提交

1.15 场景15

如何将你的 hotrix 分支与主分支master 的最新修改对齐?(假设不会产生冲突)

  1. 首先切换到 hotrix 分支
git checkout hotrix
  1. 拉取master分支的最新修改
    如果你本地的 master 分支没有更新,你需要首先拉取远程仓库中的 master 分支最新的更改
git fetch origin master
  1. 执行 rebase 操作
    现在,运行以下命令将 hotrix 分支的提交“移动”到 master 分支的最新提交之后
git rebase origin/master

这将把 hotrix 分支上的提交重新应用到 master 分支的最新提交之后。如果没有冲突,rebase 操作会自动完成

2 git cherry-pick <commit-hash> 和 git checkout branch -- file

  1. git cherry-pick
  • 作用:将某个提交(commit)应用到当前分支
  • 使用场景:当你需要将另一个分支的某个特定提交(包括其更改)应用到当前分支时使用
  • 操作对象:提交(commit),而不是单个文件
  • 命令格式:git cherry-pick <commit-hash>
  • 特点:
    • 会将指定提交的更改应用到当前分支,并生成一个新的提交。
    • 适用于跨分支复制某个提交的更改。
    • 如果提交涉及多个文件,所有文件的更改都会被应用。
  1. git checkout branch – file
  • 作用:将某个分支中的特定文件覆盖到当前工作目录。
  • 使用场景:当你需要将另一个分支的某个文件的状态复制到当前分支时使用。
  • 操作对象:单个文件,而不是提交。
  • 特点:
    • 只操作单个文件,不会影响其他文件。
    • 不会生成新的提交,你需要手动 git add 和 git commit
    • 适用于从另一个分支恢复某个文件的状态。

总结

  • 如果你需要复制某个提交的所有更改,使用 git cherry-pick。
  • 如果你只需要复制另一个分支的某个文件,使用 git checkout branch – file

3 git checkout commitID和git reset --hard commitID的区别

git checkout commitID git reset --hard commitID 都可以将 Git 仓库的状态恢复到指定的提交,但是它们的工作方式和影响有所不同。具体区别如下:

3.1 git checkout commitID

  • 作用:切换到指定的提交commitID,使工作目录和暂存区的文件恢复到该提交的状态
  • 行为:
    • 该命令会让你的工作目录变为与 commitID 对应的文件内容一致,但是不会修改当前分支的历史,你依然停留在当前分支上
    • 它会进入 分离头指针(detached HEAD) 状态,也就是说,Git 不再指向任何分支,而是指向了一个特定的提交。如果在这种状态下进行新的提交,Git 会创建一个新的分支,除非你显式地创建一个新分支
    • 不会改变暂存区(index)的状态,因此不会丢失任何暂存的更改
  • 适用场景
    • 你想查看某个特定提交的内容,或者临时检查某个历史版本
    • 你只想查看一个特定的提交,而不想修改当前分支

3.2 git reset --hard commitID

  • 作用:将当前分支的指针重置到指定的 commitID,同时会重置工作目录和暂存区,使它们与该提交一致
  • 行为:
    • 改变当前分支的历史:它会把当前分支的指针(例如 master 或 main)指向 commitID,从而“丢弃”该提交之后的所有更改和提交
    • 更改工作目录和暂存区:它会将工作目录中的所有文件和暂存区的文件恢复到 commitID 所对应的状态,所有未提交的更改都会丢失
    • 删除历史提交:所有在 commitID 之后的提交都会被删除,分支的历史会被重写
  • 适用场景:
    • 你想彻底丢弃一些提交并重置代码状态,或者将分支回滚到某个特定提交
    • 要小心使用,因为会删除所有本地更改,并且无法恢复被丢弃的提交(除非你有备份)

3.3 使用场景对比

  • 如果你只是想查看某个提交,不打算修改当前分支,可以使用 git checkout commitID
  • 如果你想删除当前分支上的提交,并回到某个历史点,丢弃所有后续的更改,则使用 git reset --hard commitID

4 git rebase -i

启动交互式 rebase

  • 命令形式:git rebase -i <commit-hash>git rebase -i HEAD~n
  • 编辑 rebase 的操作:
    • 示例:
      • pick 1234567 Commit message 1
      • pick 2345678 Commit message 2
    • 以下是一些常用的命令和作用:
      • pick:保留该提交
      • reword:保留提交,但修改提交信息
      • edit:保留提交,但让你修改该提交的内容(例如,修改代码或文件)
      • squash 或 s:将当前提交与前一个提交合并,并保留两者的提交信息
      • fixup 或 f:将当前提交与前一个提交合并,并丢弃当前提交的提交信息(只保留前一个提交的信息)
      • drop:删除当前提交
      • exec:在该提交时执行一个命令

例如,你想将第 2 和第 3 个提交合并到第一个提交中,并修改它们的提交信息,可以将文件编辑为如下所示

pick 1234567 Commit message 1
squash 2345678 Commit message 2
squash 3456789 Commit message 3

编辑完成后,保存并关闭编辑器,Git 会继续执行 rebase 操作,应用你选择的操作。

  • 如果有冲突,Git 会暂停 rebase,要求你解决冲突。你需要手动解决冲突,解决完冲突后,要add到暂存区,但不需要提交,然后使用 git rebase --continue 继续 rebase
  • 如果你不想继续 rebase,可以使用 git rebase --abort 来放弃 rebase 操作

编辑提交信息
如果你选择了 squashreword,Git 会打开一个新的编辑器,允许你编辑提交信息。你可以选择保留原始信息,或者将提交信息合并为新的内容

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

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

相关文章

AI 驱动的软件测试革命:从自动化到智能化的进阶之路

&#x1f680;引言&#xff1a;软件测试的智能化转型浪潮 在数字化转型加速的今天&#xff0c;软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式&#xff0c;已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…

Unity--Cubism Live2D模型使用

了解LIVE2D在unity的使用--前提记录 了解各个组件的作用 Live2D Manuals & Tutorials 这些文件都是重要的控制动画参数的 Cubism Editor是编辑Live2D的工具&#xff0c;而导出的数据的类型&#xff0c;需要满足以上的条件 SDK中包含的Cubism的Importer会自动生成一个Pref…

Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术

文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战&#xff1a;运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…

Lab17_ Blind SQL injection with out-of-band data exfiltration

文章目录 前言&#xff1a;进入实验室构造 payload 前言&#xff1a; 实验室标题为&#xff1a; 带外数据泄露的 SQL 盲注 简介&#xff1a; 本实验包含一个SQL盲目注入漏洞。应用程序使用跟踪Cookie进行分析&#xff0c;并执行包含提交的Cookie值的SQL查询。 SQL查询是异…

Vue 框架深度解析:源码分析与实现原理详解

文章目录 一、Vue 核心架构设计1.1 整体架构流程图1.2 模块职责划分 二、响应式系统源码解析2.1 核心类关系图2.2 核心源码分析2.2.1 数据劫持实现2.2.2 依赖收集过程 三、虚拟DOM与Diff算法实现3.1 Diff算法流程图3.2 核心Diff源码 四、模板编译全流程剖析4.1 编译流程图4.2 编…

Linux基本指令

一&#xff1a;Xshell相关快捷键 1.AltEnter进入Xshell全屏模式&#xff0c;再按一次AltEnter退出Xshell全屏模式 2.Ctrl Insert复制 3.Shift Insert粘粘 二&#xff1a;Linux基本指令 1.clear&#xff1a; 清屏&#xff1a;即将屏幕框上的所有内容删除 2.pwd&#xf…

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

计算机视觉|3D卷积网络VoxelNet:点云检测的革新力量

一、引言 在科技快速发展的背景下&#xff0c;3D 目标检测技术在自动驾驶和机器人领域中具有重要作用。 在自动驾驶领域&#xff0c;车辆需实时、准确感知周围环境中的目标物体&#xff0c;如行人、车辆、交通标志和障碍物等。只有精确检测这些目标的位置、姿态和类别&#x…

【AD】5-13 特殊粘贴使用

同等间距复制很多过孔 复制之后进行特殊性粘贴&#xff0c;选择阵列粘贴 将元件带位号、带网络从PCB复制粘贴到另一个PCB 全选PCB并复制&#xff0c;来到另一个PCB&#xff0c;点击特殊性粘贴

Unity自定义区域UI滑动事件

自定义区域UI滑动事件 介绍制作1.创建一个Image2.创建脚本 总结 介绍 一提到滑动事件联想到有太多的插件了比如EastTouchBundle&#xff0c;今天想单纯通过UI去做一个滑动事件而不是基于Box2d或者Box去做滑动事件。 制作 1.创建一个Image 2.创建脚本 using UnityEngine; us…

报表DSL优化,享元模式优化过程,优化效果怎么样?

报表DSL优化与享元模式应用详解 一、报表DSL优化 1. 问题背景 报表系统通常使用领域特定语言&#xff08;DSL&#xff09;定义模板结构、数据绑定规则及样式配置。随着复杂度提升&#xff0c;DSL可能面临以下问题&#xff1a; 冗余配置&#xff1a;重复定义样式、布局或数据源…

Python —— pow()函数

一、示例1 # 计算 2 的 3 次幂 result1 pow(2, 3) print(result1) # 输出: 8# 计算 2.5 的 2 次幂 result2 pow(2.5, 2) print(result2) # 输出: 6.25 二、示例2 # 计算 (2 ** 3) % 5 result3 pow(2, 3, 5) print(result3) # 输出: 3 三、示例3 ntxt input("请输…

STM32——GPIO介绍

GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…

3月8号(信息差)

🌍“星际之门”首个数据中心重磅启航!料部署6.4万块英伟达GB200 🎄全球AI大混战升温!超越Sora的阿里万相大模型开源 家用显卡都能跑 ✨重磅!阿里深夜推出全新推理模型,仅1/20参数媲美DeepSeek R1 1.7B级形式化推理与验证小模型,媲美满血版DeepSeek-R1,全面开源! 研…

使用 NodeMCU 将温度和湿度传感器数据发送到 Firebase 实时数据库ESP8266

作者 使用 NodeMCU8266 将温度和湿度传感器数据发送到 Firebase 实时数据库 微控制器的内部存储器很小,不足以长时间保存传感器生成的数据,要么您必须使用一些外部存储设备,要么可以使用互联网将数据保存在一些云上。此外,当传感器部署在人类无法到达或难以经常访问的极端…

匿名GitHub链接使用教程(Anonymous GitHub)2025

Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心&#xff0c;然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…

【结构设计】立创EDA专业版——3D外壳设计

【结构设计】立创EDA专业版——3D外壳设计 文章目录 前言立创EDA官网教程一、3D结构设计1. 外壳2. 铜柱3. 顶层4. 侧边 二、3D视图三、导出二、参考文章总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 立创EDA官网教程 立创EDA使用教程 立创…

Spring Boot 3 整合 MinIO 实现分布式文件存储

引言 文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心&#xff0c;而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。 分布式存…

[数据结构]栈和队列

目录 1. 栈(Stack) 1.1、概念 1.2、 Stack的常用方法 1.3、有关栈的术语区分 2、实现自己的栈 2.1、入栈 2.2、出栈 2.3、查看栈顶元素 2.4、链式栈 3、队列(Queue) 3.1、概念 3.2、Queue的常用方法 3.3、循环队列 4、实现自己的链式队列 4.1、入队 4.2、出队 …

求最大公约数【C/C++】

大家好啊&#xff0c;欢迎来到本博客( •̀ ω •́ )✧&#xff0c;我将带领大家详细的了解最大公约数的思想与解法。 一、什么是公约数 公约数&#xff0c;也称为公因数&#xff0c;是指两个或多个整数共有的因数。具体来说&#xff0c;如果一个整数能被两个或多个整数整除&…