• git命令行学习二


    git命令行练习地址:git练习地址

    撤销变更

    1.Git reset(直接退回到指定提交)

    git reset 通过把分支记录回退几个提交记录来实现撤销改动
    回退到上一个提交,当前提交的更改放到工作区(未跟踪)
    reset回退之后,当前记录后面的提交会不见

    //git reset既可以回退版本,也可以把暂存区的修改回退到工作区
    git reset HEAD file//可以把暂存区的修改(已经commit)撤销掉(unstage),重新放回工作区
    //HEAD时,表示当前版本,最新的提交
    git checkout -- file//丢弃工作区的修改,让这个文件回到最近一次git commit或git add时的状态
    //回退到当前版本的上一个版本
    git reset --hard HEAD^
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    变更前:
    在这里插入图片描述
    变更后:执行git reset HEAD^(HEAD~1)
    在这里插入图片描述
    本地仓库没有发现C2的存在(这个提交没有在本地仓库内,未提交状态)

    2.Git revert(产生新的提交,是指定退回的提交的副本)

    当前的提交记录还存在,新增了一条提交记录,新增的这条提交记录与需要退回的提交记录(上上条提交记录)一样
    变更前:
    在这里插入图片描述
    变更后:执行:git revert HEAD
    在这里插入图片描述
    在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。

    //命令行执行时,需要:q来退出继续执行
    
    • 1

    练习:
    在这里插入图片描述
    执行

    //处理local分支
    git reset HEAD^(HEAD~1)
    //切换到pushed分支
    git checkout pushed
    //撤销更改
    git revert HEAD
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    整理提交记录

    Git Cherry-pick

    将一些(多个,可位于不同分支)提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了
    merge和rebase是将两个分支合在一起,Cherry-pick是将多个(两个及以上)提交复制到当前位置(分支)
    注意: cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。

    处理多个提交时,有遇到冲突的会中断复制操作,处理好冲突后,若还有提交未处理的,使用git cherry-pick --continue命令继续
    在这里插入图片描述

    变更前:
    在这里插入图片描述
    变更后:执行git cherry-pick C2 C4
    在这里插入图片描述
    练习:
    在这里插入图片描述
    执行:

    //将多个提交复制到master分支上
    git cherry-pick C3 C4 C7
    
    • 1
    • 2

    交互式的 rebase

    交互式的 rebase:指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i。Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
    git rebase --abort:去掉变基

    执行前:
    在这里插入图片描述
    命令:git rebase -i HEAD~4
    调整提交顺序
    执行后:
    在这里插入图片描述

    例子练习:
    在这里插入图片描述

    //将切换bugFix分支切换到C1提交记录
    git branch -f bugFix C1
    //复制C4提交记录,并将当前bugFix指向新生成的C4`
    git cherry-pick C4
    //将master指向bugFix(C4`)提交记录
    git branch -f master bugFix
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例子2:
    在这里插入图片描述

    //使用rebase -i将C2和C3的顺序交换,生成C3`和C2`
    git rebase -i HEAD~2
    //提交新的基于C3`的记录C``,
    git commit --amend
    //将C2``和C3`的顺序交换,生成C2```和C3``
    git rebase -i HEAD~2
    //再将master分支指向C3``提交(与caption同指向)
    git branch -f master caption
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    例子3:
    在这里插入图片描述
    命令:

    //切换到master分支(指向C1)
    git checkout master
    //复制C2到当前分支,生成C2`
    git cherry-pick C2
    //再将master退回到C1提交记录
    git branch -f master C1
    //再将C2 C3复制到当前分支(master)生成c2`` c3`
    git cherry-pick C2 C3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    C++、c语法基础【1】
    心理学考研难度 分析
    `算法知识` 二进制操作, 与&, 或|, 异或^
    Jmeter常用断言之断言持续时间简介
    轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
    Charles使用教程
    工大智信智能听诊器:科技创新,赋能医疗
    操作系统学习笔记1 | 初识操作系统
    Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘
    Mobile-ViT (MobileViT)网络讲解
  • 原文地址:https://blog.csdn.net/h_jQuery/article/details/126359546