“房子是租的 但生活不是”
1.故事的开始
远程master分支下代码被不小心提交了很多垃圾代码或项目删掉,想要回滚到以前的某一版本并删除commit log。怎么办?情景如图:
情景很简单。老板上传了个文件,我把他删掉了。有一种办法,把文件再push下,但是也不想他看到图中那comment(ps:这样我才不会被fire)。实现上面场景的代码如下:
1
2
3
4
5
6
|
vim A.txt git add . git commit -a -m "add A.txt"
git push rm A.txt
git commit -a - |
2.解决之道
2.1工作区,暂存区,本地版本库 & 远程版本库
No pic say 个 78。。。
① 工作区:就是我们操作的目录
② 暂存区:操作目录的快照
③ 本地版本库:Git的精髓,人人都是*仓库。也就是Git分布式的好处,自然对比SVN这种集中式
④ 远程版本库:Github这种*仓库,可以达到共享。
常用的操作也如图所示,不言而喻了。
2.2 实战解决
Talk is cheap,Show me the code or money~ 代码如下:
1
2
3
4
|
git log git reset --soft ${commit- id }
git stash git push -f |
详解如下:
第1行:git log 查看提交历史,然后找到要回滚的版本。历史如下,
1
2
3
4
5
6
7
8
|
commit 84686b426c3a8a3d569ae56b6788278c10b27e5b Author: JeffLi1993 <qiangqiangli1993@gmail.com> Date: Fri Apr 8 19:11:32 2016 +0800 我删除了老板的东西
commit 72bd6304c3c6e1cb7034114db1dd1b8376a6283a Author: JeffLi1993 <qiangqiangli1993@gmail.com> Date: Fri Apr 8 19:05:23 2016 +0800 add A.txt
|
我们想要回滚到的版本就是:72bd6304c3c6e1cb7034114db1dd1b8376a6283a
第2行,输入对应版本即可:
1
|
git reset --soft 72bd6304c3c6e1cb7034114db1dd1b8376a6283a |
撤销到某个版本之前,之前的修改退回到暂存区(不懂看漂亮的图哦~)。soft 和 hard参数的区别就是,hard修改记录都没了,soft则会保留修改记录。
第3行:暂存为了安全起见。
第4行,覆盖 -f,对
1
|
git push -f |
将本地master push 到远程版本库中, -f 强制覆盖。
3. 小结
1
2
|
1. git reset 回滚到某个版本之前 2. git push -f 强制push覆盖 |