(git log、git reflog),(git reset --hard、git reset --soft),(git revert,git reset )

103 阅读4分钟

Git 操作对比与区别

在 Git 中,git loggit refloggit reset --hardgit reset --softgit revertgit reset 是常用的命令,但它们的功能和使用场景有所不同。以下是它们的详细对比和区别。


1. git loggit reflog 的区别

1.1 git log

  • 功能:显示当前分支的提交历史记录。
  • 输出内容
    • 提交哈希值(commit ID)。
    • 作者信息。
    • 提交日期。
    • 提交信息。
  • 使用场景
    • 查看项目的提交历史。
    • 分析代码变更记录。
  • 示例
    git log
    

1.2 git reflog

  • 功能:显示所有分支的操作记录,包括提交、重置、合并等操作。所有记录都会记录
  • 输出内容
    • 操作哈希值(commit ID)。
    • 操作类型(如 commit、reset、checkout 等)。
    • 操作描述。
  • 使用场景
    • 查看所有操作记录,包括误操作。
    • 找回丢失的提交或分支。
  • 示例
    git reflog
    

区别总结

  • git log 只显示提交历史,而 git reflog 显示所有操作记录。
  • git log 适用于查看项目历史,git reflog 适用于找回误操作或丢失的提交。

2. git reset --hardgit reset --soft 的区别

2.1 git reset --hard

  • 功能:重置当前分支到指定提交,并丢弃工作区和暂存区的所有变更。
  • 影响范围
    • 工作区:恢复到指定提交的状态。
    • 暂存区:清空。
    • 版本库:回退到指定提交。
  • 使用场景
    • 彻底回退到某个版本,丢弃所有未提交的变更。
    • 快速恢复到稳定状态。
  • 示例
    git reset --hard HEAD^        # 回退到上一个版本
    git reset --hard <commit_id>  # 回退到指定提交
    

2.2 git reset --soft

  • 功能:重置当前分支到指定提交,但保留工作区和暂存区的变更。
  • 影响范围
    • 工作区:不变。
    • 暂存区:不变。
    • 版本库:回退到指定提交。
  • 使用场景
    • 回退到某个提交,但保留未提交的变更。
    • 重新组织提交记录。git add 1.text重新生成完整提交记录
  • 示例
    git reset --soft HEAD^        # 回退到上一个版本,保留变更
    git reset --soft <commit_id>  # 回退到指定提交,保留变更
    

区别总结

  • git reset --hard 会丢弃工作区和暂存区的变更,git reset --soft 会保留这些变更。
  • git reset --hard 适用于彻底回退,git reset --soft 适用于重新组织提交。

3. git revertgit reset 的区别

3.1 git revert

  • 功能:创建一个新的提交,撤销指定提交的变更。
  • 影响范围
    • 工作区:生成新的变更。
    • 暂存区:需要手动提交。
    • 版本库:新增一个撤销提交。
  • 使用场景
    • 撤销某个提交的变更,但保留提交历史。
    • 适合团队协作场景,避免直接修改历史记录。
  • 示例
    git revert <commit_id>  # 撤销指定提交
    

3.2 git reset

  • 功能:重置当前分支到指定提交,可选是否保留工作区和暂存区的变更。
  • 影响范围
    • 工作区:根据 --hard--soft 决定是否保留变更。
    • 暂存区:根据 --hard--soft 决定是否保留变更。
    • 版本库:回退到指定提交。
  • 使用场景
    • 回退到某个提交,可选择是否保留变更。
    • 适合个人开发场景,直接修改历史记录。
  • 示例
    git reset --hard <commit_id>  # 彻底回退到指定提交
    git reset --soft <commit_id>  # 回退到指定提交,保留变更
    

区别总结

  • git revert 通过新增提交来撤销变更,git reset 直接修改历史记录。
  • git revert 适合团队协作,git reset 适合个人开发。

4. 综合对比

命令功能描述影响范围使用场景
git log显示提交历史查看项目历史
git reflog显示所有操作记录找回误操作或丢失的提交
git reset --hard彻底回退到指定提交,丢弃所有变更工作区、暂存区、版本库彻底回退到某个版本
git reset --soft回退到指定提交,保留所有变更版本库重新组织提交记录
git revert撤销指定提交的变更,新增提交工作区、暂存区、版本库撤销提交,适合团队协作
git reset回退到指定提交,可选是否保留变更工作区、暂存区、版本库回退到某个提交,适合个人开发

5. 总结

  • 查看历史
    • 使用 git log 查看提交历史。
    • 使用 git reflog 查看所有操作记录。
  • 回退版本
    • 使用 git reset --hard 彻底回退并丢弃变更。
    • 使用 git reset --soft 回退并保留变更。
  • 撤销提交
    • 使用 git revert 撤销提交并保留历史。
    • 使用 git reset 直接修改历史记录。