Git的基本原理和简单使用

一、Git原理

1. Git采用的是全量存储方案

​ 所谓全量方案,就是每个版本都保存所有的数据(多是代码,文件占据空间较小)。优点:快速;缺点:浪费空间。

​ 与此相对的是增量方案:保存的是上一个版本 + 补丁。优点:节省空间;缺点:要进行运算,费时。

2. 文件变动信息的存储

​ git把每次文件的改动都存在项目根目录下的.git文件夹中。

3. .git文件夹中的文件

  • 利用哈希算法SHA-1计算得到文件的哈希值,依据此哈希值来判断文件内容是否有改变。

    注:由于哈希值是唯一的(几乎不会重复),所以可以保证同一个文件只存储一份。

  • 使用 tree 结构来存储

    文件是叶节点,文件夹是非叶节点

4. 暂存区(index文件)

Git的基本原理和简单使用

Git的基本原理和简单使用

Git的基本原理和简单使用

5. 快照链表

HEAD 指针指向最新的快照。

​ 想恢复某个版本,就把指针指向那个版本,然后使用 checkout 命令;或者直接 checkout 那个版本的哈希值。

6. 协同和分支

​ 项目需要多人分别开发时(假设两人开发),可以在 master 主分支进行 checkout 操作,分出两个分支,每个人在自己的分支进行开发工作,开发完成后进行合并操作。有两种合并方式:

  • merge:合并时,两个分支和这两个分支的公共祖先进行三方合并。

  • rebase:将A分支保存到一个临时目录下,然后撤销此分支上所有commit,再将B分支的commit接到这条分支上(此时两个分支基本一致),最后再将临时目录下保存的内容接到这条分支后。若此时删掉B分支,则此时就只有一条包含所有功能的分支

    注:rebase会修改提交记录

二、Git命令

1. 本地库初始化

在项目的根目录进行操作

git init
# 注意:生成的 .git 目录中存放的是本地库相关文件,不要删除

2. 设置签名

签名的作用是区分不同操者身份。用户信息在每一个版本提交中能够看到,以此确认本次提交是谁做的。

  • 项目(仓库)级别仅在当前本地库有效

    git config user.name tom  # 设置用户名tom
    git config user.email du@qq.com # 设置用户邮箱
    
  • 系统用户级别仅在当前登录的操作系统用户有效

    git config --global user.name tom
    git config --global user.email du@qq.com
    

仅仅加了一个 --global

优先级别:项目级别 > 系统级别

信息保存位置:~/.gitconfig 文件,即C盘下的用户目录

3. 添加文件(到暂存区)

git add fileName  # 指定文件
git add . # 所有

# 将工作区的文件添加到暂存区

4. 查看状态

git status   
# 查看工作区、暂存区状态

5. 提交(到本地库)

git commit -m 'commit message' 
# 将暂存区内容提交到本地库

6. 创建分支

git branch dev_dxx 
# 创建名称为dev_dxx的分支

7. 切换分支

git checkout dev_dxx
# 切换到dev_dxx分支

8. 查看分支

git branch -v

9. 合并分支

git branch dev_aaa
git checkout dev_aaa # 新建一个分支并切换过来
# ...  对文件进行更改


# 合并分支的时候要明确谁谁合并
git checkout master # 回到master分支进行merge
git merge dev_dxx # 先合并dev_dxx,不会有冲突,因为此分支相当于是对master进行后续操作
git merge dev_aaa # 再合并dev_aaa,若修改过同一个文件,则此时会有冲突conflict

10. 解决merge冲突

  • 放弃合并

    git merge --abort
    
  • 手动合并冲突

    1. 打开有冲突的文件,文件内有冲突的部分会以下述形式分隔开来

      <<<<<<<<<<<<<<
       当前分支的代码
      ==============
       合并过来的代码
      >>>>>>>>>>>>>>
      
    2. 重新添加并提交

      git add fileName
      git commit -m 'merged' 
      

11. 查看日志

git log # 查看所有的版本记录

git reflog # 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

三、Git结合Github

1. 创建远程仓库

在 Github 上新建远程仓库

2. 添加远程版本库

git remote add 别名 远程地址 
# 例子:git remote add origin https://github.com/Du-xx/gitTest.git

3. 查看远程地址别名

git remote -v

4. 推送 push

git push 别名 分支名
git push -u 别名 分支名    # -u指定默认主机
# 例子:git push origin master

5. 克隆 clone

将远程仓库的项目克隆到本地,clone进行一次从无到有的过程,更新用 pull

git clone  远程地址
# 例子:git clone https://github.com/Du-xx/gitTest.git

6. 拉取 pull

本地已经存在 clone 下来的文件,用 pull 进行更新

# pull = fetch + merge
git fetch 别名 分支名
git merge 别名 分支名
# 等价于
git pull 别名 分支名
# 例子:git pull origin master

7. 删除git与github的联系

git remote remove origin # origin是本仓库在github上的别名

8. fork

用于团队外协作,其他人员使用 fork 将代码拉到自己的远程仓库中,可以直接进行更改,也可以 pull 到本地更改后 push 到远程仓库,之后进行 pull request,等待原有团队审核后 merge 即可

上一篇:[非专业翻译] Mapster - 自定义命名约定


下一篇:git pull拉取远程仓库代码,避免覆盖本地修改的代码