版本前进与回退
一,
未使用 git add 缓存代码时。
可以使用 git checkout -- filepathname (比如: git checkout --空格readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout . 命令。
此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。
二,
已经使用了 git add 缓存了代码。
可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所有的缓存可以使用 git reset HEAD . 命令。
此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。
三,
已经用 git commit 提交了代码。
可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。
回退到任意版本:git reset --hard commitId
场景:
你将一个文件使用git add命令提交到了暂存区, 之后继续在该文件上进行开发,
当你发现你在工作区的修改还不如之前git add 的状态的时候,直接放弃工作取得修改
git checkout -- filename
其实git checkout --filename会先去找缓存区有没有文件,如果有,就还原缓存区的文件,否则去找版本库的文件
变更工作区用checkout
变更暂存区用reset
git HEAD游离状态的解决办法
游离态详解https://blog.youkuaiyun.com/u011240877/article/details/76273335
核心原理:将游离状态附到一个分支上,然后与目标分支合并
# 从这个临时节点新建一个临时分支
$ git branch temp 543057a
# like 'temp = 0x7543057ac676742c9984132b7b9e71a57f98
# 切换到本地分支
$ git checkout master
# 合并临时分支到本地分支
$ git merge temp
最后推送master到远程分支就ok了
# 删除本地分支
$ git branch -d temp