目录
-
- 版本回退
-
- 前期测试样例准备
- [git reset --soft 不撤销add,撤销commit,保留修改](#git reset --soft 不撤销add,撤销commit,保留修改)
- [git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改](#git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改)
- [git reset --hard 撤销add,撤销commit,不保存修改](#git reset --hard 撤销add,撤销commit,不保存修改)
- [git reset --merge 取消合并](#git reset --merge 取消合并)
- [git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed](#git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed)
- 总结
欢迎关注 『发现你走远了』 博客,持续更新中
欢迎关注 『发现你走远了』 博客,持续更新中
版本回退
自从通过ide插件去实现之后 git命令统统忘光了~
但是面试要求会考`还是记录一下吧~
前期测试样例准备
我们修改了txt的内容并进行一次提交
html
git add .
git commit
然后再次修改txt
可以发现此时因为没有add,出现了被追踪但是没有提交的文件红色警告
html
git status
查看提交历史看到确实增加了提交历史总共有3次,第一次是一开始时候的默认提交,第二次提交的哈希值100c6c8ce803b4067f65f7fb13a2723ee30db16c
html
git log
git reset --soft 不撤销add,撤销commit,保留修改
保留工作目录和暂存区的修改,将 HEAD 指向指定的提交,相当于取消提交并将更改放回暂存区。(撤销了commit,但是没有撤销add,此时你可以直接commit提交)
根据哈希值还原到第二次的提交文件,这里的commit是哈希值,因为我们这从第3次提交回退到第2次提交,是回退到上一个版本,所以可以HEAD^1代表哈希值
html
git reset --soft <commit>
git reset --soft 100c6c8ce803b4067f65f7fb13a2723ee30db16c
git reset --soft HEAD^1
可以看到此时的txt内容不变仍然是我们提交之前的,但是git log会发现第三次提交没了.
也就是说,你回到了你第三次提交之前,回退了add和commit的命令
- 将当前分支的 HEAD 指针移动到指定的提交(commit)100c6c8ce803b4067f65f7fb13a2723ee30db16c,这意味着当前分支会回退到这个提交之前的状态。
- 保留之后的更改在暂存区中,这意味着之后的更改不会被取消暂存。
- 保留工作目录中的修改,这意味着工作目录中的文件不会被改变。
git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改
默认行为,保留工作目录的修改,但不会保留暂存区的修改,将 HEAD 指向指定的提交,相当于取消提交并将更改放回工作目录。(撤销了add和commit,下次提交你需要add后才能commit)
html
git reset --mixed <commit>
或
git reset <commit>
git reset --mixed HEAD^1
git reset --hard 撤销add,撤销commit,不保存修改
重设 HEAD 到指定提交,并丢弃工作目录和暂存区中的所有修改,慎用,会永久丢失未提交的修改。
(回退add回退commit并且回到上次刚刚提交后的状态,放弃了所有修改,慎用)
html
git reset --hard <commit>
git reset --merge 取消合并
html
git reset --merge <commit>
用于取消一个合并,并将 HEAD 指向合并前的状态。
git reset --merge 的作用包括:
- 将当前分支指向合并之前的状态,撤销合并操作。
- 保留工作目录和暂存区的文件状态,让你可以重新处理合并,解决冲突或者进行其他操作。
git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed
类似于 --hard,但会保留未提交的本地修改。
当使用 git reset --keep 命令时,版本库会回退到指定的提交,同时清空暂存区,并且会根据情况保留或重置工作目录中的文件状态。
第一种情况
如果工作区中的文件在当前版本和回退版本之间没有发生过变动,那么工作区的修改将被保留,不会受影响。
html
git reset --keep <commit>
git reset --keep HEAD^1
可以发现此时的版本回退了,但是文件内容改为了原来的,git log后发现第三次提交没有了,并且可以直接commit无需add
第二种情况发生了合并冲突
如果工作区中的文件在当前版本和回退版本之间有发生过变动,并且工作区也进行了修改,那么需要手动合并这些变动或解决可能出现的冲突。
在我们执行keep之前先修改了txt的内容,就会有如下报错,提示合并冲突
总结
大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2022 mzh
Crated:2022-2-1
欢迎关注 『发现你走远了』 博客,持续更新中
欢迎关注 『发现你走远了』 博客,持续更新中