ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Git和GitHub版本控制学习笔记

2021-05-12 11:01:40  阅读:164  来源: 互联网

标签:文件 HEAD Git 版本控制 GitHub 本地 git 远程 分支


一、版本控制的功能

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工作流举例

标签:文件,HEAD,Git,版本控制,GitHub,本地,git,远程,分支
来源: https://blog.csdn.net/zuzhiang/article/details/116699059

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有