创建一个新的git项目
1. # cd yafei
2. # git init
3. # git add .
4. # git commit
如果修改了项目代码,做如下气操作
1. git add 修改的文件或新增的文件
2. git diff
3. git status
4. git commit
5. git lot
git commit -a 可直接提交所有修改,对新增文件或文件夹无效
分支管理
1. git branch experimental /新建分支
2. git granch /列出所有分支
3. git checkout experimental / 选择分支
4. 在分支中修改文件
5. git commit -a /提交
6. git checkout master /选择master分支
7. git merge experimental /合并到master分支
8. git branch -d experimental / 删除分支
-d 在分支已经合并到主干后删除
-D 不论如何都删除分支
合作
1. xiaoqiang: # git clone /home/yafei xiaoqiang /将项目复制一份到xiaoqiang
2. yafei: # git pull xiaoqiang master /将小强的master合并到我的当前分支上
任何人使用git 之前,都要提交简单的个人信息,以便区分不同的提交者身份
# git config --global user.name "your name"
# git config --blobal user.email "your email"
git fetch /home/bob/myrepo master:bobworks /提取出bob修改的代码内容,放到自己工作目录下的bobworks分支中
显示分支信息
1. git show master
git show experimental
2. git branch stable v3 // 建立一个基于v3的分支
3. git grep "print" v3 // 在v3中搜索所有的包含print的行
git grep "print" // 在所有的历史记录中搜索包含print的行
查询对象数据库
1. git cat-file -t 241e // -t 列出相应ID的对象类型,241e 是commit 后得到的SHA1码
2. git cat-file commit 241e
3. git ls-tree 9a327
4. git cat-file -t 7d4eof
5. git cat-file blob 7d4eof
commit 对象会指向一个tree对象,即在历史记录中当前结点的tree目录的镜像,也会指向parent commit
tree 对象用于显示一个目录的状态,tree 对象中包含blob对象和子目录
blob 对象包含的是文件的数据
每个分支的head会存储在 .git/refs/heads , 同时,当前所在分支的头部会存储在 .git/HEAD中
查看index file
1. git ls-files --stage
将 current working directory 记为 a
将 index file 记为 b
将git repository 记为 c
他们之间的提交层次关系是 a -> b -> c
git add 完成的是 a -> b
git commit 完成的是 b -> c
git commit -a 完成的是 git add 和 git commit
从时间上看,可以认为 a 是最新的代码,b 比较旧 ,c 更旧
按时间排序就是 a <- b <- c
git diff 得到的是 从 b 到 a 的变化
git diff --cached 得到的是 从 c 到 b 的变化
git diff HEAD 得到的是从 c 到 a 的变化
常量
HEAD 表示最近一次的commit
HEAD^ HEAD父母的信息
HEAD^^ HEAD祖父母的信息
HEAD~4 HEAD上溯4代的信息
HEAD^1 HEAD的第1个父母
HEAD^2 HEAD的第2个父母
给commit 起别名
1. git tag v3 5b888 // 用v3 代替 5b888
2. git reset --hard v0 // 恢复到v0版本
--soft 撤消commit --mixed 撤消 commit 和 index file --hard 撤消全部
3. git reset -- test // 从index file 里删除登记的test
clone 的话,是clone远端的当前分支