git用法之[回滚代码]
我们在写代码的任何过程中,都有可能出错,任何过程都有可能要!回!滚!代!码!事关重大!一定要详细讲讲。
一、关于 工作区、暂存区、本地分支:
工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。
暂存区:已经 git add xxx 进去,且未 git commit xxx 的。
本地分支:已经git commit xxx 提交到本地分支的。
二、遇到想回滚代码时后怎么办?
1、在工作区的代码,被我写乱了,或者想重写。
git checkout -- a.txt //丢弃某个文件,或者 git checkout -- . //丢弃全部
注意:git checkout -- . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。所以,暂存很重要!
2、git add xxx 后,代码不想提交了,此时有两种情况:
a: 想回到 git add xxx 之前即可,代码需要保留。
git reset HEAD . 或者
git reset HEAD a.js
b: 压根我就不想要了。有两种办法:
1: git reset HEAD a.js 退出暂存区;git checkout -- a.js 丢弃掉
2: 太暴力,后面统一说
3、git commit -m 'xxx' 后,代码不想提交了。
代码不想提交了,意味着这次commit 的代码都不想要了,要丢弃。因为,如果你要一部分当前的代码,那你完全可以继续修改,再commit提交。
插入说明一个语法:git log 查看本地commit之后的记录。包括 服务器下载下来的、本地多次commit的、本地commit后push的;如下:
liuxuewens-MacBook-Pro:soeasy-complete-event-static liuxuewen$ git log commit 69a9c93961ab33e84437eff4d900243b05a9b0bc Author: liuxuewen <liuxuewen@souyidai.com> Date: Wed Nov 2 17:05:33 2016 +0800 修改1 commit 490d6657f1b8dffbb5cdb48d6ad823c9b5d38a38 Author: liuxuewen <liuxuewen@souyidai.com> Date: Wed Nov 2 17:05:18 2016 +0800 修改2 commit 5dc29bebe8de1c1461503d13c4ccae2aaacdf1c0 Author: liuxuewen <liuxuewen@souyidai.com> Date: Wed Nov 2 17:02:48 2016 +0800 修改3 commit a7852596e0de28ce2425c59b7a5aef2d817082d9 Author: liuxuewen <liuxuewen@souyidai.com> Date: Wed Nov 2 17:00:48 2016 +0800
然后,你可以通过 reset 命令回到其中你想要的某个版本,
git reset --hard 5dc29bebe8 //commit id 截取前8位及以上都可以
或者,你还可以通过 reset 回到最新的一次提交,
git reset --hard HEAD^
如果你实在只是不想commit,只想让代码回到工作区,不想丢弃,可以这样:
git reset HEAD^ //此时代码保留,回到 git add xx 之前
注意:不管是 git checkout -- xxx 丢弃,或者是 git reset xxx 都一定要!小!心!操!做!因!为!意!味!着!你!本!地!写!的!代!码!将!丢!失!当然,确定没用,该扔就扔!