首页 > 代码库 > git用法之[回滚代码]

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 都一定要!小!心!操!做!因!为!意!味!着!你!本!地!写!的!代!码!将!丢!失!当然,确定没用,该扔就扔!

 

git用法之[回滚代码]