Git命令之回退篇 git revert git reset

Posted taylorluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git命令之回退篇 git revert git reset相关的知识,希望对你有一定的参考价值。

Git command之回退篇

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

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

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

WorkingCopy: 当前修改等操作所在区域,没有 git add 和 git commit 操作

git reset HEAD --file (单个文件)

可与git checkout --file配合

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

git reset --hard HEAD

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

git reset --hard 目标版本号

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

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

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

这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了。makes everything match the commit you have reset to.你的所有本地修改将丢失。如果我们希望彻底丢掉本地修改但是又不希望更改branch所指向的commit,则执行git reset --hard = git reset --hard HEAD.
i.e. don‘t change the branch but get rid of all local changes.另外一个场景是简单地移动branch从一个到另一个commit而保持index/work区域同步。这将确实令你丢失你的工作,因为它将修改你的work tree!

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指针跳到目标版本,但将跳过的版本丢弃掉了。

  2. use ‘git commit -m "the name of the new release" ‘ to commit

? use ‘git push‘ to push

git commit --amend

  1. 改写commit,包括改写提交的文件和追加文件到提交中。

  2. 还可以对这种改写回退,用git reflog得到相应的版本号,然后git reset --soft [email protected]{xxx}

以上是关于Git命令之回退篇 git revert git reset的主要内容,如果未能解决你的问题,请参考以下文章

Git reset 和 revert 版本回退示例实践

Git reset 和 revert 版本回退示例实践

Git reset 和 revert 版本回退示例实践

git基础教程(17)回退提交push到远端的提交--git revert 详解

版本回退 git reset/revert 选择区别

版本回退 git reset/revert 选择区别