git代码写错分支恢复
起因:同事拉分支时是从dev拉的(原本应该从master),后续写的代码都在新分支上,也提交了,也推远程分支了。
分析:
由于远程也有代码,也不需要去做备份工作了,可以尽情的试错。可以试着用代码的回滚、暂存、切换分支、提取暂存代码、解决冲突(如果有)、提交代码…
git reset有三种模式: –soft –mixed –hard
git reset –soft commitId
//commitId 就是git log 查看到的 commit编号(SHA-1)
将HEAD引用指向给定提交(commitId)位置,索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有的版本状态改动是最小的。
git reset –mixed commitId
reset的默认模式,将HEAD引用指向给定的commitId,注意:这时候索引(暂存区)内容也变了,工作目录内容不变。这个命令也就是所把commitId之后提交的状态都去掉了,文件还在,commitId之后有哪些修改都会保留,并且可以通过git status查看。
git reset –hard commitId
将HEAD引用指向给定的commitId,同时,索引(暂存区)内容和工作目录内容(文件)都会变成这个commitId对应的内容。也就是说给定的commitId之后的所有修改(文件)都会丢失。这个命令会用在发版时现在定位到指定commitId(清除commitId之后文件),然后合并分支,然后发版。类似的情况都可以用。
图表表示:
方式 | 影响范围 |
---|---|
soft | HEAD |
mixed | HEAD,Index/Cache |
hard | HEAD,Index/Cache, working Tree |
除了reset –hard外 都可以用于本次操作。
当把代码reset后,就可以按照:暂存,切分支,取暂存,合并了
过程: 1.恢复到修改前的commitId,可以通过git log 查看,我是用sourceTree直接就找到commitId了
git reset d3b0972165dd522d79ac52cc3ac8842b8b6c53b1 Unstaged changes after reset: M pom.xml M …..其他的修改文件
可以通过git status再看下 git status
通过git stash 把暂存区的文件 存储起来 git stash
切换分支 git chechout feature/XXX
恢复 git stash pop