赞
踩
工作区、暂存区、本地仓库、远程仓库,之间的联系
在日常git工作流中,经常涉及到回退暂存区、回退工作区等撤销操作。
有三个名称相似的命令:git reset,git restore和git revert。
通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
注:这种只对本地分支有效,对远程分支无效。
如下所示,我们通过git reset HEAD~1命令回退分支记录
结论:
本地git add 之后,git commit了,但需要撤销本次commit动作
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意, 仅仅是撤回commit操作,您写的代码仍然保留。
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
–mixed
不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
git rebase -i HEAD~5
这个时候,远程分支高于本地分支版本:
git push origin branch --force
——————————————————————————————
如下图所示,我们通过git revert HEAD命令进行撤销
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
结论: 在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。
revert 之后就可以把你的更改推送到远程仓库与别人分享。
以上介绍了reset 和 revert之后,下边看下二者的区别
git revert 和 git reset的区别
——————————————————————————————————
(1)先用git status看一下状态
(2)打开a.c添加点内容(原本内容是aaa)
(3)再用git status看一下状态
此时a.c的状态是刚刚更改过,但是还没有用git add指令添加到暂存区中,也就是说a.c目前处于工作区下。
(4)使用git restore,也就是:
git restore a.c
(5)用git status看一下状态
(6)最后看一下a.c中的内容
结论:
git restore指令使得在工作空间但是不在暂存区的文件撤销更改(内容恢复到没修改之前的状态)
等同于git checkout file 一样的效果,将工作区修改的文件内容回撤掉
使用git add a.c 之后,add到暂存区,使用git restore --staged之后,文件修改的内容并没有改变。
结论:
git restore --staged的作用是将暂存区的文件从暂存区撤出,但不会更改文件的内容,即本地工作区中文件被修改内容还在。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。