Git入门指南

Git概述

  • Git:免费开源的分布版本控制系统。
  • 优点:占地面积小,性能极快,免费开源,有廉价的本地库、方便的暂存区以及分支。
  • 版本控制:记录文件内容变化,方便查阅特定版本修订情况。

集中式版本控制工具 VS 分布式版本控制系统

集中式版本控制系统

  • 集中化的版本控制系统:SVN\CVS。
  • 特点:
    • 有单一的集中控制服务器,保存所有文件修订版本。
    • 客户端连接到服务器,取出最新文件或者提交更新。
  • 缺点:
    • 如果中央服务器挂了,大家都没法工作。

分布式版本控制系统

  • 每台电脑都可以进行本地的版本控制,即使远程库挂了,只不过没法推送罢了。
  • 每个客户端保存的也都是完整的项目(包含历史记录,更加安全)
  • Git的历史吹水
    • Linus本人手动合并代码来更新Linux
    • 商业软件BitKeeper人道主义免费授权,但是要求不能被破解。
    • 05年有人破解了,收回使用权。Linus用C语言两周开发了Git。
    • 08年GitHub上线,jQuery、Ruby、PHP都将代码放到GitHub上开源

Git工作区域

  • 工作区:代码存放的磁盘位置。
  • –>git add
  • 暂存区
  • –>git commit
  • 本地库:存储历史版本。
  • –>git push
  • 推送到远程库。
    • 局域网:gitlab
    • 互联网:GitHub、gitee

git常用命令

Git常用命令
  • 设置用户签名:
    • git config --global user.name 用户名
    • git config --global user.email 邮箱
  • 初始化本地库:git init
  • 查看本地库状态:git status
  • 添加到暂存区:git add 文件名
  • 提交到本地库:git commit -m "日志信息" 文件名
  • 查看历史记录:git reflog
  • 版本穿梭:git reset --hard 版本号

设置用户签名

  • 签名作用:区分不同操作者身份。在每个版本的提交者信息可以看到。
  • git首次安装必须设置一下用户签名。这里的用户前面和GitHub上没有关系。

git status

未添加的提示信息:

1
2
3
4
5
6
On branch master
No commits yet
Untracked files: 未被追踪的文件,在工作区
(use "git add <file>..." to include in what will be committed)
cpp/
nothing added to commit but untracked files present (use "git add" to track)

执行git add cpp/ 后: 添加到暂存区

1
2
3
4
5
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)

执行git commit -m “测试提交” /cpp后:提交到本地库

1
2
On branch master
nothing to commit, working tree clean

历史版本和版本穿梭

  • 查看版本信息:git reflog 查看版本信息、版本号、指针

  • 查看详细信息:git log 查看提交者和提交时间

  • 穿越版本,复制版本号后:git reset –hard 版本号

    • 这时候查看文件内容,就会发现内容发生变化。
  • git切换版本,底层其实是移动HEAD指针。

    • HEAD->MASTER->FIRST
    • 每次移动都是改动MASTER

Git分支

  • 分支理解
    • 使用分支:程序员将自己工作从主线上分离开来,开发自己分支的时候不会影响主线。
    • 分支可以简单理解为副本,底层实际上是指针引用。
  • 例如:
    • 主线分支1.0 –》颜色分支改动后合并到主线 –》主线分支1.1
    • 游戏分支经历4个版本后合并到主线 –》主线分支1.2
  • 分支好处:
    • 同时并行推进多个功能开发,提高开发效率。
    • 某个分支开发失败,对其它分支不会有影响。
Git分支命令
  • 创建分支
    • git branch 分支名
  • 查看分支
    • git branch -v
  • 切换分支
    • git checkout 分支名
  • 把指定分支合并到当前分支
    • git merge 分支名
    • 在master上执行merge hot-fix 就是把hot-fix融到master上
    • 正常合并:hot分支 基于master分支没改动 的基础上修改并merge。
    • 冲突合并:合并分支的时候,在同一个文件的同一个位置有两套完全不同的修改。git无法决定使用哪一个,必须人为决定新代码的内容。

移动分支的本质

  • master、hot-fix都是指向具体版本记录的指针。
  • 当前所在的指针其实由HEAD决定,创建分支就是多创建一个指针。
  • 切换分支的本质就是移动HEAD指针。

远程

GitHub远程仓库操作常见命令
  • 查看当前所有远程地址别名:git remove -v
  • 起别名: git remove add 别名 远程地址
  • 推送本地分支上的内容到远程库:git push 别名 分支
  • 将远程仓库内容克隆到本地:git clone 远程地址
  • 将远程仓库对于分支的最新内容拉下来后与当前本地分支合并
    • git pull 远程库地址别名 远程分支名