【git】:有关 git 的基础指令以及分支概念
1️、前言
今天学习的笔记内容是:
Git 的基本使用
2️、内容
2.1、获取本地仓库
要使用git
对我们的代码进行版本控制,则必须获取本地仓库。
步骤如下:
创建一个文件夹作为我们本地的
git
仓库;进入这个文件夹,鼠标点击右键,打开
Git Bash
窗口,执行命令:git init
举个例子:
新建一个文件夹
git-test
进入新建的文件夹,打开
Git Bash
窗口,输入语句git init
备注:如果本地仓库创建成功,则可以在文件夹下看见隐藏的.git
目录
2.2、基础指令
2.2.1、文件状态
在git
工作目录下,文件一般会有四种状态:未跟踪,未暂存,已暂存还有已提交。这些状态随着我们执行git
命令而发生变化。
具体看下面示意图:
2.2.2、工作区、暂存区以及仓库
工作区
就是你在电脑里能看到的目录,也就是某个文件夹。
暂存区
也就是存放在.git
目录下的index
文件中,即.git/index
。有时我们将暂存区称作索引。
仓库(也就是版本库)
在工作区下的隐藏目录.git
就是当前的版本库。
2.2.3、查看修改的状态
命令:
git status
作用:查看修改的状态(暂存区 / 工作区)。
2.2.4、添加单个文件到暂存区
命令:
git add 文件名
作用:将单个文件添加到暂存区。
2.2.5、将所有修改都加入暂存区
命令:
git add .
作用:将所有修改都加入暂存区去。
2.2.6、提交暂存区到本地仓库
命令:
git commit -m "注释内容"
作用:将暂存区里的内容提交到本地仓库的当前分支。
备注:
在 Linux 系统中,
commit
需要信息使用单引号'
括起来而在 Windows 系统下,
commit
信息使用双引号"
括起来。
2.2.7、查看提交日志
命令:
git log
作用:查看提交日志内容。
需要注意,该语句可以带有可选参数:
git log [--all] [--pretty=oneline] [abbrev-commit] [--graph]
各参数的作用如下:
--all
:显示所有分支;--pretty=oneline
:将提交信息显示为一行;abbrev-commit
:使输出的内容更加简短;--graph
:以图的形式显示。
2.2.8、版本回退
命令:
git reset --hard commitID
作用:版本切换,也就是版本回退
备注:使用git log
指令可以查看到commitID
2.2.9、查看已删除的记录
命令:
git reflog
作用:查看已经删除的提交记录
2.3、分支
几乎所有版本控制系统都以某种形式支持分支。
使用意味着你可以从开发主线上分离开来进行重大 Bug 的修改,开发新功能等。一个分支代表一条独立的开发线,并不会影响主线的开发。
需要注意:在执行git init
时,默认情况下Git
就会为你创建master
分支。
2.3.1、查看本地分支
命令:
git branch
2.3.2、创建本地分支
命令:
git branch 分支名
2.3.3、切换分支
命令:
git checkout 分支名
2.3.4、创建并切换分支
命令:
git checkout -b 分支名
2.3.5、合并分支
命令:
git merge 分支名
2.3.6、删除分支(需检查)
命令:
git branch -d 分支名
2.3.7、删除分支(不用检查,强制删除)
命令:
git branch -D 分支名
2.3.8、解决合并分支的冲突
为什么需要解决冲突?
当两个分支上对文件的修改存在冲突时,比如两个分支同时修改了同一文件中的同一行代码,此时git
无法判断应该怎么合并,这时候就需要手动解决该冲突问题。
步骤如下:
处理文件中冲突的地方;
将解决完冲突的文件添加到暂存区中;
提交到版本库中。
2.3.9、不同分支的使用
在开发中,一般可以有以下原则:
master
分支:属于生产分支,也就是主分支,可作为线上运行的应用对应分支。develop
分支:作为开发分支,一般用于开发部的主要开发分支,该分支会不断有新的feature
分支合并进来。当阶段开发完成后develop
分支将合并到master
分支上去,准备上线;feature/xxx
分支:该分支是从develop
分支上创建而来,用于并行开发,当任务完成后可合并到develop
分支上去;hotfix/xxx
分支:一般用于线上 bug 修复,修复完成后需要合并到master
分支和develop
分支,合并完成后hotfix
分支可以删除;当然,还有其他命名的分支,比如代码测试分支
test
,预上线分支pre
等,具体应看公司规定。
2.4、小结
记录:
HEAD
用于指向当前分支,在上图中,HEAD
指向了 master 分支。objects 表示<kbd>Git</kbd>的对象库,实际位于
".git/objects"
目录下,包含了创建的各种对象及内容。当对工作区中修改或新增的文件执行
git add
命令时,暂存区的目录树被更新,同时该文件的内容会被写入到对象库中的一个新的对象中,而该对象的ID
被记录在暂存区的文件索引中。当执行提交操作
git commit
时,暂存区的目录树将写入到版本库中的对象库object
,此时master
分支也会做相应的更新。当执行
git reset master
命令时,暂存区的目录树会被重写,被master
分支指向的目录树所替换,但是工作区不受影响。当执行
git checkout -- <file>
命令时,暂存区中指定的文件将替换工作区的文件。此时工作区未添加到暂存区中的改动将被清除。当执行
git checkout HEAD <file>
命令,此时HEAD
指向的master
分支中的指定文件将替换暂存区和以及工作区中的文件。需要注意,这个操作将会清除工作区中未提交的改动,同时还会清除暂存区中未提交的改动,因此得慎用。
3、在最后
好了,本篇笔记就到写这,欢迎大家到评论区一起讨论!
版权声明: 本文为 InfoQ 作者【翼同学】的原创文章。
原文链接:【http://xie.infoq.cn/article/cff011d6a993379cd1cfcd762】。文章转载请联系作者。
评论