关于git,学会这个就够用了

Observe more,Think more

注:关于git,这是一篇总结性文章,希望对您有所帮助

雷锋和雷峰塔、老婆和老婆饼、js和jsp、git和github,所以他们到底是什么关系。。。
在这里插入图片描述
那么,我们今天来聊一聊 git和github

一、 关于 git 的一些简介

什么是 git:
官方说明:Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容
简而言之,git是一个分布式版本控制系统

在这里默认你已经安装好了适用于你个人开发平台的 git 版本,下面我们将首先进行一些配置

  1. 配置信息

    由于 git 是分布式版本控制工具,因此我们需要一些信息(用户名、邮箱)来唯一标识个人身份

    git config --global user.name="your name"
    git config --global user.email="your email"
    

    需要注意的是:当使用 git config 命令中的 --global 参数时,你的系统中所有git仓库都将使用这个配置,当然你也可以针对某一个仓库设置姓名和密码

    你可以使用如下命令,来查看你的个人信息

    git config user.name              # 查看用户名
    git config user.password          # 查看用户密码
    git config user.email             # 查看用户邮箱
    git config --list                 # 查看配置信息
    

    如果你需要修改这些信息,你可以这样做

    git config --global user.name = "new name"    # 修改用户名,同样的可以修改密码和邮箱
    
  2. 版本库

    在了解版本库之前,我们先来看下 git 各区域之间的关系
    在这里插入图片描述

workspace # 工作区
index # 暂存区(.git文件中有一个index文件,用于管理从工作区提交的修改)
repository # 版本库
remote # 远程仓库

版本库(repository)也叫版本仓库,你可以理解为就是一个文件夹,只是这个文件夹的修改、删除都会被 git 进行管理,下面我们就来创建这个文件夹

mkdir fileName         # 创建一个仓库(目录)
cd fileName            # 进入这个仓库(目录)
git init               # 初始化这个仓库,使其可以被git管理

我们新建了一个文件夹,并且执行了 git init 操作
在这个在这个文件夹中,你会发现有一个 .git 的文件夹,在其内部有一个 index 文件,这个 index 文件就是你的暂存区了。
.git 文件夹中除了 index 以外的其他区域就是你的版本库。
并且,除了 .git 文件夹,在这个目录中的其他区域(文件、目录)就是你的工作区。

我们可以称,刚刚我们建的这个fileName的文件夹就是我们的本地仓库,里面包含了我们的工作区、暂存区、版本库
到此为止,你终于拥有了自己的本地 git 仓库
在这里插入图片描述
当我们继续执行 git 三连时,我们工作区的文件就可以提交到版本库里面去了。

# 如果你需要查看工作区与暂存区相比有哪些内容进行了修改
git status
# 1.将本地区的修改添加到暂存区
git add 1.md
git add 2.md
# 当然,上面两步git add 可以用一步来完成
git add .          # 将全部本地区的修改,添加到暂存区
# 2.将暂存区修改提交到本地仓库
git commit -m "提交说明"

到此为止,我们已经知道怎样将本地工作区的代码提交到版本库了,这是一件让人感到快乐的事情。

二、管理版本

在上文中,我们已经知道怎样创建本地版本仓库,并将工作区修改提交到版本库,下面我们就来学习下,如何管理我们得版本

  1. 查看修改

当我们在工作去进行了一次大范围的修改,当我们要提交时,却忘记具体修改哪些文件时可以使用如下命令:

# 查看修改了哪些文件
git status
# 查看某一个文件的哪些地方进行了修改
git diff fileName
  1. 版本回退

在实际工作中,我们会进行很多此提交,当我们想要再次查看某一次提交时,我们可以使用 git log

git log         # 查看提交(commit)历史,git会按照提交时间由近及远的顺序,展现出每一次提交
commit c0769bf3b93d1c0d06bb96ba40e1ad6e6f9ad210 (HEAD -> master)
Author: suaw <945565237@qq.com>
Date:   Sun Jan 31 13:54:14 2021 +0800

    change 2.md

commit aa8aef11251ec5211221d3abc4a78f4a886ddcda
Author: suaw <945565237@qq.com>
Date:   Sun Jan 31 13:53:28 2021 +0800

    change 1.md

commit 29fac03bc507134b89841bdc7c48f8b14012b7c7
Author: suaw <945565237@qq.com>
Date:   Sun Jan 31 13:52:47 2021 +0800

    change 1.md and 2.md

我们知道了提交了几次,以及提交的commit_id,当我们想知道提交的内容时,我们可以采用如下命令

git show aa8aef1125           # 使用 git show + commit_id 可以查看某一次提交的内容 
commit aa8aef11251ec5211221d3abc4a78f4a886ddcda
Author: suaw <945565237@qq.com>
Date:   Sun Jan 31 13:53:28 2021 +0800

    change 1.md

diff --git a/1.md b/1.md
index 152aadf..5d6a050 100644
--- a/1.md
+++ b/1.md
@@ -1,2 +1,4 @@
 ### hello world

+### hello js

上面的这次提交我们可以看到 1.md 文件增加了 ** hello js** 这段话

现在因为某些原因,这时你想要回退到上次的提交,你可以这样做

git reset --hard HEAD^
# 或者这样做,找到需要回退的那次commit_id,你只需要输入id的前几位就可以,git会帮你自动找到该次提交
git reset -- hard c0769bf3b9

这时你会看到你的工作区内容会变成上一次提交的内容

这时关于版本回退我们可以做出这样的总结

git reset -- hard HEAD^           # 回退到上一次提交
git reset -- hard HEAD^^          # 回退到上上次提交
git reset -- hard HEAD~100        # 回退到第前一百次提交
git reset hard HEAD commit_id     # 回退到指定的某一次提交

需要注意的是:这里的回退需要保证工作区没有修改,如果做了修改可以进行手动回退到前一次提交的状态,或者我们在后面的介绍再进行介绍其他修改方式

  1. 管理修改

上面的内容我们探讨了:已提交到版本库,但工作区还未进行修改的内容进行管理

实际上,我们大部分需要处理的是工作区修改后的情况,一般有这两种情况:正常修改后需要继续提交、修改后发现无需提交需要撤销修改

  • 正常提交
    正常提交是很常见的情况,我们只需要进行 git 三连,提交到版本库即可
git status               # 查看已修改的文件
git add                  # 添加需要提交的修改到暂存区
git commit -m ""         # 将暂存区的修改提交到版本库
  • 撤销修改

当工作区进行了修改,还未提交到暂存区,然而你发现这些修改不需要进行时

git checkout -- fileName / git restore  fileName       # 撤销工作区的修改

当工作区进行了修改,并且提交到了暂存区,然而你发现这个修改不需要进行时

git reset HEAD fileName / git restore --staged fileName         # 将已提交到暂存区的修改,放回到工作区

git checkout -- fileName / git restore  fileName                # 撤销工作区的修改

当工作区进行了修改,并且提交到了暂存区后又进行了修改,然而你发现这个修改不需要进行时

git reset HEAD fileName / git restore --staged fileName      # 将暂存区的修改返回到工作区
git checkout --fileName / git restore fileName               # 撤销工作区的修改 

到这里我们差不多了解完了在本地仓库的各种操作,我们学会了如何初始画一个本地仓库、如何进行 git 三连提交修改到版本库、如何回退版本、如何将暂存区的修改返回到工作区以及如何撤销工作区的修改

后面的内容我们就来聊一聊,本地仓库和远程仓库的关联操作
在这里插入图片描述

三、远程仓库
  1. 关联远程仓库

现实中,我们的开发常常需要建立一个远程仓库,来实现所有人员协同开发

这里我们以 github 为例,首先你需要创建一个远程仓库,其次将远程仓库与本地仓库进行管理。这一步默认你所有的github配置以完成

在GitHub页面你可以看到你的仓库地址,执行以下命令,进行首次关联。

git remote add origin XXXX          # XXXX为你的远程仓库地址,origin为你的远程仓库名称,这里你可以任意设置

git push -u origin master           # 由于远程仓库是空的,我们第一次推送时加上 -u 这个参数,
                                    #不光会把本地master分支推送到远程,还会将本地master分支和远程master分支建立连接

完成上面一步,你会可以看到你的远程仓库中已经有了内容,并且和你本地master分支保持一致

当其他同事需要和我们一起协同开发时,首次操作需要克隆一份远程仓库的代码到本地来,只要执行以下命令即可

git clone XXXX       # XXXX为远程仓库地址,这样本地就拥有一份远程仓库master分支最新的代码

到这里你已经学会如何创建一个远程仓库,并且知道了如何拉取远程仓库的代码,下面我们就开始多人协作开发了

  1. 分支管理

在前面的内容中,我们都是使用master分支进行操作,git 会将master分支的每一次修改提交穿成一条时间线,HEAD严格来说不是指向分支,而是指向master,master再指向提交,因此可以理解为master指向分支。

  • 一开始的时候,master是一条线,git 用master指向分支,再用HEAD指向master,这样就能确定当前的分支,以及当前的提交点
    在这里插入图片描述
    随着每一次提交,master也会向前移动,这样随着提交的次数越多,这条线就越长

  • 当创建新的分支dev时,git 会创建一个指针dev指向当前master的位置,再将HEAD指向dev,这样就表示在dev分支上了

git checkout -b dev         # 创建一个新的分支,并切换到该分支上

# 或者使用下面两条命令,先创建一个新的分支,再切换到新分支上去
git branch dev
git checkout dev

# 查看已有分支,以及当前分支
git branch

在这里插入图片描述
因此我们可以理解:git 创建分支只是增加了一个指针,修改HEAD的指向,文件并不会发生变化

  • 当我们在dev上进行修改并提交时,dev指针就会向前移动,而master分支保持不动
    在这里插入图片描述
  • 当我们在dev上的完成开发,需要将dev分支合并到master上时,也很简单,只需要将master分支的指针移动到dev分支即可
    在这里插入图片描述

毫无疑问,git 合并分支的速度也是很快的,因为它只是将指针进行了修改

# 合并dev分支到master,先切换到master分支
git checkout master

# 合并dev分支
git merge dev

# 这时你甚至可以删除dev分支
git branch -d dev

到这里我们知道了,如何提交代码到远程仓库,如何合并代码。需要注意的是,我们可以从dev分支拉取master分支的代码,但是不能将dev分支的代码提交到master,这是我之前疑惑的地方
如果master分支需要获取dev分支的代码,可以按照如下操作

# 切换到dev分支,并提交dev分支的代码
git chaeckout dev
git add .
git commmit -m "";
git push                # 将代码推送到远程仓库的dev分支

# 切换到master分支,并合并dev分支代码
git checkout master
git merge dev
git push origin master

截至目前,我们已经学会了基本的协同开发中提交代码、切换分支、合并代码、拉取代码、推送代码等工作。

开发中我们常常会遇到一些以外的情况,比如:代码冲突、bug修改登等问题,我们会在后面的内容中继续介绍这些问题的处理场景。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值