文章目录
1.本地分支如何操作可以不让下面的分支出现分叉
- 现有分支情况
- 本地分支操作后的理想情况
2.介绍一下git reset
2.1 撤销commit
如上图,假如现在我在commit4的位置,XXX为commit2的commit id的话,下面三种方式对commit的撤销结果分别为:
2.1.1 git reset --mixed
git reset --mixed XXX 等价于 git reset XXX 也就是说--mixed是git reset的默认参数
执行上面的命令后,分支所处的位置为commit2,此时的代码与commit4的代码相同,但是commit2之后的代码处于未进行git add的状态.
2.1.2 git reset --soft
git reset --soft XXX
执行上面的命令后,分支所处的位置为commit2,此时的代码与commit4的代码相同,但是commit2之后的代码处于已经进行了git add的状态. mixed和soft的区别就在这里.
2.1.3 git reset --hard
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 merge和git rebase的博客就会换一种姿势写了::>_<::
最后一个小甜点,如果不小心注释写错了咋办???
请试试
git commit --amend