Git(三):暂存区处理与分支

2023-11-15

5、Git 操作

5.1 隐藏(Stash)

    在 Git 中,隐藏操作将能够修改跟踪文件,阶段更改,并将其保存在一系列未完成的更改中,并可以随时重新应用。

    当更改了文件的内容后,通过 git status 对跟踪文件进行检查,现在,要切换分支以进行客户升级,但不想提交一直在做的工作; 那么可以把当前工作的改变隐藏起来。 要将一个新的存根推到堆栈上,运行 git stash 命令:

$ git stash

     现在,可以安全地切换分支并在其他地方工作。通过使用git stash list命令来查看已存在更改的列表

$ git stash list

    之后想重新开始新的文件编写,查找上次没有修改完的文件,只需执行 git stash pop 命令即可从堆栈中删除更改并将其放置在当前工作目录中:

$ git stash pop

5.2 移动、重命名(mv)

5.2.1 移动操作

    移动操作将目录或文件从一个位置移动到另一个位置。例如,我们想要将源代码移动到src目录中。修改后的目录结构将显示如下:

$ mkdir gitmv
$ git mv noadd.txt gitmv/

    更改之后,为了使这些更改永久性,必须将修改的目录结构推送到远程存储库,在执行git pull操作之后,目录结构将被更新。

$ git pull

5.2.2 重命名操作

$ git mv noadd.txt noadd2.txt

R : 表示文件已被重命名;

对于提交操作,需要使用 -a 标志,这使 git commit 自动检测修改的文件。

5.3 修正(checkout)

    当我们不想要修改已经提交了的文件的内容时,需要通过撤销修改,可以使用 git checkout 命令。可以使用此命令来还原文件的内容

$ git checkout remind.md

 ​​​​

 5.3.1 删除分段区域的更改

    当执行添加操作时,文件将从本地存储库移动到暂存区域。 如果用户意外修改文件并将其添加到暂存区域,则可以使用 git checkout 命令恢复其更改。

    在Git中,有一个 HEAD 指针总是指向最新的提交。 如果要从分段区域撤消更改,则可以使用 git checkout 命令,但是使用 checkout 命令,必须提供一个附加参数,即 HEAD 指针。 附加的提交指针参数指示 git checkout 命令重置工作树,并删除分段更改

$ git checkout head -- remind.md

5.3.2 复位移动头指针

    经过少量更改后,可以决定删除这些更改。 git reset命令用于复位或恢复更改。 我们可以执行三种不同类型的复位操作。

  

每个分支都有一个 HEAD 指针,它指向最新的提交。如果用 --soft 选项后跟提交 ID 的 Git reset 命令,那么它将仅重置 HEAD 指针而不会破坏任何东西。

 .git/refs/heads/master 文件存储 HEAD 指针的提交 ID。 可使用 git log -1 命令验证。

$ cat .git/refs/heads/test

  • --mixed :将从尚未提交的暂存区域还原这些更改。它仅从暂存区域恢复更改。对文件的工作副本进行的实际更改不受影响。

    默认 Git 复位等效于执行 git reset - mixed

  • --hard :将清除分段区域; 它会将 HEAD 指针重置为特定提交 ID 的最新提交,并删除本地文件更改。

现在,利用 git log 命令获取对应的头指针 ID 所指向的暂存区域,通过重置 HEAD 与 --hard 选项,将从分段区域还原文件,并删除对文件所做的任何本地更改。

$ git reset --hard 5d8bfbc12278b840acf7e26e62f6ebf166f6ffc4

 

5.4 标签(tag)

    假设项目中存在两个成员,均需要标记项目内容,以便更容易访问。

5.4.1 创建标签

    使用 git tag 命令来标记当前 HEAD 指针。在创建标签时需要提供 -a 选项的标签名称,并提供带 -m 选项的标签消息。

$ git tag -a 'first_tag' -m 'git tag -a name -m message'

    如果要标记特定提交,则使用相应的COMMIT ID而不是HEAD指针:

$ git push origin tag first_tag

5.4.2 查看标签

    可以使用带有 -l 选项的 git tag 命令查看所有可用的标签:

$ git tag -l

    使用 git show tagname 命令后跟其标签名来查看有关标签的更多详细信息:

$ git show first_tag

5.4.3 删除标签

    使用命令 git tag -d 从本地以及远程存储库中删除标签

5.5 补丁(format-patch)

    补丁是一个文本文件,其内容类似于查看修改命令 git diff ,但与代码一样,它也有关于提交的元数据; 例如提交ID,日期,提交消息等。我们可以从提交创建一个补丁,而其他人可以将它们应用到他们的存储库。

    使用 git format-patch 命令创建最新提交的修补程序。 如果要为特定提交创建修补程序,请在 format-patch 命令后面指定 COMMIT_ID 。

$ git format-patch -1
# 指定 commit Id
$ git format-patch ba47cca229eefb8aaba9c7393ed94fa319778fac 

    上述命令在当前工作目录中创建了 .patch 文件。其他工作人员可以使用这个补丁来修改他的文件。git 分别提供两个命令来应用补丁:

  • git apply : 修改本地文件而不创建提交;

  • git am : 修改文件并创建提交。

5.6 分支(branch)

分支操作允许创建另一路线 / 方向上开发,通过使用这个操作将开发过程分为两个不同的方向。

5.6.1 创建分支

    使用 git branch <branch name> 命令创建一个分支,可以从现有分支上创建,也可以使用特定的标签或提交作为起点创建。如果没有任何特定的提交 ID ,将会以 HEAD 作为起点提交分支。

$ git branch newbranch

    创建了新分支 "newbranch" ,使用 git branch 列出可用的分支,Git 在当前签出分支之前显示一个星号。创建分支的操作如下:

  

5.6.2 切换分支

    使用 git checkout <branch name> 命令在分支之间切换:

$ git checkout new_branch

5.6.3 创建并切换分支

    Git 为 checkout 命令提供 -b 选项; 此操作将创建一个新的分支,并立即切换到新分支。

$ git checkout -b test_branch

5.6.4 删除分支

    通过向 git branch 命令提供 -D 选项来删除分支。在删除现有分支时需切换到其他分支。

$ git branch -D test_branch

5.6.5 重命名分支

    假设需要在项目中添加对宽字符的支持,并且已经创建了一个新的分支,但分支名称需要重新命名。那么可通过使用 -m 选项后跟旧的分支名称和新的分支名称来更改/重新命名分支名称。

$ git branch -m new_branch wchar_support

5.6.6 合并分支

    当进行文件提交到新分支后,将显示如下:

  

    通过查看提交信息,假设工作人员需要在 master 分支中有相同的功能,不用重新执行代码编写同样的代码,而是通过将分支与主分支合并来执行代码的合并。如下:

$ git merge origin/wchar_support

    通过合并操作后,显示如下:

  

5.7 不同平台换行符问题

    GNU / Linux 和 Mac OS 使用换行( LF )或新行作为行结束字符,而 Windows 使用换行和回车( LFCR )组合来表示行结束字符。

    对于 Windows 系统,可以将 Git 客户端配置为将行结束符转换为 CRLF 结束符,并在提交时将其转换回 LF 格式,如下:

$ git config --global core.autocrlf true

    对于 GNU / Linux 或 Mac OS 系统,我们可以配置 Git 客户端,以便在执行结帐操作时将线结束从 CRLF 转换为 LF ,如下:

$  git config --global core.autocrlf input

5.8 远程操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git(三):暂存区处理与分支 的相关文章

  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • 代表 Git 存储库的数学结构是什么

    我正在学习 Git 如果我能描述一下代表 Git 存储库的数学结构 那就太好了 例如 它是一个有向无环图 它的节点代表提交 它的节点有代表分支等的标签 每个节点最多一个标签 没有标签使用两次 我知道这个描述不正确 我只是想解释我正在寻找的内
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • GIT:以下未跟踪的工作树文件将被签出覆盖

    我有两个分支 一个称为 master 另一个称为 dev 我目前位于 master 分支 我想转到 dev 分支将文件移动到开发服务器 但是当我执行 git checkout dev 我收到消息 以下未跟踪的工作树文件将被覆盖 查看 pag
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t

随机推荐

  • 金融区块链基础设施(浅析)

    想知道更多更多关于区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 Optherium Labs是一家全球金融科技公司和区块链即服务提供商 是Linux Hyperledger和Crypto Valley基金会的成员 在欧盟获
  • SpringBoot使用Nacos动态配置数据源

    SpringBoot SpringCloud项目部署运行后 如果使用硬编码方式定义数据源 那么如果需要更换数据库 就只能通过更改源码并重启的方式来达成目的 而SpringCloud生态中有配置中心这一组件 我们可以将数据源连接属性编写在配置
  • centos7修改语言环境($LANG)

    文章目录 1 问题 2 系统环境 3 解决方案 1 问题 安装centos7系统时 我默认选择的是LANG zh CN UTF 8 在执行各种命令后 英文中掺杂的中文显得有点格格不入 于是我想要将语言环境改成全英文的 2 系统环境 root
  • vue(9):自定义指令

    自定义指令 除了默认设置的核心指令 v model 和 v show Vue 也允许注册自定义指令 示例 注册一个全局指令 v focus 该指令的功能是在页面加载时 元素获得焦点 div p 请输入 p div
  • Java8 Stream 之sorted方法 排序讲解

    本文主要讲解 Java 8 Stream之sorted 排序示例 使用java 8 的流式sorted排序List集合 Stream sorted 字段排序 功能说明 以自然序或着自定义Comparator 接口排序规则来排序一个流 功能详
  • Vue组件化开发

    一 组件基础 1 组件介绍 组件 是一个独立显示的视图单元 在构建大型应用时 我们通常会把可复用性强的部分 例如 头部导航 侧边栏等需要在多个页面展示的部分 提取出来 最终组合成一个完整的页面 在vue中 组件是可复用的vue实例 2 组件
  • SVG: draw text

  • 对比学习系列(二)---MoCo 系列

    MoCo 系列 文章目录 MoCo 系列 自监督 MoCo V1 前言 动量对比 Dictionary as a queue Momentum update 代理任务 Shuffling BN 实验 MoCo V2 MoCo V3 参考 自
  • Proteus 8.9原理图转换为PCB图

    Proteus 8 9原理图转换为PCB图 1 点击PCB设计图标 2 定义边界 在Board Edge图层建立矩形 此矩形内放置所有元器件 3 选用自动布局 Auto Placer 勾选所有器件 也可手动布置 没有的元器件封装可以重新选择
  • java初阶---类和对象

    一 类和类的实例化 1 类就是一类对象的统称 对象就是这一类具体化的一个实例 一个类可以实例化无数个对象 2 声明一个类就是创建一个新的数据类型 而类在java中属于引用类型 java使用关键字class来声明类 3 基本语法 创建类 cl
  • “Failed to initialize NVML

    Checking nvidia driver version with error Failed to initialize NVML GPU access blocked by the operating system 解决办法 360安
  • 最大的以1为边界的正方形--动态规划

    leetcode 1139 最大的以1为边界的正方形 题目描述 给你一个由若干 0 和 1 组成的二维网格 grid 请你找出边界全部由 1 组成的最大 正方形 子网格 并返回该子网格中的元素数量 如果不存在 则返回 0 示例1 输入 gr
  • Macbook Pro 鼠标卡顿问题

    Macbook Pro 鼠标卡顿问题 目前无解 只能改善 该问题最早能追溯到 2015年 https jingyan baidu com article ff42efa93632c5c19e220208 html 原因 据说是无线频段冲突
  • 手把手教会机器学习(一)——特征工程

    Python机器学习 一 特征工程 特征工程 特征 Feature 当建立预测模型时 用以对结构经行分析预判 且与预测对象有较大相关性的变量 特征提取 Feature Extraction 特征的提取应注意避免提取到相关含义的变量 避免提取
  • mysql基本语句:DML(数据操作语言)

    目录 DML语言 1 INSERT 添加数据语句 2 UPDATE 更新数据语句 3 SQL中的运算符 4 DELETE 删除数据语句 DML语言 DML 数据操作语言 用于操作数据库对象中所包含的数据 DML包括 INSERT 添加数据语
  • dbeaver对数据进行可视化编辑

    进入数据编辑界面 然后在操作栏上点击编辑即可看到
  • java学习路线

    Java 学习路线 Java 学习路线一条龙版 by 程序员鱼皮 建议先观看视频导读 https www bilibili com video BV1Qf4y1K7ff 大纲 路线特点 最新 完整一条龙的大厂 Java 学习路线 从入门到入
  • 遥感影像分类之SVM

    目录 一 背景简介 二 环境介绍 三 分类步骤 3 1 训练数据预处理 3 2 导入相关扩展包 3 2 读取训练数据与训练标签 3 3 确定参数g和c 3 4 使用svm训练模型 3 5 使用模型进行分类 四 分类结果显示与保存 4 1 结
  • Thread类创建线程

    目录 1 在java中执行多线程编辑 1 1通过Thread类创建线程 1 2创建线程方法2 1 3创建线程方法3 1 4创建线程方法4 1 5创建线程方法5 2 多线程执行效率 2 1两个变量同时自增 3 Thread常见构造方法和属性
  • Git(三):暂存区处理与分支

    5 Git 操作 5 1 隐藏 Stash 在 Git 中 隐藏操作将能够修改跟踪文件 阶段更改 并将其保存在一系列未完成的更改中 并可以随时重新应用 当更改了文件的内容后 通过 git status 对跟踪文件进行检查 现在 要切换分支以