git版本回退操作
本文 git 相关命令:
- git reset:回退版本,可指定某一次提交的版本。git reset [–soft | --mixed | --hard] commitId。( 本次回退只是回退到指定版本 , 重新拉取后原有版本还在 , 选择合并想要的即可 )
- git revert:回退到某一次提交,做反向操作,生成新的commitId,原有提交记录保留。git revert commitId。 [ 例子: git revert 59ca9411941e712becd080f586000c57abcdcf9f ]
- git status:查看文件在工作区和暂存区的状态。
- git log:查看代码提交记录。
- git cherry-pick:选择commitId 应用在当前分支。git cherry-pick commitId。( // 在当前分支 将其他分支某次提交合并过来 ) [ 例子 git cherry-pick bd4eff1b9aff2135eb82a3f1360423b6d95386a4 ]
回退分两种情况:
已 commit,未push到远程仓库。
已 commit,并且push到了远程仓库。
已 commit,未push到远程仓库
git reset --soft(撤销commit)[ 例子 git reset --soft 68f215156d248cfdb7874840591b99ec3ee9efbe ] 撤销到指定的commit
git reset --mixed(撤销 commit 和 add 两个动作)
[ 此时可以看到,git reset --mixed 撤销的文件 未加入到暂存区,所以是撤销 commit 和 add 两个动作 ]
已 commit,并且push到了远程仓库的情况
- git reset --hard(撤销并舍弃版本号之后的提交记录)
例子
git reset --hard 0d17704f5c88dd301bf87559c80954dc44f5410c
[可以看到在此之前的提交都没了 , 但你可以发现 **还可以拉取** , 之前的都回来了 ]
警告 !!! 若指定到当前分支 请勿强制推送 否则之前的提交都没了 [ 慎用 git push -f ]
当然,如果不小心用了 git reset --hard 操作回退了,那么可用git reflog命令查看命令历史,找到被删除的commit,再次操作。
- git revert(撤销,但是保留了提交记录)
通过 git revert 版本号,撤销当前提交记录。版本号为要撤销的版本号,此处为当前提交的版本号。
可以看到本地和远程仓库文件都被撤销了。但是git log中能看到提交和撤销记录。
推荐用这种方式回退远程的代码。比如我们在master分支提交错了文件需要回退,那么我们用这个方式回退后,再用git cherry-pick commitId 重放该提交。最后本地修改了再push到远程。
总结
回退分两种情况:
1.已 commit,未push到远程仓库。
git reset --soft(撤销commit)。
git reset --mixed(撤销 commit 和 add 两个动作)。
2.已 commit,并且push到了远程仓库。
git reset --hard(撤销并舍弃版本号之后的提交记录)。
git revert(撤销,但是保留了提交记录)。