用一个例子讲讲git reset的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nrsc272420199/article/details/87378194

1.本地分支如何操作可以不让下面的分支出现分叉

  • 现有分支情况
    在这里插入图片描述
  • 本地分支操作后的理想情况
    在这里插入图片描述

2.介绍一下git reset

2.1 撤销commit

在这里插入图片描述
   如上图,假如现在我在commit4的位置,XXX为commit2的commit id的话,下面三种方式对commit的撤销结果分别为:

2.1.1

git reset --mixed XXX  等价于 git reset XXX   也就是说--mixed是git reset的默认参数

   执行上面的命令后,分支所处的位置为commit2,此时的代码与commit4的代码相同,但是commit2之后的代码处于未进行git add的状态.

2.1.2

git reset --soft XXX

   执行上面的命令后,分支所处的位置为commit2,此时的代码与commit4的代码相同,但是commit2之后的代码处于已经进行了git add的状态. mixed和soft的区别就在这里.

2.1.3

git reset --hard XXX

   执行上面的命令后,分支所处的位置为commit2,且commit2之后的代码会丢失.也就是相当于直接回到了commit2,之后的操作都会丢失(比较危险)-----但是如果知道commit4的commit id可以恢复.

一点说明

  • 上面的XXX可以有三种形式,这里以 git reset --mixed XXX为例来讲解
    • 形式1: git reset --mixed commitID

    • 形式2:

      • git reset --mixed HEAD~ #撤回到上次commit
      • git reset --mixed HEAD~~ #撤回到上上次commit
      • git reset --mixed HEAD~~~ #撤回到上上次commit, 依次类推
    • 形式3:

      • git reset --mixed HEAD~1 #撤回到上次commit
      • git reset --mixed HEAD~2 #撤回到上上次commit
      • git reset --mixed HEAD~3 #撤回到上上上次commit, 依次类推

2.2 额外补充—撤销git add

   git reset 还有一个功能就是撤销不小心git add到暂存区里的内容,比如说你执行了下面的代码:

git add . #将工作区中的所有内容加到暂存区

突然发现里面有一个文件xxx.java你是不需要放到暂存区的,就可以直接使用下面的命令,将其移出暂存区,也就是撤销git add

git reset xxx.java  #将xxx.java移出暂存区

3. 开篇问题的解决

   明白了上面的原理的话,解决方式就比较多了,我这里给一个答案,仅供大家参考:

 git log --oneline --graph  #查看历史commit id,并找到commit1'之前的那个commit id
 git reset --soft commit1'之前的commit id
 git stash #将已经开发的代码放到一个临时区
 git pull #拉取远程代码
 git stash pop #将已开发代码从临时区拿出来 并 与远程代码进行冲突解决
 git add 需要加入到暂存区的文件
 git commit -m "注释"
 git push

4. 反思

   写完今天的博客突然想到要是先介绍git reset,当时介绍git mergegit rebase的博客就会换一种姿势写了::>_<::

最后一个小甜点,如果不小心注释写错了咋办???
请试试

git commit --amend

猜你喜欢

转载自blog.csdn.net/nrsc272420199/article/details/87378194