0


Git 本地库保姆级教程

一. Git 概述

  • Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
  • Git易于学习、占地面积小、性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1.1 何为版本控制

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

1.2 为什么需要版本控制

  • 从个人开发过渡到团队协作。

1.3 版本控制工具

1.3.1 集中式版本控制工具

CVS、SVN(Subversion)、VSS……

  • 集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来这已经成为版本控制系统的标准做法。

**优缺点: **

  • 优点:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易。
  • 缺点:中央服务器的单点故障期间,谁都无法提交更新,也就无法协同工作。

1.3.2 分布式版本控制系统

Git、Mercurial、Bazaar、Darcs……

  • 像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
  • 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.4 Git简介

1.5 Git工作机制

  • 工作区:代码存放的磁盘的目录位置

1.6 Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。(从本地库推送(push)到远程库)

1.6.1 局域网

    GitLab(基于局域网)

1.6.2 互联网

    Github(基于外网)

    Gitee码云(基于国内网站)

二. Git 安装

1.搜索git官网,会有最新版git下载链接Githttps://git-scm.com/![](https://img-blog.csdnimg.cn/cddc2c0eddf04ef78e228a037f853b0a.png)

2.点击Download for Windows,进入如下界面中点击下载(自动下载与电脑位数匹配的程序)

3.下载之后双击安装

①GNU霸王条款,无脑同意next就行

②安装路径(最好放在没有中文且没有空格的路径里面)

③Git选项配置,推荐默认配置,直接next

④后面一直next就行了

4.如何看是否安装成功

  • 右击桌面选择显示更多选项,有下面的选择则安装成功

三. 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 版本号版本穿梭

3.1 设置用户签名

3.1.1 基本语法

git config --global user.name 用户名

git config --global user.email 邮箱

  1. 打开open git bash here
  2. 按照基本语法设置用户名和邮箱(实际和虚拟的皆行)
  3. 设置好了之后去c盘用户文件夹找到.gitconfig打开,显示你设置的用户名和邮箱即为成功。

3.1.2 说明

    签名的作用是区分不同的操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。

    注意:这里设置的用户签名和邮箱与将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

3.2 初始化本地库

3.2.1 基本语法

git init

3.2.2 案例实操

如图,初始化成功后该文件夹就会出现一个 .git 的文件夹。(如果没有,点击文件夹上方查看打开隐藏项目)

  • Windows系统有D:、C:的盘符存在,所以在文件夹中进入git bush here比较好。
  • git bash here界面里面的命令操作和Linus系统是一样的。

3.3 查看本地库状态

3.3.1 基本语法

git status

3.3.2 初次查看:工作区没有任何文件

  • On branch master // 当前本地库位于分支master
  • No commits yet //目前还没有提交过任何东西
  • nothing to commit //没有东西可以提交

3.3.3 新增文件 & 再次查看状态(检测到未追踪的文件)

  • untracker files //未被追踪的文件(只存在工作区域,git并未追踪 )
  • 使用git add去追踪文件

3.4 添加暂存区

3.4.1 基本语法

git add name(这个name是你要添加的文件或者文件夹的名称)

3.4.2 查看状态(检测到暂存区有新文件)

文件从红色字体变成了绿色字体,说明git已经追踪(知道)了这个文件。

使用“git rm --cached 文件名”可以从暂存区删除你要删除的文件。

3.5 提交本地库

3.5.1 基本语法

git commit -m "日志信息" name(文件名)

3.5.2 查看提交(没有文件需要提交)

  • git bash窗口中第三行显示的就是你commit成功的状态,后面 test hello world 就是基本语法中的“日志信息”。
  • git bush窗口第四行提示:1个文件被改变,7行内容被插入。

3.6 修改文件

3.6.1 基本语法

  • vim name(文件名)
  • 也可以直接打开文件进行修改,不需要在 git bash here 窗口通过指令进行修改。

文件已被修改(相当于新文件),需要从工作区再次add到暂存区,并且需要commit。

3.7 历史版本(版本穿梭)

3.7.1 查看历史版本

  • git reflog 查看版本信息
  • git log 查看版本详细信息

3.7.2 版本穿梭

git reset --hard 版本号(上图中黄色的字符串就是版本号,分为详细版本号和精简版本号)

穿越之后,你的指针就指向你的穿越目标所对应的版本,并修改时从指针所指为基础开始修改。

附:cat 文件名——可以查看文件内容

四. Git分支操作

  • 从右向左看!!!

4.1 什么是分支?

    在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个人物的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也就是指针的运用)

4.2 分支的好处

    同时并行推进多个功能开发,提高开发效率。

    各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.3 分支的操作

命令名称****作用git branch 分支名创建分支git branch -v查看分支git checkout 分支名切换分支git merge 分支名把指定的分支合并到当前分支上

4.3.1 查看分支

①基本语法

git branch -v

②实操案例

4.3.2 创建分支

①基本语法

git branch 分支名

②实操案例

(创建一个test分支,图中我的test分支有内容是因为他会把主分支master的内容复制了一份)

!git后面括号内有个蓝色的master,说明当前分支仍处于master分支

4.3.3 切换分支

①基本语法

git checkout 分支名

②实操案例

(括号内蓝色的分支为test)

4.3.4 修改分支

①基本语法:vim 文件名

②修改

细节讲解:Windows下 git commit 后会进入vim界面。 输入小写字母 i ,此时进入编辑模式,可以输入你想输入的内容。 按下 esc 键,此时退出编辑模式,输入英文语法下的冒号 : ,再输入 wq 即可保存退出

  • 可以看到我的代码已经经过了修改
③查看本地库状态(git status)

第一行on branch test说明此时不在主分支master上,然后修改过后并没有add、commit、push等行为,显示红色(具体细节往前翻至3.3、3.4、3.5)

add后

commit后并查看(cat)

4.3.5 合并分支

切换会原主线master发现并没有修改内容,仍然是原内容

①基本语法

git merge 分支名

②实操案例

(文件内容已修改,这里test分支是基于原master分支上进行修改,因此合并十分顺利,没有产生冲突,具体内容看下一小节)

4.3.6 产生冲突

①冲突产生的原因
    合并分支时,两个分支在同一文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码的内容。
②制造冲突

先修改master主线的内容

再修改test支线的代码内容

③产生冲突

(第二行显示冲突;第三行显示自动合并失败)

注意:下一行代码()中提示werging说明正在合并中

④手动合并

vim打开文件后

  • <<<<<<< HEAD 表示当前分支

(这中间是当前分支的修改内容)

  • ======= 分界线(楚河汉界)

(这中间是产生冲突的分支修改内容)

  • test 表示与主线产生冲突的分支

手动合并很简单啊,只需要把你想要留下的部分留下,不想要的删除,之后再把<<<<=====>>>>这些特殊符号删除即可(这里保持代码行数不变)

这里我删除了三条分界线,第一部分的return和第二部分的printf,然后esc,wq退出即可。

4.3.7 解决冲突

由4.3.6 手动合并之后,我们还需要两步操作(add、commit)

①add(添加到暂存区)

②commit(执行提交)

注意注意!!!

    此时使用git commit命令时不能带文件名!!!

这里我尝试commit时加上了文件名,然后给git报错:不知道commit哪一个分支里面的demo.c

不带文件名之后成功合并,可以看下一行代码()中已经没有merging,而是master

!!!这时候的主线还在master上,所以手动合并的结果在master上显示,并不会在test中有所修改。

4.3.8 删除分支

注意:当你在你要删除的分支上的时候,git是不允许你去删除分支的!

①基本语法
// 删除本地分支
git branch -d localBranchName

// 删除远程分支
git push origin --delete remoteBranchName
②删除本地分支
    如果你还在一个分支上,那么 Git 是不允许你删除这个分支的。所以,请记得退出分支:
git checkout master

    通过 
git branch -d <branch>

删除一个分支,比如:

git branch -d fix/authentication

    当一个分支被推送并合并到远程分支后,
-d

才会本地删除该分支。如果一个分支还没有被推送或者合并,那么可以使用

-D

强制删除它。

③删除远程分支
  • 使用这个命令可以远程删除分支:git push <remote> --delete <branch>
  • 比如: git push origin --delete fix/authentication,这个分支就被远程删除了。
  • 你也可以使用这行简短的命令来远程删除分支:git push <remote> :<branch>,比如:git push origin :fix/authentication
  • 如果你得到以下错误消息,可能是因为其他人已经删除了这个分支。
error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'git@repository_name'
  • 使用以下命令同步分支列表:
git fetch -p
-p

的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。

4.4 创建分支和切换分支图解

master

创建hot-fix(热修)分支【热修是常用分支名称,本人为了偷懒就写了一个test】

将hot-fix分支合并至master主线

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

    HEAD如果指向master,那么我们就在master分支上;如果指向hot-fix,我们就在hot-fix分支上。(在.git里面找到HEAD文件可以查看当前指针所指向分支)

    所以啊,所谓的切换分支,其实就是移动HEAD指针指向不同的地方。 (wok!真心累死我了,爆肝完第四章)
标签: git github

本文转载自: https://blog.csdn.net/2303_77414881/article/details/132550045
版权归原作者 Serendipity 所有, 如有侵权,请联系我们删除。

“Git 本地库保姆级教程”的评论:

还没有评论