reset current branch to here是git命令中的一种回滚操作。

其使用场景如下,

  • 1)提交了多次错误的提交,想回滚到之前的某次提交。
  • 2)合并了错误的分支,想回滚到合并之前。

该操作回滚到某次commit提交后,该commit提交之后提交的代码都可以再次修改重新提交。

另外,还有一种情况,边拉代码边提交代码可能导致拉取的代码一直有冲突,解决办法可以把本地代码暂存(git stash changes)起来,然后回滚到某个commit(git reset current branch to here),最后在取出暂存代码(git unstash changes),注意这里stash相当于一个栈的操作进行压栈和出栈,如果有多次stash注意取的代码是哪一次压栈。

git reset current branch to here回滚有四种模式,soft,mixed,hard,keep。一般情况下,不要轻易使用hard模式,这几种有什么区别,如何使用往下看,其中三种如下图,

  • Working Tree 当前的工作区域
  • Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
  • Repository 提交的历史,即使用git commit提交后的结果

文件从工作树存入到仓库的流程参考文末1。

git reset current branch to here的本质:是移动 HEAD 以及它所指向的 branch。几种模式的主要区别是:

  • --soft:重置位置的同时,保留working Tree工作目录index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

  • --mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

  • --hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

  • --keep:重置位置的同时,直接将 working Tree工作目录 和 repository 都重置成目标Reset节点的內容,index 暂存区 的内容保持不变。

参考链接:

1、Git Reset 三种模式hard,soft,mix - 博客 - 编程圈 (bianchengquan.com)

2、Git 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云

3、Git让你从入门到精通,看这一篇就够了! - SegmentFault 思否

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐