目录
checkout 项目回滚
reset 项目重置
反重置
revert 项目恢复
1、开发中会出现对一些文件内容修改后,觉得并不满意、或者不小心改错了文件等情况,这个时候除了用 Ctrl + Z 撤销文件,还可以使用 "git checkout -- fileName" 命令轻松的将内容回滚到之前的状态。
2、注意:使用了 "git add" 添加到了暂存区的文件无法再回滚 (checkout)。
修改的文件内容只有在 add 提交到暂存区之前可以进行回滚,add 之后,无法再 checkout。
新增的文件、删除的文件无法 checkout(回滚)。
git reset 的作用是修改 HEAD 的位置,将 HEAD 指向的位置改变为之前存在的某个版本(commit )。
如果想恢复到之前某个提交 (commit) 的版本,且那个版本之后提交的版本不需要了,则可以用这种方法。
1、"git reset" 命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。
2、回滚(checkout)针对小事件,少量的文件是很方便的,但如果开发中大面积的文件内容被修改后,发现功能出现了严重的问题,或者需求发生了改变等等,此时用回滚已经显得力不从心了,此时可直接重置。
3、对于修改的内容如果做了"git add"操作,将文件放入到了暂存区,那么"git checkout -- fileName"也无能为力,此时也需要重置
git reset --soft |
只改变提交点,暂存区和工作目录的内容都不改变。 |
git reset --mixed |
改变提交点,同时改变暂存区的内容 |
git reset --hard |
改变提交点,同时修改暂存区、工作目录的内容。常用方式 |
4、上面 git reset --hard 后面没有加版本号时,默认重置到上一个版本(commit),如下所示,可以使用 git log 命令查询所有提交的(commit)版本,然后可以选择自己需要版本进行重置回去。
1、git log 可以查看到所有 commit (提交)过的版本信息(时间、版本号、作者等),其中 HEAD -> master 表示当前的版本号。
2、git reset -hard
以后,可以看到直接重置到目标版本处,后面的版本已经不存在了 3、除了在本地使用 git log 命令查看所有版本号以外,还可以在 github 仓库主页的 commit 菜单下看到 push 来的 commit 的版本号。
5、git push 推送到远程仓库的时候需要注意,如果回退的版本之前还没有 push 到远程仓库,则重置之后可以直接 push,否则如果回退的版本已经 push 到远程仓库,则此时需要使用 git push -f 进行强行推送,git push 会报错。
$ git push
To https://github.com/wangmaoxiong/h2Smil.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/wangmaoxiong/h2Smil.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Administrator@SC-201706302213 MINGW64 /f/gitWorkSpace/h2Smil (master)
$ git push -f
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/wangmaoxiong/h2Smil.git
+ 11ebdbe...f207132 master -> master (forced update)
Administrator@SC-201706302213 MINGW64 /f/gitWorkSpace/h2Smil (master)
1、提交历史比如 a -> b -> c -d,因为某些原因使用 git reset 回滚到了版本 b,做了一些修改(或者没做修改)后发现不应该重置,现在又想要回到之前的 d 版本。
2、理论上 git reset 只要知道目标版本号,则可以重置到任意时刻。此时 git log 只能看到 a 与 b 的版本号信息,c、d 看不到了,应该使用 git reflog 进行查看。
3、git log 查看的日志限于当前存在的提交历史,git reflog 可以查看本地所做的任意提交历史,包括已经被删除的。
1、git revert 是通过创建一个新的版本,且内容与回退的目标版本一致,但是 HEAD 指针是指向这个新生成的版本,而不是目标版本。
如果想恢复之前的某一版本(该版本不是merge(合并)类型),但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,可以使用这种方法。
可以参考 https://blog.csdn.net/yxlshk/article/details/79944535