0
点赞
收藏
分享

微信扫一扫

Git使用指南

善解人意的娇娇 2022-02-22 阅读 146
gitgithubsvn

Git&GitHub使用指南

请添加图片描述

Git在本地进行版本控制

1.版本控制工具 具备的功能

  1. 协同修改

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

  2. 数据备份

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

  3. 版本管理

    在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约储存空间,提高运行效率。这方面SVN采用的是增量式管理的方法,而Git采取了文件系统快照的方式。(省空间)

  4. 权限控制

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

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

  5. 历史记录

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

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

  6. 分支管理

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


2.版本控制简介

版本控制:

工程设计领域中,使用版本控制管理工程蓝图的设计过程。

在IT开发过程中,也可以使用版本控制思想,管理代码的版本迭代。

版本控制工具:

集中式版本控制工具:

CVS、SVN、VSS···

每个开发人员是客户端,文件和版本信息存在服务器上。

缺点:服务器没了,历史数据都没了。单点故障

分布式版本控制工具:

Git、Mercurial、Bazaar、Darcs···

在本地就有完整的历史,避免了单点故障。本地库之间可以互相传输文件(一般还是用远程库)


3.Git简史

请添加图片描述

Git官网

Git优势

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

  • 完整性保证(每一次提交数据,会给一个hash值)

  • 尽可能添加数据而不是删除或者修改数据。(每次提交会保存新的数据,不会删除旧的数据)

  • 分支操作非常快捷流畅(对不同快照的不同的指针)

  • 与Linux命令全面兼容(Vim编辑器)

Git的本地结构

请添加图片描述

Git和代码托管中心

代码托管中心的任务:维护远程库

  • 局域网环境下

    ​ GitLab服务器

  • 外网环境下

    ​ GitHub(代码托管中心)

    ​ 码云

本地库和远程库(交互方式)

团队内部协作

请添加图片描述

跨团队协作
请添加图片描述

4.Git命令行操作

本地库初始化(在git bash里操作)

  1. 先创建一个工作区,然后进去 cd Git-workspaces

  2. ll 查看当前目录下所有文件(不包含隐藏文件)

    ls -lA 查看当前目录下所有文件(包含隐藏文件)

    ls -lA | less

  3. 创建一个目录,(创建一个新的项目)mkdir 项目名字

  4. git init:初始化目录

    (会创建出 .git目录,. 表示的是隐藏的)

    目录中存放的是本地库相关的子目录和文件,不要删除也不要随便修改。

    (信息保存的位置是 config 这里)

设置签名

形式:

用户名,email地址

作用:

区分不同开发人员的身份

辨析:

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

命令:

项目级别、仓库级别:仅在当前本地库范围内有效(有需求,就设置这个)

  • git config user.name

  • git config user.email

    (保存在 ./.git/config 里面)

系统用户级别:登录当前操作系统的用户范围(一般只设置这个就足够了)

  • git config –global user.name

  • git config –global user.email

    (保存在 ~/.gitconfig 里面)

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

​ 二者都有时,采用项目级别的签名;只有系统用户级别,就以系统用户级别的签名为 准;二者都没有是不允许的。


5.添加提交以及查看状态

查看状态(暂存区)

git status:查看所在分支、工作区、暂存区 的状态。(按照这个顺序)

vim good.txt(创建一个新文件,用vim编辑器)


添加到暂存区

git add [file name]:将工作区【新建、修改】的文件 加载到,暂存区(安全一些,不会丢失了)

git convert LF to CRLF 当checking out text file

​ convert CRLF to LF 当committing text files

git rm --cache <file> 用这个,去unstage。(从暂存区中移出)

工作区的文件添加到暂存区是可以退回来的,新建文件必须add之后再commit,但是修改之后的文件可以直接commit(不能修改了)。


从暂存区里提交

git commit:提交文件到 本地库 (要输入注释,commit message)

git commit -m “My second commit,modify good.txt” [file name](直接提交,不用进vim)

cat file:查看文件

vim编辑器

:set nu,这个命令在最下方输入,可以显示行数

i ,进入编辑

esc + + wq ,退出

1 file changed(一个文件修改了),3 insertions(+)一共有几行

6.版本穿梭测试的准备工作

git log:查看历史版本信息(head指针,表示当前版本)

查看历史记录的不同方式

git log:全部信息都显示,如果最下面出现 ,说明可以用空格键去翻页。(翻页比较麻烦)

多屏显示控制方式

  1. 空格向下翻页

  2. b向上翻页

  3. q退出

git log –pretty=oneline:每条日志只显示一行,简洁一些。会显示全部的哈希值。

git log --oneline:哈希值只显示一部分,更简洁一些。

git reflog:Head@{ 移动到当前版本,需要的步数 },


前进后退历史版本操作的本质

先查看当前文件的内容cat [file name]

基于索引值操作(推荐)

git reset --hard [哈希值(一部分也可以)]

文件内容就变成了 当前哈希值 所指定的版本。(选中就复制了,不用复制粘贴)

使用^符号(只能后退)

git reset --hard HEAD^(后退一步)多少个 ^ 就退多少步。

tail -n 数字 [file name] 会显示后面几行的东西是什么

使用~符号(只能后退)

git reset --hard HEAD~3(后退3步,退几步写多少数字)


7.reset命令的三个参数对比

–soft:不会碰 index file(暂存区)和 working tree(工作区),仅仅在本地库移动HEAD指针。

请添加图片描述

–mixed:在本地库移动HEAD指针,也会重置暂存区

请添加图片描述

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

8.永久删除文件后找回

rm [file name] 删除文件

ll 查看所有文件

git status(可以看到有个文件被删除了)

git add filename(提交到暂存区)

git commit -m “delete filename” [file name](提交到本地库,一直都会有记录)

git status (此时什么也没有)


git reset --hard HEAD^ (回到上一个版本,就可以找到原来删除的文件)


添加到暂存区的删除文件找回

如果在当前版本里,在暂存区删除了一个文件,

可以直接git reset --hard HEAD(再回到之前的状态)在本地库移动指针,暂存区里就会刷新,即可找回。

删除文件并找回

前提:删除前,文件存在时的状态提交到了本地库。

操作:git reset --hard [指针位置],

指针位置:历史记录或当前位置。

​ 删除操作提交到本地库,指针位置指向历史记录,即可找回。

​ 删除操作尚未提交到本地库,指针位置使用HEAD,即可找回。

比较文件差异

修改一个文件之后,

  1. git diff [filename],将工作区的文件和暂存区比较。(若修改之后add,再diff,就没有变化)

-表示删除的行

+表示新增加的行

  1. git diff [本地库中历史版本] [filename],将工作区的文件和本地库历史记录进行比较。

    git diff HEAD^ [filename],和上一个版本进行比较。

  2. git diff 不带文件名,可以比较当前工作区里所有的文件。

9.分支管理(git比svn好)

在版本控制过程中,使用多条线同时推进多个任务。

master 主干,(一般开发是新建一个自己的本地分支,开发完合并到主分支)

请添加图片描述

分支彼此独立,不想要了可以直接删除。(多个功能同时开发,节省时间)

请添加图片描述

hot_fix:热修复,服务器不停止的。(一般都是热修复)

cold_fix:冷修复,服务器停止了。

好处

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

分支操作

查看当前分支

git branch -v :查看目前分支

创建分支

git branch [分支名]

git branch hot_fix:创建一个hot_fix分支

切换分支

git checkout [分支名]:切换分支

合并分支

第一步:切换到接受修改的分支(被合并,增加新内容)上

第二步:执行执行merge命令

例如:

​ git checkout master[分支名]

​ git branch -v

​ git merge hot_fix[有新内容分支名](合并hot_fix,到master上了)

解决冲突(由人解决)

为什么会产生冲突:两个分支都可以修改,但是两个分支正好修改的位置一样,他就不知道改合并谁了。(git不会产生额外的文件,SVN会)

每一个分支修改后,要add和commit,不然分支会同步。

auto merge失败过后,会让你手动修改 conflicts 然后再 commit 结果


(MERGING)用vim打开看看
请添加图片描述

HEAD后面是当前分支的内容,===后面是另外一个分支的内容。


然后git status,git add,git status(modified),然后↓

merge的时候git commit -m “My second commit,modify good.txt” 不能带文件名

总结

冲突解决:

  1. 编辑文件,删除特殊符号
  2. 把文件修改到满意的程度,保存退出
  3. git add [文件名]
  4. git commit -m “日志信息”(PS:此时commit不能带具体的文件名)

10.Git基本原理

哈希算法

请添加图片描述

请添加图片描述

11.Git保存版本的机制

集中式版本控制工具的文件管理机制(SVN,节约存储空间)

请添加图片描述

Git的文件管理机制(重复文件会保留一个指针)

请添加图片描述

Git文件管理机制细节(“提交对象”)

请添加图片描述

请添加图片描述


12.Git分支管理的本质是 创建和移动指针

文件版本管理,是个链条。

创建分支,是创建新的指针
请添加图片描述

切换分支,只是切换指针

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

GitHub(远程库)

本地库和远程库交互方式

团队内部协作

请添加图片描述

跨团队协作

请添加图片描述

测试远程交互,初始化新的本地库

先创建一个新的文件夹

git init

git add filename

git commit -m “test github” filename

在本地创建 远程库地址 别名

git remote -v:查看别名

git remote add [远程库地址别名] [github给的地址]

1.推送

git push [本地设置的远程库别名] [想要推送的分支]

2.克隆( 用另一个目录 )

git clone [远程地址]

效果:

  1. 完整的把远程库下载到本地
  2. 创建 原来设置的 远程地址别名
  3. 初始化本地库

3.邀请加入团队

Settings > Collaborators > 添加邀请人账号,复制链接

4.远程库修改的拉取

fetch + merge = pull

a.pull 拆开使用

git fetch [远程库地址别名] [远程分支名]

(只是抓取远程库的内容,但是并没有更改本地库文件,原始的内容)

git checkout [远程库别名/分支名]:切换到远程库的分支

git checkout [分支名]:切换回本地的分支

好处

操作复杂时,可以先暂时对 本地文件 不做合并,看好具体事项时候,再merge。


git merge [远程库地址别名/远程分支名]


b.直接使用

git pull [远程库地址别名] [远程分支名](不太会产生冲突)

5.协同开发时冲突的解决

要点:

  1. 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。

  2. 拉取下来后如果进入冲突状态,则按照 “分支冲突解决” 操作即可。

6.跨团队协作(fork、pull request、merge)

以别的账号,在仓库右上角点Fork。

本地修改,然后推送到远程库。

(我们)Pull request(可以对话聊天)

请添加图片描述

(我们做pull request)

请添加图片描述

(对方)审核代码后,merge pull request合并代码。(填写合并信息,日志)

​ confirm merge

(对方)将远程库修改,拉到本地。git pull 远程库别名 远程库分支

7.SSH登录

请添加图片描述

请添加图片描述

8.一些命令

git log:查看历史记录

git reflog:查看历史记录的版本号id

git checkout – XX:把XX文件在工作区的修改全部撤销

git rm XX:删除XX文件

使用时遇到的问题

怎样上传文件夹(github不能有空文件夹)

请添加图片描述

推送拒绝

请添加图片描述

github上看不见图片,更改DNS

解决方案

请添加图片描述

域名查找到真实ip

(对方)审核代码后,merge pull request合并代码。(填写合并信息,日志)

​ confirm merge

(对方)将远程库修改,拉到本地。git pull 远程库别名 远程库分支

参考尚硅谷b站视频

举报

相关推荐

0 条评论