简单了解一下 git reset

1. 作用

git reset 用于在本地仓库中撤销或调整某些提交。它可以改变当前分支 HEAD 所指向的提交,还可以影响暂存区和工作区的内容。

2. 主要用法

1)soft

git reset --soft <commit>

仅重置 HEAD 到指定的 <commit>,保留暂存区和工作区的变更。撤销提交操作,但不会丢失文件改动。

应用场景:当需要把某个提交移出提交历史,但保留改动以便重新提交时使用。

2)mixed --- 这是 git reset 的默认选项。

git reset --mixed <commit>

重置 HEAD 到指定的 <commit>,同时清空暂存区,但保留工作区的变更。

应用场景:当需要撤销某些提交并重新选择哪些更改要暂存时使用。

3)hard

git reset --hard <commit>

完全重置 HEAD 到指定的 <commit>,同时清空暂存区和工作区。所有变更都被丢弃,无法恢复。

应用场景:当确定不需要某些提交或改动,并想恢复到某个特定的状态时使用。

注意⚠️:此操作不可逆,需谨慎使用。

3. 举个 🌰

下面使用一个例子来说明 --soft、--mixed 和 --hard 的区别,会更直观易懂。

假设有一个 Git 仓库,并且已经进行了以下三次提交:

git log --oneline

c5f5678 (HEAD -> main) Third commit
a1b2c3d Second commit
9e8f0g1 First commit

突然发现不应该进行最后一次提交 c5f5678,需要回退到 a1b2c3d 这个提交。

1)--soft

git reset --soft a1b2c3d

结果:HEAD 移动到 a1b2c3d,当前分支的指针回退到 Second commit。但工作区和暂存区仍然保留了 Third commit 的所有改动。

效果:

git status

On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file_modified_in_third_commit

用途:用于撤销提交但保留所有改动,准备重新提交。

2)--mixed

git reset --mixed a1b2c3d

结果:HEAD 移动到 a1b2c3d,当前分支的指针回退到 Second commit。暂存区被清空(已暂存的文件不再标记为已暂存),但工作区中仍然保留了 Third commit 的所有改动。

效果:

git status

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
    modified:   file_modified_in_third_commit

用途:用于撤销提交并清除暂存区,但保留文件改动,可以选择是否重新暂存和提交。

3)--hard

git reset --hard a1b2c3d

结果:HEAD 移动到 a1b2c3d,当前分支的指针回退到 Second commit。暂存区和工作区中的所有改动都会被丢弃,整个工作目录恢复到 Second commit 的状态。

效果:

git status

On branch main
nothing to commit, working tree clean

用途:用于彻底丢弃改动,恢复到某个特定提交的状态。注意⚠️:需要非常谨慎使用,因为这会删除所有未提交的更改,且无法恢复。

4. 总结

--soft:影响提交历史,HEAD 改变,但保留工作区和暂存区的内容。

--mixed:改变提交历史和暂存区,保留工作区内容。

--hard:改变提交历史、暂存区和工作区,丢弃所有未提交的更改。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值