携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
1️⃣前言
大家好,我是翼同学。今天学习的笔记内容是:
- Git常用基础命令
备注
- 学习内容【黑马程序员Git全套教程】
2️⃣概述
2.1、版本控制
在实际开发中,随着新的需求以及新的Bug不断涌现,版本控制的概念是非常重要的,而版本控制工具使得我们可以追踪多个版本的开发和维护活动,其提供了版本管理的功能,可以存储、追踪文件的修改历史,我们可以浏览文件的变动历史,因此版本控制工具是开发中的必备工具之一。
2.2、工具
版本控制工具一般可以分为两种:
- 集中式版本控制:版本库集中存放在中央服务器,用户在开发中可以从中央服务器下载代码,修改完毕后再提交到中央版本库中去。其中代表工具有:
CVS和SVN; - 分布式版本控制:分布式版本控制并没有“中央服务器”的概念,每个用户的电脑都是一个完整的版本库,当多人协作时只需将自己的代码修改推送给对方既可。其中代表工具有:
Git。
2.3、Git的介绍
分布式与集中式的最大区别在于开发者可以提交到本地,用户通过克隆就可以在本地机器上拷贝一个完整的仓库,而不必不必服务器端的软件支持。
而Git就是一个开源的,分布式的,版本控制工具。
最初Git是由Linus Torvalds为了帮助管理 Linux 内核开发而开发的版本控制工具。
Git的特点在于:
- 高速且灵活
- 可离线工作
- 允许多个并行开发的分支
- 适合分布式开发
- 有能力高效管理类似Linux内核一样的超大规模项目
备注:
- Git命令手册地址:git-scm.com/docs
- Git下载地址:git-scm.com/download
2.4、Git基本配置
安装Git后,首先要做的就是设置用户名以及邮件地址,这是因为每次Git提交,都会使用该用户的信息。
步骤如下:
- 打开 Git Bash
- 设置用户信息:
git config --global user.name "你的名字"以及git config --global user.email "你的邮箱" - 配置后可查看信息:
git config --global user.name和git config --global user.email
2.5、为常用指令设置别名
我们可以为一些指令设置别名,这样就不用每次使用时都得输入若干参数。
设置别名的步骤:
- (1)、打开
Git Bash,执行语句:touch ~/.bashrc,可创建.bashrc文件。
- (2)、在
.bashrc文件中,输入一下内容:
# 用于输入git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件以及基本信息
alias ll='ls -al'
如下所示:
- (3)、最后一步,打开
Git Bash,执行source ~/.bashrc
这样,当我们每次查看提交日志时,就不用在git log后面添加一堆参数,直接输入快捷语句git-log即可。
3️⃣Git的使用
3.1、获取本地仓库
要使用Git对我们的代码进行版本控制,则必须获取本地仓库。
步骤如下:
- 创建一个文件夹作为我们本地的Git仓库;
- 进入这个文件夹,鼠标点击右键,打开Git Bash窗口,执行命令:
git init
举个例子:
- 新建一个文件夹
git-test
- 进入新建的文件夹,打开
Git Bash窗口,输入语句git init
备注:
- 如果本地仓库创建成功,则可以在文件夹下看见隐藏的
.git目录
3.2、基础指令
3.2.1、文件状态
在Git工作目录下,文件一般会有四种状态:未跟踪,未暂存,已暂存还有已提交。这些状态随着我们执行Git命令而发生变化。
具体看下面示意图:
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无法判断应该怎么合并,这时候就需要手动解决该冲突问题。
步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件添加到暂存区中
- 提交到版本库中
3.3.9、分支使用原则
在开发中,一般可以有以下原则:
master分支:属于生产分支,也就是主分支,可作为线上运行的应用对应分支。develop分支:作为开发分支,一般用于开发部的主要开发分支,该分支会不断有新的feature分支合并进来。当阶段开发完成后develop分支将合并到master分支上去,准备上线;feature/xxx分支:该分支是从develop分支上创建而来,用于并行开发,当任务完成后可合并到develop分支上去;hotfix/xxx分支:一般用于线上bug修复,修复完成后需要合并到master分支和develop分支,合并完成后hotfix分支可以删除;
当然,还有其他命名的分支,比如代码测试分支test,预上线分支pre等,具体分支的命名应看公司的规定。
3.4、小结
记录:
- 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️⃣写在最后
好了,今天的笔记就记到这里。