Git工作
基本概念
- 工作区:当前目录
- 缓存区:英文名stage或index,存放在(.git/index)中,所以也称缓存区为索引
- 版本库:工作区的隐藏目录.git
下面出现的HEAD可以用master替换
- 左侧为工作区,右侧为版本库。
- 版本库中标记index的区域为缓存区(index),标记master的是master分支代表的目录树。
- object为Git的对象库,实际在.git/objects目录下,里面包含创建的各种对象和内容
- 当对工作区执行 “git add” 命令,缓存区的目录树被更新,同时工作区修改的文件内容被写入到对象库(object)中的一个新对象,而该对象的ID被记录在缓存区的文件索引中
- 当对缓存区执行 “git commit”命令,缓存区中的目录树写到版本库(object)中,master分支会做出相应的更新。
- 当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
- 当执行 “git rm –cached ” 命令时,会直接从缓存区删除文件,工作区则不做出改变。
- 当执行 “git checkout .(或单独文件)”会用缓存区文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
- 当执行 “git checkout HEAD .(或单独文件)” 会用工作区的文件替换缓存区和以及工作区中的文件。这个命令也是危险的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
git add . # 将工作区文件添加到缓存区
git commit . # 将缓存区文件添加到版本库
git reset HEAD # 将版本库内容重写到缓存区
git rm --cached (filename) # 删除缓存区文件
git checkout . # 将缓存区文件替换工作区
git checkout HEAD . # 将版本库文件替换(工作区新添加的不会删除)到缓存区和工作区
命令很有规律往往是
- git add . <-> git checkout . 工作区和缓存区互逆
- git commit . <-> git reset HEAD(master) 缓存区和版本库互逆
Git创建仓库
git init
当前目录初始化Git仓库 git init
对目录初始化Git仓库 git init newreo 目录不存在自动创建
git clone [url]
使用git clone拷贝一个Git仓库到本地。
git status 查看项目的状态
git status -s 获取简短的输出。
- ?? 只在工作区有
- A 表示文件添加到缓存区(版本库没有)
- M 表示文件被修改了(有绿色和红色)
-
红色意思就是只在工作区有它
文件添加到版本库则不显示
Mac:demo hubo$ git status -s
AM main.c
A main.o
?? main.p
git add 工作区到缓存区
git add . 添加所有文件
git add (filename) 添加指定文件
Mac:demo hubo$ git add README main.c
Mac:demo hubo$ git status -s
A README
A main.c
git commit 缓存区到版本库
首先要配置名字和邮箱
$ git config --global user.name 'name'
$ git config --global user.email 'email'
使用参数-m可以提交注释
Mac:demo hubo$ git st -s
AM main.c
A main.o
?? main.p
Mac:demo hubo$ git add .
Mac:demo hubo$ git st -s
A main.c
A main.o
A main.p
Mac:demo hubo$ git ci -m '第二次提交'
[master 66bca80] 第二次提交
3 files changed, 1 insertion(+)
create mode 100644 main.c
create mode 100644 main.o
create mode 100644 main.p
Mac:demo hubo$
使用参数-am直接将工作区提交到版本库,注意当文件数量增加不能使用该命令,文件减少和修改文件内容可以使用。
Mac:demo hubo$ ls
README main.c main.o main.p
Mac:demo hubo$ cat main.p
Mac:demo hubo$ echo "test" >> main.p
Mac:demo hubo$ git commit -am '第三次提交'
[master 839f96b] 第三次提交
1 file changed, 1 insertion(+)
Mac:demo hubo$
git reset HEAD 取消缓存的内容
git reset HEAD 意思是取消 git add 添加
Mac:demo hubo$ git st -s
M README
M main.c
A main.w
Mac:demo hubo$ git reset HEAD main.c
Unstaged changes after reset:
M main.c
Mac:demo hubo$ git status -s
M README
M main.c
A main.w
git rm 删除版本库中的文件
git rm 从版本库中删除
git rm -f 删除之前修改过并且已经放到缓存区域
git mv 移动或重命名文件
Mac:demo hubo$ ls
README main.c main.w
Mac:demo hubo$ git mv main.c mm.c
Mac:demo hubo$ ls
README main.w mm.c