git放弃修改、回滚,撤销代码等操作,reset ,revert
前言
使用git中不免会遇到回滚代码,要放弃刚刚的修改等操作,首先需要弄明白git中工作区、暂存区、版本库的关系,如果已经很明白的话可以跳过这里
工作区就是我们工作的目录中所有代码代表的区域
暂存区为我们工作目录中的 .git 目录中有一个索引文件,这个文件代表暂存区,也就是暂时保存到这里
版本库为我们最终的代码提交的地方
我们提交代码时会经过这三个地方,工作区修改,然后提交到暂存区,最后提交到代码库,对应的操作分别是
git status 查看当前工作区有状态,下面是有文件修改时的状态,显示红色
git add . 把工作区的变动/修改提交到暂存区,根据.gitignore文件规则提交文件,新建的文件,untracked file也会被提交
git add -u 仅提交tracked file,它是 git add -update的简写
git commit -m '提交备注' 最后提交到版本库
git push origin 如果有远程仓库的话,再经过这一步提交到远程仓库
放弃工作区修改
本地修改啦一部分代码,没有提交到暂存区(git add)则可以直接使用下面命令恢复代码状态,注意恢复后你的修改将再来找不回来
git checkout .
放弃暂存区修改
还原已经提交到暂存区的代码,此操作后不会丢失暂存区的修改,只是还原git add这个操作,把修改的代码状态从暂存区取出来
git reset HEAD test.txt
如果确实不想要这部分修改,就使用上面的命令 git checkout .还原代码修改
放弃版本库的修改
reset
请注意,这种方法会丢失你还原点之后的提交信息,并且push到远程的时候需要强制提交
先看下提交日志
回到上一次 commit 的状态,如果是window下面执行后面的 "HEAD^" 加上引号,不然会提示你 more?
git reset —hard HEAD^
执行后结果为下面
也可以指定提交id
git reset —hard a1153f069dbbb171749f8cb958e73d207642a614
revert
此方法为还原提交链中的某一次提交,并把还原操作生成最新的一次提交,比如你提交啦1 2 3 4 5 6 提交啦6次,现在要还原第3次的变动,此方法可以单独把第三次的提交还原并且生成第7次也就是最新的一次提交来记录这个操作
如下还原第3个提交,如果有想还原多个提交的话可以使用一个区间如:423a883499..aaaaaaaa 这个区间是个前开后闭区间,也就是说不包含前面但包含后面的版本。
里面的参数 --no-commit 可以简写为 -n 意思是放到暂存区就可以啦先不要提交
git revert --no-commit 423a883499e07c441e167cca33ebfa2a81744239
因为我都是在一个文件中操作的,所以提交有冲突,需要解决下冲突然后再提交,如果没有冲突的话就直接放暂存区等你手动提交啦
我们查看下执行还原后的仓库提交日志
提交日志还是原样,没有变动,但是工作区已经发生改变啦,工作区内把第三次提交的代码反向操作啦一次,解决冲突然后提交就ok
git add . git commit -m