基本概念
- 工作区
电脑中的实际文件 - 暂存区(stage)
git中的缓存 - 版本库
文件一旦提交到版本库,就意味着创建了一个还原点
创建Git仓库
git init
mkdir 仓库名
pwd #查看当前路径
cd 仓库名
git init #初始化仓库
提交版本变动
git add
git add readme.txt #图省事可以git add . 添加全部文件
把工作区的文件改动添加到暂存区,改动是指当前工作区与最后一次提交的版本作比较
git commit -m 'xxx'
git commit -m 'wrote a readme file' #把暂存区的文件提交到仓库
类似于游戏存档,注意是把暂存区的改动添加到了版本库,而暂存区是依靠git add来从工作区添加的
查看状态
git status 查看当前仓库的状态
git diff 文件名 查看某个文件的改动
git log 查看从最近到最远提交的日志(存档点)
版本回退
参数说明:
HEAD:
HEAD代表当前版本(最后一次提交的版本),HEAD^代表上一个版本(按照log顺序),依次类推HEAD^^,为了避免版本数过多,也可以用数字表示选则回顾前多少个版本,比如回顾3个版本,HEAD~3(等价于HEAD^^^)
回滚命令:
git reset --hard HEAD
类似于相对路径
git reset --hard xxx(log中的commit id)
类似于绝对路径(xxx不用写全,写前几位就可以)
注意git reset --hard xxx中的--hard是没有空格的
恢复命令:
回滚到之前的版本,后悔了,想复原
思路:查找到对应版本的commit id,但是用git log不会看到当前版本之后的版本,所以要用 git reflog命令
撤销修改
与版本回退的区别是,版本回退恢复的是所有文件,而撤销修改只是撤销掉一部分的修改
-
git checkout -- filename
注意checkout后面一定要有-- 文件名,否则是切换分支。
效果:
1.工作区的文件未添加到暂存区
效果同版本回退一样
2.工作区的文件已添加到暂存区
撤销修改到最后一次添加暂存区的状态
修改了工作区的内容
-
git reset HEAD 文件名
清除指定文件在暂存区中的内容
只是清空了暂存区中某个指定的文件,工作区没有变动,修改工作区要靠git checkout -- filename
问题:若文件已经add到暂存区,想撤销修改到add之前该怎么办?
思路:先清空该文件的暂存区,再撤销工作区的修改
解决:git reset HEAD 文件名 把指定文件的暂存区中的修改全部撤销,然后git checkout -- 文件名,使工作区的文件恢复到最近一次commit或add(然而暂存区已通过git reset HEAD 文件名清楚了)的状态
git删除
git rm 文件名
git commit -m 'xxx'
删除版本库中的某个文件
git rm其实与rm是等价的