初识Git

2,007 阅读5分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

提到Git,我们得先来了解一下版本控制和版本控制工具😋

版本控制用于个人开发改进迭代以及团队协作中,版本控制工具应该具备以下功能:协同修改、数据备份、版本管理、权限控制、历史记录和分支管理等。接下来,进入正文:

Git简介📜

Git是由Linux之父Linus开发出来的一款分布式版本控制工具,据说他只花了两周就写出来了。Git结构可分为工作区、暂存区以及本地库,其中工作区用于写代码,暂存区用于临时存储,本地库存储历史版本。(图示如下)

image.png

Git和代码托管中心🏠

代码托管中心是用来维护远程库的,在局域网环境下可以是GitLab服务器,在外网环境下可以是GitHub或码云。

Git命令行基本操作✨

1. 本地库操作

本地库初始化

git init,设置签名,签名分为项目级别/仓库级别(仅在当前本地库范围内有效)、系统用户级别(在登录当前操作系统的用户范围有效),后者在设置的时候只是在前者的基础上加多一个"--global"参数。

git init
git config user.name 用户名
git config user.email 邮箱地址
git config --global user.name 用户名
git config --global user.email 邮箱地址

image.png

注意:签名只是为了区分身份,这里的name和email和GitHub上注册的用户名和邮箱没有半毛钱关系,不用保持一致。

查看工作区、暂存区状态

git status

将工作区的新建/修改添加到暂存区

git add 文件名

image.png (题外话:“vim 文件名”操作之后,进入文件,点击“i”进入编辑状态,即可对文件进行自由编辑,退出时按ESC,再输入“:wq”即可)

将暂存区内容提交到本地库

如果是git commit直接加文件名,则会打开对应文件,自己再在第一行输入提交描述信息。

git commit -m “提交描述信息” 文件名

查看历史记录

git log

可添加三个参数,–pretty=oneline/–oneline 或者使用git reflog。

image.png

前进后退历史版本

  • 基于索引值(推荐):git reset --hard加部分索引值(由git reflog可得)即可
  • 使用^符号(只能后退):git reset --hard HEAD(后加几个异或符号表示退几步)
  • 使用~符号(只能后退):git reset --hard HEAD(后使用 ~加后退步数)

image.png

删除文件

rm文件名

image.png

image.png

删除文件后找回

前提是文件存在的状态提交到了暂存区。

git reset --hard [指针位置]

如果删除文件的操作已提交到了本地库,则指针位置指向历史记录,若未提交到本地库,则指针位置指向HEAD。

比较文件

git diff 文件名//将工作区文件与暂存区文件比较
git diff 本地库历史版本 文件名//将工作区文件与本地库历史记录比较

image.png

如果git diff后不加文件名,则目录中有多少个文件就会比较多少个文件。

分支管理

查看分支:

git branch -v

创建分支:

git branch 分支名

切换分支:

git checkout 分支名

合并分支:

首先切换到最终要合并到的分支上,然后 git merge 开发了新内容的分支名 解决合并中出现的冲突:打开冲突文件,删除里面的特殊符号,以及修改为自己想要的版本,然后再提交即可。

2. 远程库操作

团队协同开发或个人迭代开发

先登录GitHub创建一个远程库

image.png 然后复制下远程库地址,

image.png 来到命令行使用“git remote add 远程库别名 远程库地址”为远程库地址创建别名,方便以后访问。 推送分支:git push 远程库别名 欲推送分支名

image.png

如果团队中其他人要协同开发,首先要使用“git clone 远程库地址”下载项目,clone操作实则有三个功效,包括把远程库下载到本地、初始化以及创建origin远程地址别名。 注意团队中其他人要通过邀请之后才可以进行推送操作,邀请通过GitHub上该项目的Settings->Manage access->Invite->Collaborator。

拉取操作:pull操作相当于fetch操作加上merge操作,即: “git pull 远程库地址 欲合并分支名”=“git fetch 远程库别名 欲拉取分支名”+“git merge 远程库别名/欲合并分支名”(在git fetch 之后可使用“git checkout 远程库别名/拉取分支名”,然后查看下拉取下来的分支的内容,确定无误后再执行merge操作)

解决协同开发时冲突:如果不是基于GitHub远程库的最新版所做的修改,不能执行推送操作,必须先拉取。拉取下来后如果处于冲突状态,则按照前面所述“分支冲突解决”操作。

跨团队协作

image.png

团队外的人登录自己的GitHub账号,输入项目地址进行搜索,然后点击Fork,就会把项目fork到自己的账号,再复制自己账号下的项目地址,到命令行进行“git clone 项目地址”操作,修改之后再执行推送操作。推送完成后前往GitHub点击Pull requests->new pull request->Create pull request。

团队内负责项目管理的人登录自己账号,点击Pull requests即可看到团队外的人所提交的修改,点开后审核(查看Commits和Files changed)无误就可以Merge pull request->添加描述->Confirm merge。