Git--------reset、revert以及rm命令(主要是撤销回滚版本)

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次
的提交(commit)保持一致,工作区文件内容保持不变。

soft是撤销commit的提交,但工作区未提交的更改还是保留,也就是把commit撤销了,git add还是存在的;mixed是撤销暂存区的提交,工作区的更改同样也保留。而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了

有好几种的形式进行回退,就是后面[HEAD]这块不太一样:

1.git reset --mixed commitID    //commitID在git log中查询

2.git reset --mixed HEAD~  #撤回到最新的一次commit
git reset --mixed HEAD~~   #撤回到前两次commit
git reset --mixed HEAD~~~  #撤回到前三次commit, 依次类推


3. git reset --mixed HEAD~1 
git reset --mixed HEAD~2 
git reset --mixed HEAD~3 

git reset还有个重要功能是撤销它能撤销我们git add中的文件,这个有点重要,可以记一记。

例子:

git add .       //将工作区中的所有内容加到暂存区
git reset xxx.txt  //将xxx.txt移出暂存区

Git--------reset、revert以及rm命令(主要是撤销回滚版本)_第1张图片
基本流程就是:

git add .
git commit -m “xxx”

以上图为例,假设我在commit3的位置,XXX为commit1的commit id(git log就会出来commit id号)的话,下面三种方式对commit的撤销结果分别为:

  1. git reset --mixed
    git reset XXX (git reset --mixed XXX) //–mixed是git reset的默认参数
    执行上面的命令后,分支所处的位置为commit1,此时的代码与commit3的代码相同,但是commit1之后的代码处于未进行git add的状态.

  2. git reset --soft
    git reset --soft XXX
    执行上面的命令后,分支所处的位置为commit1,此时的代码与commit3的代码相同,但是commit1之后的代码处于已经进行了git add的状态.

  3. git reset --hard
    git reset --hard XXX
    执行上面的命令后,分支所处的位置为commit1,且commit1之后的代码会丢失.

注意:以上操作你是在本地上回退的,也就是说当你add、commit之后发现要删除别的文件,就可以在这样做(自己尝试回退后再push,是没有用的,push不上去的,必须强制push,也就是加 -f )
因为本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

如下:
Git--------reset、revert以及rm命令(主要是撤销回滚版本)_第2张图片

Git--------reset、revert以及rm命令(主要是撤销回滚版本)_第3张图片

这个就是直接push是不行的,得强制 -f 才可以。
Git--------reset、revert以及rm命令(主要是撤销回滚版本)_第4张图片


git revert

区别:

  1. git reset是直接删除指定的commit,把HEAD向后移动了一下

  2. git revert是一次新的特殊的commit,HEAD继续前进,作为一次最新的提交,本质和普通add commit一样,仅仅是commit内容很特殊:提交的内容是与前面普通commit文本变化的反操作。比如前面普通commit是增加一行a,那么revert内容就是删除一行a

    • git revert HEAD 撤销前一次 commit

    • git revert HEAD^ 撤销前前一次 commit

    • git revert commitid 撤销指定的版本,撤销也会作为一次提交进行保存。

最后直接 git push origin 本地分支 :远端分支,因为当你git revert自动回跳到一个编辑器,这个就是要你写一些信息(就是commit -m "…"的作用)

git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容

git-revert - 反做版本库中已经存在的提交记录,默认情况下反做某条记录后会产生一条新的记录。
git revert -n       通过-n参数可以避免再次产生一条提交记录
git revert -m      通过-m指定回滚的父节点(当回滚记录是由两分支merge产生)
git revert --continue    cherry-pick 或者revert因为冲突失败后,解决了冲突继续提交
git revert --quit          清除git revert 操作进度,在cherry-pick 或者revert因为冲突失败可以清除状态

记住默认的就行   git  revert  commitid即可,够用了

别人写的,还不错,请查阅!

另外一篇


删除远端文件,使用 git rm 命令步骤:
git  rm -rf 文件名
git commit -m "xxx"
git push origin 本地分支名:远端分支名

1. git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除;
2. git rm -rf  "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)

假如你有文件不小心commit到了服务器那么你想要删除它,可以使用:
git rm -- cached "路径+文件名"
不需要再git add
接下来:git commit -m "delete file"
最后:git push ....


git rm -rf  "文件路径"     //这样的话直接本地也删除了,远程也删除了

你可能感兴趣的:(Git,git,github)