zoukankan      html  css  js  c++  java
  • Git命令之回退篇 git revert git reset

    Git command之回退篇

    欲练回退 必先了解:HEAD、index、WorkingCopy

    Working tree, staging area, and Git directory.

    HEAD: 对应local repository,指当前所在的分支版本顶端的别名,也就是最新的一次commit. git commit 之后与HEAD一致

    index: 对应staging area,指git add 之后放入该区域

    WorkingCopy: 对应working directory,指当前文件包括修改等操作所在区域,没有 git add 和 git commit 操作

    git reset HEAD --file (回退单个文件版本)

    可与git checkout --file(撤销单个文件修改)配合

    1. git reset HEAD --file:【回退版本】回退暂存区里的某个文件,还原为HEAD commit里该文件的状态,撤销从上一次commit之后所有的操作。或者说是从HEAD commit里重新拉到暂存区覆盖当前的(被add乱掉的)文件。但是working copy里没有任何变化。此时如果想丢掉working copy里的修改,执行git checkout --file.

    2. git checkout --file:【撤销修改】是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file:

      ​ ①如果上次commit之后没有将任何修改add到暂存区,则HEAD和暂存区是一致的,执行命令后也会将工作区同化为一致,看起来像是从HEAD版本库重拉了一遍到工作区。

      ​ ②但如果上次commit之后往暂存区add了修改,那么工作区只能跟暂存区一致了,也就是从暂存区拉下来覆盖到工作区。

    git reset --hard HEAD

    影响同下面介绍的<git reset --hard 目标版本号>,只是HEAD位置看起来没有变化。小技巧:上个版本用HEAD或者HEAD~1,上上个版本HEAD^或者HEAD2,上100个版本HEAD100

    git reset --hard 目标版本号

    版本号指:commit生成的hash码,可用 git log 命令查看

    该命令修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,最后需要用 git push -f 强推到远端

    --hard参数将会blow out everything.它将重置HEAD返回到另外一个commit,重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。

    这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:[git reflog](http://blog.csdn.net/ibingow/article/details/7541402)命令了。

    git reset --soft 目标版本号

    --soft参数Git重置HEAD到另外一个commit,HEAD位置改变,但index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中。

    git reset --mixed 目标版本号

    --mixed是reset的默认参数,也就是当你不指定任何参数时的参数。它将重置HEAD到另外一个commit,并且重置index以便和HEAD相匹配,但working copy不会被更改。所有该branch上从original HEAD(commit)到你重置到的那个commit之间的所有变更(未git add的操作)将作为local modifications保存在working area中,你可以接着coding,之后再进行git add, git commit.

    总结:--hard --mixed(default) --soft 分别覆盖3个、2个、1个位置的代码,--mixed(默认的参数)只会保留working copy里的代码

    git revert -n 目标版本号

    1. 与git reset不同的是,复制了一个目标版本(某个想要回退到的历史版本)加在当前分支的最前端。而git reset是HEAD指针跳到目标版本,但将跳过的版本丢弃掉了。(git log已经看不到,但git rflog还是可以看到的)
    2. use 'git commit -m "the name of the new release" ' to commit
    3. use 'git push' to push

    git commit --amend

    1. 改写commit,包括改写提交的文件和追加文件到提交中。
    2. 还可以对这种改写回退,用git reflog得到相应的版本号,然后git reset --soft HEAD@{xxx}
  • 相关阅读:
    五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据库
    UML语言中类之间关系
    hadoop的yarn资源队列
    Scala中下划线的7种用法
    《机器学习》(周志华)西瓜书读书笔记(完结)
    Pytorch DistributedDataParallel简明使用指南
    本地查看SSH远程连接服务器上的TensorBoard
    python max()用法
    实现go并发的三种方式
    docker分阶段构造nginx镜像
  • 原文地址:https://www.cnblogs.com/taylorluo/p/10792498.html
Copyright © 2011-2022 走看看