关于git revert 、git reset --hard 与 git reset --soft 之间的区别与作用
git revert 与 git reset
1.git revert 是生成一个新的提交来撤销某次提交,此次提交之前的 commit 都会被保留;
2.git reset 是用来将当前 branch 重置到另一个 commit 的,即是回到某次提交,提交之前的 commit 都会被保留,但是此次之后的修改都会被退回到暂存区;
3.二者都可以在当项目需要回滚时使用,只是 revert 是将之前的提交翻转后作为一次新的提交,reset commit_id 是回滚到该 commit_id 下,该 commit_id 之后的提交都会删除。
git reset --hard 与 git reset --soft
1.git reset --soft 是回退到某个版本,只回退了 commit 的信息,不会恢复到 index file 一级。如果还要提交,直接 commit 即可,即 index 和 working directory 中的内容不作任何改变,仅仅把 HEAD 指向 <commit> 。这个模式的效果是执行完毕后,自从 <commit> 以来的所有改变都会显示在 git status 的 “Changes to be committed” 中;
2.git reset --hard 是彻底回退到某个版本,本地的源码也会变为上一个版本的内容,即相当于重设 index 和 working directory ,自从 <commit> 以来在 working directory 中的任何改变都被丢弃,并把 HEAD 指向 <commit>;
3.二者都是 reset 命令参数的一种,区别是 soft 不进行暂存区和工作区的覆盖,而 hard 会将暂存区、工作区全部用指定提交版本的目录书替换掉。
以下是 git reset --hard 的 demo:
1.首先,我们通过 git log --pretty=oneline 命令知道从最近一次到以往的提交情况:
作业1任务3:原三次提交(简).jpg
2.然后,我们通过 git reset hard HEAD~1 命令回退到前一次提交:
git reset hard HEAD~1.jpg
3.通过 cat 命令,我们可以知道现在已经成功回退到前一次提交“222222”:
reset hard vim.jpg
4.通过 git reflog 命令,我们可以得知最近一次提交版本号为 6d3be6c:
git reflog.jpg 5.最后,通过 git reset --hard 6d3be6c 命令,我们可以恢复到最近一次提交: git reset --hard 6d3be6c.jpg
网友评论