git_community_book:ch2_basic_usage

1Git初始化

1-1git配置

  1. 全局配置git config –global
    • 设置你的名字和email,即你在提交commit时的签名
    • ~/.gitconfig文件:Git全局配置的文件
  2. 局部配置 git config
    • 会在你的项目目录下的.git/config文件中增加[user]内容

1-2对于新建项目,这部分定制操作要在git初始化之后执行

2 acquire a repository

  • clone from the existing repository
  • create a new repository

2-1Clone一个仓库

git url协议
- ssh://
- http(s)://
- git://

git clone http http://github.com/shiyanlou/gitproject.git

2-2Create一个新的仓库

#进入文件夹
git init

会在相应的文件夹中创建.git的目录

3 正常的工作流程

  1. 创建、编辑文件
$ cd project
$ touch file1 file2 file3
  1. git add命令将更新的内容添加到索引中
$ echo "testcontent1" >> file1
$ echo "testcontent2" >> file2
$ echo "testcontent3" >> file3
$ git add file1 file2 file3
  1. 查看修改变化
$git diff --cached (查看哪些文件及内容被提交)
$git diff (显示当前你已做的但没有加入到索引里的修改)
$git status (获取当前项目的一个状况)
  1. 提交修改
git commit -m "put a message to commit" 
#-m添加注释
git commit -a -m "put a message to commit" 
#-a自动把所有内容被修改的文件(不包括新创建的文件)都添加到索引中,并且提交

完成后就会记录一个新的项目版本

4分支与合并

Git跟踪的是内容不是文件

4-1分支

一个git库可以维护很多开发分支

git branch experimental #创建分支
git branch                        #查看分支
git checkout experimental #转换到”experimental“分支
git merge experimental  #合并分支master和experimental
  • 如果两个分支没有冲突,成功合并
  • 如果存在冲突,不合并; git diff 来查看冲突的文件
  • 编辑完冲突文件之后,提交一下命令完成合并
git commit -a -m "put a message to commit"
git branch -d #只能删除那些已经被合并了的分支
git branch -D#强制删除某个分支

4-2解决合并中的冲突

  • 如果执行自动合并没有成功,git会在索引和工作树设置一个特殊的状态,提示如何解决冲突。

4-3撤销一个合并

  • 合并后修改,但是修改未提交
    git reset --hard HEAD
  • 合并后修改,且修改已提交
git reset --hard ORIG_HEAD

4-4快速向前合并

5git日志

5-1查看日志

git log 可以显示所有的提交

5-2日志统计

git log --stat
显示每个提交中哪个文件被修改了,分别添加或删除了多少行

5-3格式化日志

git log --pretty=oneline

5-4日志排序

git merge experimental #合并分支

5-5比较提交 git diff

git diff master..test #比较两个分支的差异
git diff master...test#比较两者共有父分支和test分支之间的差异
git diff
git diff --cached
git diff HEAD #显示你工作目录与上次提交之间的所有差别
--stat参数用来统计
git diff --stat 用来统计一下有哪些文件被改动,有多少行被改动

6 GIT对象模型

  1. SHA

    • 通过一个40字符的”对象名“来索引用来表示项目历史信息的文件, SHAI哈希计算得到值
    • 好处
      • git只需要比较对象名,就可以判断对象
      • 不同仓库中相同的内容会存放在相同“对象名”下
      • 检查对象名和内容的SHAI哈希值,盘对对象内容是否正确
  2. 对象

    • 类型
      • blob 类型用来存储文件数据, git show查看
      • tree 有点像一个目录,用来管理一些tree和blob:git ls-tree看到更多tree的细节
      • commit指向一个tree,用来标记某一个特定时间点的状态
      • tag用来标记某一次提交的方法:
    • 大小
    • 内容
  3. GIT目录与工作目录

    1. Git目录:你的项目存储所有历史和元信息的目录, .git
    2. 工作目录:存储着你现在签出来用来编辑的文件
  4. GIT索引:一个在你的工作目录和项目仓库间的暂存区

    1. 查看索引 git status

7分布式的工作流程

#alice 创建一个repo
#bob取得copy
git clone /home/alice/project myrepo
# bob modify it and commit
#alice pull the modification of bob
git pull /home/bob/myrepo master

git pull命令完成:
- 从远程分支抓取修改的内容
- 合并进当前分支
- 不带地址时默认从父分支中pull

git remote:
- 重命名远程分支,定义所学
git remote add bob /home/bob/myrepo

git fetch
- 从远程分支中抓取修改的内容,当并不合并进当前分支里头
git fetch bob

#查看bob远程分支对master对源的修改
git log -p master...bob/master
#上述命令把Bob从Alice的主分支中牵出后所做的修改全部显示出来

检查完修改了,合并进本地主分支中
git merge bob/master

git同时也保存了一份最初的alice主分支,在origin/master下面
git branch -r

git可以像cvs一样工作:有一个中心仓库,不同的用户向它推送所作的修改;

git push gitcvs-migration

8公共git仓库

  • 告诉项目的维护者用git pull命令从你的仓库把修改抓取下来

一般的工作流程:

  • 你在本地私人仓库工作
  • 把修改push到公开仓库
  • 把他人的修改pull到本地仓库

将修改推送到一个公共仓库

  • 通过http协议或者git协议,用户维护者可以抓取修改,但是没有写权限
  • 通过ssh歇息和git push来更新
  • 最好把远程仓库初始化为bare仓库
    • git init –bare :创建的仓库是裸仓库,只能生成一类文件:用于记录版本库历史记录的.git目录下面的文件,不包含实际项目源文件的拷贝。
    • 原本在.git目录下的文件都在根目录下面,只保存git历史提交的版本信息
    • git init则不同,附带的.git信息才用于记录项目历史提交的版本信息

Git标签

  • 轻量级标签
    • 用git tag不带任何参数来创建一个标签指定某个提交
    • git tag stable-1 1b2e1d63ff #stable1就成了代称
  • 标签对象:可以指向任何对象,但通常是一个提交
  • 标签的签名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值