1、Git的基本概念
1、版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
2、HEAD与分支、提交版本的关系
(1)、一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
(2)、当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分分支在dev上
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
2、Git环境搭建
(1)、环境配置
初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码。
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
(2)、创建本地空仓库
git init
创建一个文件夹,去文件夹下执行该命令。初始化当前目录为仓库,初始化后会自动将当前仓库设置为master
3、提交修改
3.1 git add 文件名
将工作区的代码添加到暂存区(缓冲区)
3.2 git commit -m “修改说明”
将暂存区内容提交到本地仓库
3.3 git status
查看工作区中文件当前状态,会显示工作区中那些文件被修改过,但没有add及以及已经add 但是没有commit
3.4 git diff
查看修改内容
4、提交日志查看
git有log与reflog两个日志可以用来查看提交记录,以及帮助我们使用git回滚。
4.1、git log
用于显示当前分支的提交历史。它按照提交时间的先后顺序列出了所有的提交记录,包括每次提交的作者、日期、提交信息等。默认情况下,git log 会以最新的提交记录开始显示。
(git log是显示当前的HEAD和它的祖先的提交历史,递归是沿着当前指针的父亲,父亲的父亲,…,这样的原则。)
4.2、git reflog
用于显示引用日志,即包括分支、标签等引用的移动和更新历史。它会显示出所有的引用变动,包括已删除的分支和标签。git reflog可以找回已经被删除的提交。(通俗的讲reflog是记录HEAD的变动)
注:HEAD@{2}表示HEAD指针在两次移动之前的情况;
总结来说,git log 主要用于查看提交历史,而 git reflog 则主要用于查看引用的变动历史,包括已删除的引用。
4、git回滚场景
4.1、工作区修改完,未git add到暂存区
git checkout --文件名
撤销工作区的修改,用暂存区覆盖工作区
4.2、代码修改git add到暂存区,还未commit
方式一:
git reset HEAD readme.txt # 先用 Head 指针覆盖当前的暂存区内容
git checkout --文件名 # 再用暂存区内容覆盖工作区内容
先撤销暂存区的修改,再将工作区的修改撤销。
方式二:
git reset --hard commit_id
使用直接使用head覆盖当前暂存区和工作区。
(注:这个版本号应该是最新的版本号)
4.3、已经commit,还未git push
git reset --hard <last_commit_id>
覆盖本地仓库、暂存区和工作区
(注:这个版本号应该是上一次的版本号)
4.4、已经git push
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z91i1rmF-1690123473257)(image.png)]
5、拉取
(1)、clone拉取
git clone <url>
clone:默认将整个远程版本库本库克隆到本地
git clone -b 分支名称 <url>
-b:指定将某一个远程分支拉取到我们本地,而且拉取的本地分支自动和远程同名分支建立追踪关系
6、分支
6.1、创建分支
(1)、git checkout -b dev
使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去
(2)、git branch dev
git branch 如果后面跟着名字则会创建分支,但不会切换。
git checkout -b feature # 创建feature分支并切换过去
等于于
git branch featur # 创建feature分支
git checkout feature #切换到feature分支
6.2、查看分支
git branch:显示本地分支
git branch -a:显示所有分支,绿色为本地分支,红色为远程分支
git branch -v:显示本地分支的提交信息及提交版本号
git branch -vv: 在-v的基础上显示与当前分支建立联系的远程分支
6.3、切换分支
(1)、git checkout 分支名
当我们想切换分支可以使用git checkout来切换,如刚刚我们创建了一个分支dev并切换了过去,现在切换回masterk
git checkout master
6.4、合并分支
(1)、git merge 分支名
将分支合并到master,需要切换到master分支,并执行git merge 分支名就可以了。
6.5、删除分支
(1)、删除本地分支
git branch -D 分支名
(2)、删除远程分支
git push origin --delete 分支名
注意这里的远程分支名不需要再加origin,输入分支名就可以了
5、推送
(1)、push
git push <远程主机名> <本地分支名>:<远程分支名>
例:git push origin dev:test
意思是将本地的dev分支上的代码推送到远程主机名为origin中test的分支上。如果远程的test分支不存在,则会被创建,这也是一种创建远程分支的办法。
注:
1、若远程分支名和本地分支名相同,可以省略远程分支名。
2、如果本地分支与远程分支已经建立了追踪关系,那么可以省略远程主机名和远程分支名
3、当我们已经在dev分支下,且dev分支与远程分支已经建立了追踪关系,那么可以省略本地分支名和远程分支名
6、合并冲突
(1)、每次合并分支后,将分支删除。之后再修改代码,拉取新的分支。
如果不将分支删除,而是基于分支继续修改,合并时容易发生冲突。