SSF0SSF0
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
  • Bash

    • Bash 获取路径在不同类型电脑的区别
  • Git

    • Git 使用 ssh 与 https 的区别
    • Git 回滚、重置与变基
    • 文件名大小写发生变化的坑
    • Git 提交信息规范解读与实践指南
    • Git 历史邮箱统一 + 推送 GitHub 后的远程分支处理指南
  • Docker

    • Docker 命令大全
    • nginx 镜像部署静态文件
    • Docker 运行命令说明
    • 使用 node 镜像运行本地项目
    • 挂载和卷的区别
    • Docker 打包多平台镜像
    • Docker 使用 mysql
    • Docker 容器网络访问问题总结
  • VuePress

    • 使用 VuePress 搭建个人博客概括
  • CI/CD

    • blog 使用 Github-Actions 部署 docker 服务器
  • 服务器

    • 腾讯云使用 ssh 连接服务器(Linux 实例)
    • ssl 证书安装到 docker 服务器
    • 操作系统与架构
    • ssh 连接时长问题
  • 掌握 hosts 文件:本地开发、域名重定向与回调处理完全指南
  • Cloudflare DNS与代理:完全指南

Git 回滚、重置与变基

回滚

提交回滚(Revert) 提交回滚会创建一个新的提交,这个提交的作用是撤销指定的提交。它不会改变已有的提交历史,因此在公共分支上使用是安全的。

示例 假设你的提交历史如下:

A---B---C---D---E main

你想回滚提交 D 和 E。

  1. 查看提交历史:

    git log

    找到你要回滚的提交。

  2. 回滚最近的两个提交:

    git revert HEAD~1
    git revert HEAD~1

    这会创建两个新的提交 R1 和 R2,分别撤销 E 和 D。提交历史变为:

    A---B---C---D---E---R1---R2 main

重置

重置(Reset) 重置操作会直接改变提交历史,可以删除或移动提交。重置操作有三种模式:--soft、--mixed 和 --hard。

  • soft:只移动 HEAD 指针,保留工作目录和暂存区的更改。
  • mixed(默认):移动 HEAD 指针并重置暂存区,保留工作目录的更改。
  • hard:移动 HEAD 指针并重置暂存区和工作目录的更改。

示例 假设你的提交历史如下:

A---B---C---D---E main

你想重置到提交 C。

  1. 查看提交历史:

    git log

    找到提交 C 的哈希值。

  2. 重置到提交 C:

    git reset --hard <commit_hash_of_C>

    这会将 main 分支重置到提交 C,提交历史变为:

    A---B---C main

    提交 D 和 E 以及它们的更改将被丢弃。

回滚和重置的区别

  • 提交回滚:

    • 创建新的提交来撤销指定的提交。
    • 不改变已有的提交历史。
    • 安全用于公共分支。
  • 重置:

    • 直接改变提交历史,可以删除或移动提交。
    • 有三种模式(--soft、--mixed、--hard),影响工作目录和暂存区。
    • 不适用于已经推送到远程仓库的公共分支,因为会重写历史,可能导致其他开发者的提交失效。
  • 选择适用场景

    • 公共分支:使用提交回滚,因为它不会改变提交历史,对其他开发者的工作没有影响。
    • 本地分支:可以使用重置,特别是在你需要清理提交历史或撤销一系列提交时。

变基

变基(Rebase)是 Git 中的一种操作,用于将一个分支的变化移动到另一个基点之上。变基的主要目的是保持历史记录的整洁和线性,避免因为合并(merge)操作而产生的多余分支和合并提交。

变基的用途

  1. 保持历史记录的线性:

    变基可以将分支的提交历史重新应用到另一个基点,使得提交历史看起来更加线性和整洁。例如,当你在一个分支上开发新功能时,可以使用变基将这个分支的提交应用到最新的主分支之上。

  2. 解决冲突: 在变基过程中,可以逐个提交地解决冲突,而不是在一次合并中解决所有冲突。这有助于更细粒度地处理冲突。

变基的基本用法

假设你有一个分支 feature,你想将它的提交变基到 main 分支的最新提交之上。可以按照以下步骤操作:

  1. 切换到 feature 分支:

    git checkout feature
  2. 执行变基操作:

    git rebase main

    这会将 feature 分支上的提交重新应用到 main 分支的最新提交之上。

变基的示例

假设你的提交历史如下:

A---B---C main
    \
      D---E feature

执行 git rebase main 后,历史会变成:

A---B---C main
            \
            D'---E' feature

处理冲突

在变基过程中,如果遇到冲突,Git 会暂停变基并提示你解决冲突。你需要手动解决冲突,然后继续变基:

  1. 解决冲突并标记为已解决:

    git add <冲突文件>
  2. 继续变基:

    git rebase --continue

如果你想中止变基,可以使用以下命令:

git rebase --abort

变基 vs 合并

  • 变基:将一个分支的提交移动到另一个基点之上,保持历史记录的线性。
  • 合并:将两个分支的提交合并在一起,保留两者的历史记录,可能会产生合并提交。

注意事项

  • 避免在公共分支上变基:因为变基会重写提交历史,如果其他人已经基于这些提交进行开发,变基会导致他们的提交失效。因此,变基通常用于本地分支或未共享的分支。
  • 安全的变基:对于公共分支,使用 git merge 更安全,因为它不会重写提交历史。 通过变基,你可以保持提交历史的整洁和线性,使得代码库更易于理解和维护。
最后更新时间:
贡献者: 何风顺
上一页
Git 使用 ssh 与 https 的区别
下一页
文件名大小写发生变化的坑