• 有关Git(小白一看就懂)入门版


    git的使用是在工作中必备的技能,本系列重写自己曾经学习git的过程,按照从创建git仓库开始操作,赋每一步的演示图,让小白跟着文章操作,一步一步入门

    目录

    git基本概念

    git使用基本流程

    文件的四种状态

    git的使用和基本命令:

    分支操作

    链接远程仓库


    git基本概念

    四个工作区:

    git本地有三个工作域:工作区(working directory), 暂存区(stage/index), 资源库(repository)。如 果再算上远程服务器上的git仓库(remote directory)就可以分为四个工作域。其关系如下:

    1. Workspace: 工作区,就是你平时存放项目代码的地方
    2. Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件 列表信息
    3. Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数 据。其中HEAD指向最新放入仓库的版本
    4. Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据 交换 

    git使用基本流程

    1. 在工作目录中添加,修改文件

    2. 将需要进行版本管理的文件放入暂存区

    3. 将暂存区的文件提交到git仓库

    文件的四种状态

    Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态 变为Staged.

    Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文 件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

    Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可 进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即 从库中取出文件, 覆盖当前修改

    Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

    git的使用和基本命令:

    首先确保自己安装了git工具

    linux下使用:

    sudo apt install git 管理员状态

    创建本地仓库

    首先创建一个新目录,使用git init将当前目录变为一个可以通过git管理的仓库

    git init

    初始化后会生成git的配置文件目录,普通的"ls"命令是看不到的,我们需要使用ls -a查看隐藏目录

    演示如图:

     注意事项: 第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了:

    1. git config --global user.name "你的用户名"
    2. git config --global user.email "你的邮箱"

    这里我配置过了,这里就不演示了


    下来将新创建的文件,代码什么的添加到暂存区

    1. 使用git add filename 添加文件到暂存区
    2. filename就是你要添加的文件名

    首先我在这里写一段代码,仅仅只是写了个主函数,后面我会不断完善这个文件,上传各个版本。此时main.c提交到暂存区中


    此时我们查看一下仓库的状态

    使用git status 查看仓库状态

     显示我们暂未提交到本地仓库,位于分支master上(master是主分支),分支后面会讲


    接下来我们正式将刚刚的main.c提交到本地仓库中

    使用 git commit -m "版本描述信息" 提交版本到仓库

    此时我们才是真正提交成功了。


    我们使用命令去查看一下刚刚的提交信息

    使用git log查看提交的历史记录

    head是指向的意思,表示这次提交到哪儿,head->master代表这次提交到master主仓库,如果是head->分支仓库则代表提交到分支仓库


    我们可以使用命令去重写上一次提交的注释

    git commit --amend

    上一次的注释中我们写的是“创建主函数”,我想修改为“创建main.c函数”,终端执行上述语句就会进入此页面 

    进入编辑页面修改注释,修改完成之后根据下面的提示,我们选择ctrl o写入,就会得到下面界面

     再按下回车,我们就写入成功了,回退到起始界面

    此时我们ctrl x离开退出,git log查看日志,但其实你一退出后git commit --amend命令下面就会显示修改之后的注释,此时就成功变成了“创建main.c”

    接下来我们在更改一个版本(提交跟上述过程一样)的代码演示下面的命令:

    我们此时在文件中添加个一个add求和的函数,查看日志会发现,此时head指向最新一个版本


    下来使用命令查看仓库所有已提交的操作日志

    git reflog 查看对仓库的操作日志

    head前面的序号就是log查看里那一串长序号的前面几位(这几位就已经够区分不同版本了),我们后面也可以根据这短短的序号去查看所需版本的文件


    如果我们想查看以前版本的文件怎么办呢?此时我们的文件是处在添加了add函数的时候,如果我们想回到最初创建main函数的时候,就需要使用回退版本的命令了,下面进行演示:

    此时我们的代码长这样:

    1. 使用git reset --hard HEAD^ 回退版本
    2. ^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本
    3. 那么git reset --hard HEAD^^就是回退两个版本^^^就是三个版本,一次类推
    4. 那么还有一种简便方法
    5. git reset --hard HEAD~3
    6. 后面的~3,代表以当前版本为基数,回滚多少次。HEAD~3代表回滚master前三个版本
    7. 还有一种方式,我们用版本号去回退,前面讲git log或者git reflog的时候都能看到
    8. 版本他独有的版本号,也讲了可以用他去回退版本
    9. git reset --hard 版本号

    有三种模式

    --soft 、--mixed以及--hard是三个恢复等级。

    • 使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
    • 如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
    • 如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
       

     此时我们会发现代码回归到上个版本的样子了

     此时你git log会发现head就跑到这个版本了

    如果我们想再回到之前那个add的最新版本怎么办?我们会发现git log已经查看不到add版本了。

    上面我们讲了git reflog这个是查看对版本仓库的操作,我们提交版本,回退等等操作都属于对仓库的操作。我们使用git reflog查看一下历史操作

    会发现里面有我们所有的操作历史,同样有所对应的版本号,我们就可以用版本号去回退到我们想要的版本了,add的版本号为773e37a,(之前git log的时候会发现是很长一串773e37a...),不过这里前几位就可以唯一标识了,我们就可以用他去回退版本

    示例操作如下:

    查看文件,成功回到add时期版本

    当然我们回退上一步,回退任何版本都可以用版本号来操作


    那么如果我们不小心将工作区的文件删除了怎么办呢?或者说在这一版上写了一部分代码,但是突然不想要了,觉得删代码麻烦

    那么可以我们从版本库中把此时最新的一版拿出来(我们删之前或者修改之前的),或者说是放弃此时对于工作区的修改的操作

    1. git checkout filename 放弃对工作区代码的修改
    2. filename就是修改或者删的那个文件

    我们会发现文件又回来了~


    接下来比如我们修改了一部分代码,但是还未add,我们想知道修改了哪一部分怎么办?(代码量很多,自己忘记了)

    如上,我们新增了一句 int a=10;

    使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示 添加的一行前面有‘+’号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近一次比较。如果是和上上个版本比较那就是HEAD ^,依次同理HEAD就是当前版本要清楚

    一般都是把现在写的代码和当前版本去比较

     


    那么此时如果 我将上面这一次的改动提交到了暂存区,但是我后面发现我没有写完或者不想要了,想撤销怎么办呢?

    我先提交了,查看一下状态显示我是暂时放进了暂存区 

    那么撤销工作的命令就是:

    使用git reset HEAD filename 从暂存区撤销

    此时我们刚刚提交到暂存区的操作就被撤销了


    有时候我们可能会删除一个文件,就是原来版本中有这个文件使我们需要的,不过后面我们写了更好的一版,这个文件不需要了(从版本仓库中删去),我们就要删除他。

    下面我进行操作演示:

    需要用到

    用git rm filename 删除一个文件

     新增添一文件max.c进入,提交之后,此时之后我们现在就会有两个文件了

    如果我们用普通的rm 文件去删除(只是本地工作区删掉了),后续用git checkout max.c又可以恢复max.c文件

    如果直接rm删除文件,只是删除工作区的文件,只是与版本库不一样了,git status 会提示你。

    恢复工作区文件:git checkout  -- 文件名

    那么我们如果想以后都不用了,就是从版本仓库中把他删去,用下面命令

    使用git rm filename 删除一个文件, 此时提交到暂存区,需要commit后才在版本库中删除

     此时max.c文件在版本库中被删掉


    下面来聊聊分支相关的操作,就像上面的master一样 ,看图说话

    那么有一个切换分支的东西,就是比如上图,我们创建了新分支dev,想要在上面实现一些代码。那么就需要把head指针去指向新分支(head是指向的意思,表示这次提交到哪儿),那么之后写的代码都是在这个新分支上面。

     

    切换分支是非常常用的! 

    分支操作

    查看当前都有哪些分支

    查看分支: git branch

    此时我们只有master这一个分支


    创建一个新分支

    创建分支: git branch 分支名

    此时head还是指向master的


    切换分支

    切换分支: git checkout 分支名

     此时发现head指向了dev分支,我们下面如果写代码提交,那么都会弄到这个分支上面


    此时我们提交代码,编写一个fun函数,就会出现在dev分支上


    此时我们切换到master分支,就会发现fun函数不在

     如果我们现在再在master分支上面对这个main函数进行修改,新添一个max函数


    还有一个快捷的方式去创建新的分支并切换

    创建并切换到该分支: git checkout -b 分支名

    假如现在我们想把dev分支上的代码和master上的合并,该怎么办呢?

    git merge 分支名

    1. 合并某个分支到当前分支: git merge 分支名 ,合并时可能产生冲突,需要解决冲突。
    2. 有时需要禁止快速合并,可执行:git merge --no-ff -m '描述' 分支名

    此时在主分支master上,合并发现有冲突,为啥嘞?

     我们打开代码看看

     假如我们两个都想要,那么手动修改一下,提交此版本。这就是我们的最终版


    如果我们现在想删除一个分支怎么办呢?

    首先我们先新建一个新分支gk,切换到别的分支,然后去删除这个gk分支

    删除分支,不能删除当前所处分支,切换到其它分支再删除: git branch -d 分支名
    


    好用的常用操作:

    历史记录一行显示 

    git log --pretty=oneline

     

     


    以图表形式显示分支:

    git log --graph


    有时候我们在工作的时候比如修改了一部分代码,但是还未完成,因此没有提交,这时候需要我们转到另一个分支上去做一些操作,如果我们不保存这些未完成的代码,如果切换分支过后,原分支这些修改未提交的代码就会不见了。因此我们需要保存此时工作区的状态

    保护现场 git stash,当前工作区有代码修改了,是不能切换到其他分支,可以先保存现场,再切换 

    git stash

    我们先不保存修改代码看看是什么样的。我们现在处在master分支,对于main.c做一些修改,未提交,然后切换到dev分支

     

     他会提示我们要么提交代码要么去保存

    我们去保存一下现在的工作现场,去查看保存之后的代码会发现,代码显示的是你未修改之前的状态,你修改的那部分,他给你保存在了别的地方(就是我刚刚修改的调用add函数的代码)

    此时就保存了现场,成功切换分支   


    那么当我们在dev分支上一顿操作结束之后,我们需要回到master去处理刚刚没弄完的代码怎么整呢? 

    首先我们先切回master,你查看你的代码文件发现并没有刚刚修改的那部分,那是因为,保存现场之后git把那部分代码存到别的地方去了,此时我们需要先看看我们都保存了哪些现场,再根据需要去恢复那部分保存的现场代码

    列出所有保存的现场信息

     git stash list

                 我们看到现在就保存了一个现场,现在就需要取出现场,去恢复代码了


    取出某次的现场信息,继续工作 :

    1. git stash pop默认是最近一次
    2. git stash pop "stash@{1}" 加上编号,取不同的现场信息

    如果有多个现场,也可以加上编号"stash@{1}"指定获取某一个。不同分支的现场,应该回到对应分支再获取,否则会自动合并现场到当前分支的工作区。                                                                    此时回到最初调用了add函数的状态

                       

    这样的话git基础的本地操作流程就说完了              

    链接远程仓库

    可以用github和gitee去尝试链接一下

    这一部分一定是工作之后最经常用的,具体操作演示这里就不多说了,网上有太多的教程了

    这里把每天都要用的命令列在这里

    1. . 克隆项目:git clone 项目地址
    2. . 提交分支到远程仓库:git push origin 分支名
    3. . 提交分支到远程仓库,并跟踪分支 :git push -u origin 分支名
    4. . 拉取远程服务器上的分支更新到本地 :git pull origin 分支名

    到此这一版本的git学习就到这里了,我都是按照当初我学习的步骤演示了一遍,小白看完文章跟着操作,一定会对git有一定的了解的

  • 相关阅读:
    [附源码]计算机毕业设计JAVA小型医院药品及门诊管理
    持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践
    用 Gaussian Process 建模 state-action 空间相关性,加速 Multi-Fidelity RL
    Hadoop Hive入门
    Mysql与GoldenDB中如何利用sql脚本添加字段和数据表名的备注
    Apollo配置中心-手把手教你搭建Apollo配置中心运行环境
    简易的Python小游戏,上班可玩一天,零基础小白可练手
    网页制作课作业基于HTML+CSS+JavaScript+jquery仿慕课网教学培训网站设计实例 企业网站制作
    软件项目管理 5.3.敏捷任务分解
    re:从0开始的CSS之旅 16. 高度塌陷问题
  • 原文地址:https://blog.csdn.net/weixin_51609435/article/details/127817507