Git工作

Git工作

基本概念

  • 工作区:当前目录
  • 缓存区:英文名stage或index,存放在(.git/index)中,所以也称缓存区为索引
  • 版本库:工作区的隐藏目录.git

1352126739_7909

下面出现的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

猜你喜欢

转载自blog.csdn.net/qq_1290259791/article/details/81155868