码迷,mamicode.com
首页 > 其他好文 > 详细

Git命令之回退篇 git revert git reset

时间:2019-04-29 20:45:19      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:checkout   撤销   场景   add   commit   eset   默认   简单   ever   

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 HEAD@{xxx}

Git命令之回退篇 git revert git reset

标签:checkout   撤销   场景   add   commit   eset   默认   简单   ever   

原文地址:https://www.cnblogs.com/taylorluo/p/10792498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!