Git和GitHub版本控制学习笔记

Posted 棉花糖灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git和GitHub版本控制学习笔记相关的知识,希望对你有一定的参考价值。

一、版本控制的功能

1. 协同修改

  • 多人并行不悖的修改服务器端的同一个文件

2. 数据备份

  • 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态

3. 版本管理

  • 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约空间,提高运行效率,Git采用了文件系统快照的方式。

4. 权限管理

  • 对团队中参与开发的人员进行权限控制

  • 对团队外的开发者贡献的代码进行审核——Git独有

5. 历史记录

  • 查看修改人、修改时间、修改内容、日志信息

  • 将本地文件恢复到某一个历史状态

6. 分支管理

  • 允许开发团队在工作过程中多条生产线同时推荐任务,进一步提高效率

二、Git简介

1. Git优势

  • 大部分操作在本地完成,不需要联网

  • 完整性保证

  • 尽可能添加数据而不是删除和修改数据

  • 分支操作非常快捷流场

  • 与Linux命令全面兼容

2. Git的安装

下载安装包在本地直接安装即可,具体教程可自行百度

3. Git目录结构

  • 工作区:写代码的地方

  • 暂存区:临时存储代码的地方

  • 本地库:存储历史版本的地方

4. 代码托管中心

  • 任务:维护远程库
  • 局域网下:GitLab服务器
  • 外网下:GitHub、码云等

5. 本地库和远程库

(1) 团队内部协作

(2) 跨团队协作

三、Git命令操作

1. 本地库初始化

  • git init:切换到要创建的目录后,使用该命令初始化本地库,生成一个隐藏的.git文件夹

2. 设置签名

  • 签名形式

    • 用户名:如zuzhiang
    • Email地址:如zuzhiang@126.com
  • 作用:区分不同开发人员的身份

  • 辨析:这里设置的签名和登录远程库(代码托管中心)的帐号、密码没有任何关系

  • 项目级别/仓库级别:仅在当前本地库范围内有效

    • git config user.name 用户名
    • git config user.email 邮箱地址
    • 设置的签名保存在./.git/config文件内
  • 系统用户级别:登录当前操作系统的用户范围内有效

    • git config --global user.name 用户名
    • git config --global user.email 邮箱地址
    • 设置的签名保存在~/.gitconfig文件内
  • 级别优先级:就近原则,项目级别优先于系统用户级别,两者至少要设置一个,一般只需要设置系统用户级别的就足够了

3. 基本操作

(1) 状态查看

  • git status:查看状态,当前分支、提交情况、待提交情况

(2) 添加

  • git add 文件名:将文件添加到暂存区

(3) 提交

  • git commit 文件名:将文件从暂存区提交到本地库,此时需要进入vim编辑器添加本次提交的备注信息
  • git commit -a 文件名:将文件添加到暂存区并提交到本地库
  • git commit -m "日志信息" 文件名:添加本次提交的备注信息并提交到本地库

(4) 查看历史记录

  • git log:查看历史提交记录,包括提交的哈希值、作者、日期、具体改了哪等信息

  • git log --pretty=oneline:每个提交在一行内显示,只显示提交的哈希值和具体改了哪

  • git log --oneline:每个提交在一行内显示,只显示提交的哈希值的一部分和具体改了哪。只能显示当前版本之前的版本

  • git reflog:在git log --oneline的基础上添加了HEAD指针移动多少步可以到达每个历史版本的信息,显示为HEAD@{步数},推荐使用

(5) 暂存区文件的删除

  • git rm --cached 文件名:从暂存区移除文件

(6) 前进和后退版本

  • 本质:git有一个HEAD指针指向当前的历史版本,可以通过移动HEAD指针来改变版本

  • 基于索引值操作git reset --hard 索引值,索引值即提交的哈希值(一部分也可),推荐使用

  • 使用^符号git reset --hard HEAD^,只能后退,异或符号有几个后退几次

  • 使用~符号git reset --hard HEAD~n,后退n步

(7) reset命令的3个参数对比

  • soft:仅仅在本地库移动HEAD指针

  • mixed:在本地库移动HEAD指针,并且重置暂存区

  • hard:在本地库移动HEAD指针,重置暂存区,重置工作区

(8) 本地库文件的删除和恢复

  • git commit -m "日志信息" 文件名:对已经删除的文件进行提交操作即可

  • git reset --hard 索引号:可以回退到删除之前的版本,该文件就会恢复

(9) 比较文件差异

  • git diff 文件名:比较文件与暂存区对应文件的不同,删除的行用红色表示,且前面有减号-,增加内容的行用绿色表示,且前面有加号+

  • git diff HEAD 文件名:比较文件与本地库HEAD指针指向的文件的不同,还可以用HEAD^HEAD~n指定要比较的版本

  • git diff不指定文件名时,比较所有文件

4. 分支管理

(1) 分支

  • 在版本控制过程中,通过多条线同时推进多个功能

(2) 分支的优点

  • 同时并行推进多个功能开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除即可

(3) 分支操作

  • 创建分支git branch 分支名,从主分支复制一份

  • 查看分支git branch -v

  • 切换分支git checkout 分支名

  • 合并分支

    • 切换到被合并的分支上,比如把hot_fix合并到master分支,则要切换到master分支
    • 把指定分支合并到当前分支git merge 分支名
  • 删除分支git branch --delete 分支名

  • 解决合并冲突:合并分之后产生冲突,比如从创建分支之后,旧分支和新分支都对文件做了修改,然后要把新分支合并到旧分支上,其解决办法为:

    • 编辑文件,删除特殊符号

    • 把文件修改到满意的程度,保存退出

    • git add 文件名

    • git commit -m "日志信息",注意这里不能带文件名

(4) 原理

在创建新分支时只需要创建一个指向当前分支的指针即可,而切换分支或版本时,只需要更改HEAD指针指向的内容即可。

分支的创建

分支的切换

四、GitHub

1. 准备工作

  • 首先初始化本地库

  • 将文件推送到本地库

  • 注册GitHub帐号

  • git remote add 远程库别名 https://github.com/zuzhiang/ACM.git:添加远程库,并指定其别名

  • git remote -v:查看远程库的情况

2. 团队开发人员的克隆和推送操作

  • 开发人员在自己的电脑上进入项目目录(此时为空)

  • git clone https://github.com/zuzhiang/ACM.git:将远程库克隆到本地,除了把远程库下载到本地,还会创建origin远程地址别名,且初始化本地库

  • 开发人员在本地修改文件后,先推送到本地库

  • 远程库所有者在对应仓库的Settings -> Colloborators中对github用户进行邀请加入开发团队

  • git push 远程库别名 远程库分支:开发人员把修改后的文件推送到远程库

3. 团队开发人员的拉取操作

(1) 先fetch再merge

  • git fetch 远程库别名 远程库分支:将远程库的分支拉取下来,但不会更改本地工作区的文件

  • git checkout 远程库别名/远程库分支:切换到拉取下来的分支,查看刚刚下载的远程库的内容

  • git checkout master:切换回本地库

  • git merge 远程库别名/远程库分支:把远程库合并到本地库

(2) 直接pull

  • git pull 远程库别名 远程库分支:拉取远程库并合并到本地库
  • pull = fetch + merge

4. 解决冲突

当不是基于github远程库的最新版所做的修改时会产生冲突。协作开发时冲突的解决,和分支产生冲突时解决方法类似

  • 编辑文件,删除特殊符号
  • 把文件修改到满意的程度,保存退出
  • git add 文件名
  • git commit -m "日志信息",注意这里不能带文件名
  • git push 远程库别名 远程库分支

5. 跨团队协作

  • 其他团队要协助本团队开发,首先其他团队要fork本团队对应的仓库,作为自己的远程库

  • 其他团队将fork后的远程库clone到本地进行修改,并推送到远程库

  • 其他团队在github对应仓库的Pull requests -> New pull request中创建一个pull request

  • 本团队仓库所有者在github对应仓库的Pull requests中可以看到相应的pull request

  • 本团队仓库所有者对代码进行审核

  • 审核没问题后,点Merge pullrequest合并代码

  • 本团队仓库所有者将合并后的远程库拉取到本地

6. 其他

  • 如果本地不能记住密码,可以使用SSH的方式记住密码

  • GitFlow工作流举例

以上是关于Git和GitHub版本控制学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

git学习笔记总结

Git基础学习(黑马程序员笔记)

Git基础学习(黑马程序员笔记)

git与github的使用Git最新教程通俗易懂学习——狂神说视频笔记

git与github的使用Git最新教程通俗易懂学习——狂神说视频笔记

GIT & GitHub 学习笔记