【Git手册(上)】:记录Git的相关常用基础命令(超详细)

120 阅读8分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

1️⃣前言

大家好,我是翼同学。今天学习的笔记内容是:

  • Git常用基础命令

备注


2️⃣概述

2.1、版本控制

在实际开发中,随着新的需求以及新的Bug不断涌现,版本控制的概念是非常重要的,而版本控制工具使得我们可以追踪多个版本的开发和维护活动,其提供了版本管理的功能,可以存储、追踪文件的修改历史,我们可以浏览文件的变动历史,因此版本控制工具是开发中的必备工具之一。

2.2、工具

版本控制工具一般可以分为两种:

  • 集中式版本控制:版本库集中存放在中央服务器,用户在开发中可以从中央服务器下载代码,修改完毕后再提交到中央版本库中去。其中代表工具有:CVSSVN
  • 分布式版本控制:分布式版本控制并没有“中央服务器”的概念,每个用户的电脑都是一个完整的版本库,当多人协作时只需将自己的代码修改推送给对方既可。其中代表工具有:Git

2.3、Git的介绍

分布式与集中式的最大区别在于开发者可以提交到本地,用户通过克隆就可以在本地机器上拷贝一个完整的仓库,而不必不必服务器端的软件支持。

Git就是一个开源的分布式的版本控制工具

最初Git是由Linus Torvalds为了帮助管理 Linux 内核开发而开发的版本控制工具。

Git的特点在于

  • 高速且灵活
  • 可离线工作
  • 允许多个并行开发的分支
  • 适合分布式开发
  • 有能力高效管理类似Linux内核一样的超大规模项目

备注:

2.4、Git基本配置

安装Git后,首先要做的就是设置用户名以及邮件地址,这是因为每次Git提交,都会使用该用户的信息。

步骤如下:

  1. 打开 Git Bash
  2. 设置用户信息:git config --global user.name "你的名字"以及git config --global user.email "你的邮箱"
  3. 配置后可查看信息:git config --global user.namegit config --global user.email

2.5、为常用指令设置别名

我们可以为一些指令设置别名,这样就不用每次使用时都得输入若干参数。

设置别名的步骤:

  • (1)、打开Git Bash,执行语句:touch ~/.bashrc,可创建.bashrc文件。

image.png

  • (2)、在.bashrc文件中,输入一下内容:
# 用于输入git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件以及基本信息
alias ll='ls -al'

如下所示:

image.png

  • (3)、最后一步,打开Git Bash,执行source ~/.bashrc

image.png

这样,当我们每次查看提交日志时,就不用在git log后面添加一堆参数,直接输入快捷语句git-log即可。

3️⃣Git的使用

3.1、获取本地仓库

要使用Git对我们的代码进行版本控制,则必须获取本地仓库。

步骤如下:

  1. 创建一个文件夹作为我们本地的Git仓库;
  2. 进入这个文件夹,鼠标点击右键,打开Git Bash窗口,执行命令:git init

举个例子:

  • 新建一个文件夹git-test

image.png

  • 进入新建的文件夹,打开Git Bash窗口,输入语句git init

image.png

备注

  • 如果本地仓库创建成功,则可以在文件夹下看见隐藏的.git目录

image.png

3.2、基础指令

3.2.1、文件状态

Git工作目录下,文件一般会有四种状态:未跟踪未暂存已暂存还有已提交。这些状态随着我们执行Git命令而发生变化。

具体看下面示意图:

image.png


3.2.2、工作区、暂存区以及仓库

  • 工作区

就是你在电脑里能看到的目录,也就是某个文件夹。

  • 暂存区

也就是存放在.git目录下的index文件中,即.git/index。有时我们将暂存区称作索引。

  • 仓库(也就是版本库)

在工作区下的隐藏目录.git就是当前的版本库。


3.2.3、查看修改的状态

  • 命令:git status
  • 作用:查看修改的状态(暂存区 / 工作区)。

3.2.4、添加单个文件到暂存区

  • 命令:git add 文件名
  • 作用:将单个文件添加到暂存区。

3.2.5、将所有修改都加入暂存区

  • 命令:git add .
  • 作用:将所有修改都加入暂存区去。

3.2.6、提交暂存区到本地仓库

  • 命令:git commit -m "注释内容"
  • 作用:将暂存区里的内容提交到本地仓库的当前分支。

备注:

  • Linux 系统中,commit需要信息使用单引号'括起来
  • 而在Windows 系统下,commit 信息使用双引号"括起来。

3.2.7、查看提交日志

  • 命令:git log
  • 作用:查看提交日志内容。

需要注意,该语句可以带有可选参数:

git log [--all] [--pretty=oneline] [abbrev-commit] [--graph]

各参数的作用如下:

  • --all:显示所有分支;
  • --pretty=oneline:将提交信息显示为一行;
  • abbrev-commit:使输出的内容更加简短;
  • --graph:以图的形式显示。

3.2.8、版本回退

  • 命令:git reset --hard commitID
  • 作用:版本切换,也就是版本回退

备注:使用git log指令可以查看到commitID


3.2.9、查看已删除的记录

  • 命令:git reflog
  • 作用:查看已经删除的提交记录

3.3、分支

几乎所有版本控制系统都以某种形式支持分支。

使用意味着你可以从开发主线上分离开来进行重大Bug的修改,开发新功能等。一个分支代表一条独立的开发线,并不会影响主线的开发。

需要注意:在执行git init时,默认情况下Git就会为你创建master分支。


3.3.1、查看本地分支

  • 命令:git branch

3.3.2、创建本地分支

  • 命令:git branch 分支名

3.3.3、切换分支

  • 命令:git checkout 分支名

3.3.4、创建并切换分支

  • 命令:git checkout -b 分支名

3.3.5、合并分支

  • 命令:git merge 分支名

3.3.6、删除分支(需要检查)

  • 命令:git branch -d 分支名

3.3.7、删除分支(强制删除)

  • 命令:git branch -D 分支名

3.3.8、解决合并分支的冲突

为什么需要解决冲突?

当两个分支上对文件的修改存在冲突时,比如两个分支同时修改了同一文件中的同一行代码,此时Git无法判断应该怎么合并,这时候就需要手动解决该冲突问题。

步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件添加到暂存区中
  3. 提交到版本库中

3.3.9、分支使用原则

在开发中,一般可以有以下原则:

  1. master分支:属于生产分支,也就是主分支,可作为线上运行的应用对应分支。
  2. develop分支:作为开发分支,一般用于开发部的主要开发分支,该分支会不断有新的feature分支合并进来。当阶段开发完成后develop分支将合并到master分支上去,准备上线;
  3. feature/xxx分支:该分支是从develop分支上创建而来,用于并行开发,当任务完成后可合并到develop分支上去;
  4. hotfix/xxx分支:一般用于线上bug修复,修复完成后需要合并到 master分支和develop分支,合并完成后hotfix分支可以删除;

当然,还有其他命名的分支,比如代码测试分支test,预上线分支pre等,具体分支的命名应看公司的规定。


3.4、小结

image.png

记录:

  • HEAD用于指向当前分支,在上图中,HEAD指向了master分支。
  • objects表示Git的对象库,实际位于".git/objects"目录下,包含了创建的各种对象及内容。
  • 当对工作区中修改或新增的文件执行git add命令时,暂存区的目录树被更新,同时该文件的内容会被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作git commit时,暂存区的目录树将写入到版本库中的对象库object,此时master分支也会做相应的更新。
  • 当执行git reset master命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。
  • 当执行git checkout -- <file> 命令时,暂存区中指定的文件将替换工作区的文件。此时工作区未添加到暂存区中的改动将被清除。
  • 当执行git checkout HEAD <file> 命令,此时HEAD指向的master分支中的指定文件将替换暂存区和以及工作区中的文件。需要注意,这个操作将会清除工作区中未提交的改动,同时还会清除暂存区中未提交的改动,因此得慎用。

4️⃣写在最后

好了,今天的笔记就记到这里。