【git——上】
声明
本篇文章仅适用于git的上手(最好自己操作一遍,容易踩的坑和易忽略的点也是让主包误打误撞试的差不多了…)与回顾,不包含软件的下载等其他内容。
话不多说,开干!
基础命令(概览)
- 仓库初始化
git init 在当前目录创建新的Git仓库
git clone 克隆远程仓库到本地 - 文件操作
git add 添加所有修改文件到暂存区
git commit -m “message”提交暂存区文件到本地仓库并附加描述 (m是message的缩写,上面的message是描述的内容)
git status 查看工作区和暂存区状态 - 版本管理及描述的内容
git log查看提交历史(日志)
git diff查看未暂存的修改内容
git checkout 切换到特定提交版本 - 分支管理
git branch查看分支
git branch [name]创建新分支
git checkout 切换到指定分支
git merge 合并指定分支到当前分支
git branch -d 删除本地分支 - 远程协作
git remote 查看远程仓库
git remote add 添加远程仓库别名
git push 推送本地分支到远程仓库
git pull 拉取远程分支并合并到当前分支
git clone 从远程仓库克隆
git fetch下载远程仓库最新变动但不合并 - 撤销操作
git reset (要取消暂存的文件名) 将暂存区的文件取消暂存
git reset --hard (要回退到的文件版本号)切换到指定提交版本
git restore 撤销工作区文件的修改
git rm --cached 从暂存区移除文件(保留工作区文件)
git仓库的获取
如未填写个人信息比如昵称、邮箱,或绑定电话号码(gitee需要),整就完事儿了~
方法1.从本地初始化一个git仓库
执行步骤如下:
(1)在任意目录下创建一个空目录(例如repo1)作为我们的本地Git仓库
(2)进入这个目录中,点击右键打开Git bash窗口
(3)执行命令
git init
如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹,如果看不到先更改一下设置试试,方法2中也有演示),则说明Git仓库创建成功。
方法2.从远程仓库获取
复制gitee创建的一个仓库地址(没有就创建一个)。
执行步骤如下:
(1)在任意目录下(例如git_demo)创建一个空目录(例如git02)作为我们的本地Git仓库
(2)在此目录中,点击右键打开Git bash窗口
(3)执行命令
git clone 仓库地址
如果在当前目录中看到与所选gitee的仓库名字相同的文件夹(此文件夹为隐藏文件夹)则说明Git仓库获取成功。
如果没看到,也许不是创建失败,尝试:查看->隐藏文件夹,勾选上。
工作区(Working Directory)、暂存区(Staging Area)和版本库(Repository)是 Git 版本控制系统的三个核心组成部分,它们分别对应不同的文件状态和操作流程。下面就让我们深入了解一番~
工作区(Working Directory)
(包含.git文件夹的目录就是工作区,也是工作目录,主要用于存放开放的代码)
若此目录下创建了新文件,该新文件也属于工作区。
工作区文件状态
-
未跟踪(Untracked)
新创建的文件尚未被版本控制系统管理(仅存在于工作区),不会出现在提交记录中。 -
已修改(Modified)
文件被修改但未暂存,变更尚未准备提交。 -
已暂存(Staged)
文件修改被标记为准备提交的状态,可通过git add实现。 -
未修改(Unmodified)
文件与最后一次提交的版本一致,无任何变更。
工作区是用户直接编辑文件的目录,包含项目所有的文件和子目录。它是本地文件系统中可见的部分,所有修改在此进行。工作区的文件状态分为:未跟踪(Untracked)、已修改(Modified)或未修改(Unchanged)。
暂存区 (Staging Area / Index)
(也就是.git文件夹里的index文件,是临时保存修改文件的地方)
若无修改文件,目录中则没有此文件。
版本库(Repository)
(.git文件夹就是版本库,版本库中存储了配置、日志、文件版本等信息)
本地仓库的基本操作
一.提交工作区文件到暂存区(git add)
工作区新建的文件也算是修改文件。
.git文件所在目录空白处点击右键->Open Git Bash here,打开Git Bash 终端窗口后输入git add a.txt(即将添加至暂存区的文件的名称)后回车。
这样再打开.git文件时才会看到新增的index文件。
暂存区是介于工作区和版本库之间的缓冲区域,用于标记哪些变更将被提交到版本库。通过 git add 将工作区的修改添加到暂存区,暂存区的文件状态变为“已暂存”(Staged)。
二.提交暂存区文件到本地仓库(git commit)
添加到暂存区后仍是在Git Bash 终端窗口中输入:
git commit -m ‘……(描述内容,比如做了哪些改动)’ a.txt(即将添加到版本库的文件名称,所在文件夹仅这一个未提交的文件时可省略)
版本库存储项目的完整历史记录和元数据。提交(Commit)操作将暂存区的变更永久保存到版本库中,生成一个新的版本节点。版本库包含分支、标签和提交历史。
完成以上操作以后,在窗口中输入git status查看工作区和暂存区状态
这里显示没有可提交的东西,由于.git文件所在文件夹下仅有一个除自身之外的a文件,且a文件已完成了提交操作。此时再建一个文件夹b(和文件夹a在一个目录)并输入文件内容,重复查看状态的操作:
由目录中的工作区文件状态可知窗口显示检测到了b文件仅存在于工作区,并给出下一步需进行git add的提示。
根据提示进行下一步:
此时b.txt进入了暂存区,再次重复查看状态操作进行验证:
验证成功,当前状态是Staged(暂存状态),括号里面的语句还提供了取消暂存的方法。再将b.txt提交到版本库:
验证成功,继续重复查看状态操作:
此时又回到了无可提交文件的状态。不妨想一想这两个文件的内容提交后再修改会发生什么,从哪一步开始提交呢?
每个工作区的文件添加到暂存区只需要操作一次,也就是说后期进行内容的修改后不需要add,直接commit就可以了。进程如下:
修改a.txt并进行查看状态操作
这里modified表明a文件已经添加到暂存区且进行了修改,所以不用进行add操作。 1 deletion(-):删除之前的文件
2 insertions(+): 添加新版本的文件
除了已经提到的add,commit的本地仓库操作,主要的还有log,reset
三. 查看日志(git log)
输入git log,会展示所以提交记录,包括版本号(可用于回退)、提交人、提交日期。
如果日志太多又退不出来,按‘q’就可以了。
四. 回退(git reset)
加入暂存区后,若想撤销暂存(只能撤销还未进行commit操作的文件),可输入git reset 进行回退:
-
从暂存区回退到工作区
1. 未commit过的新文件
在缓存区的文件都能直接进行回退操作,这里是在第一个git status执行完之后新创建一个d.txt,因此在第二次git status后提示新增的d.txt未进入暂存区;
输入git add d.txt进入暂存区后再次(第三次)通过status查看文件状态;
验证成功后进行reset回退,再次(第四次)查看文件状态。
回退成功后还可按老方法使d.txt重新回到存储器,再查看文件状态验证操作是否成功。
2. 已经commit但又更改内容的文件
(内容更改产生新版本号,对应的新版本需重新add)
基本操作前面
修改a.txt后:
status后指出a.txt做了修改且需add操作,然后add a.txt,最后查看文件状态。
此时新版本只进入了暂存区,以下操作同回退的方法1相同,不再讲述。
回退后将修改的文件a.txt和撤销回退返回暂存区的d.txt一同commit进版本库。
-
回退到某一版本
git reset --hard (要回退到的文件版本号): 回退到指定提交版本。
回退后还能根据message提示返回来(操作同上),这里就不展示图片了。
远程仓库操作
这里声明一下:
git01是采用git仓库的获取1的方法创建的;
git02是采用git仓库的获取2的方法创建的,git02所在的目录中可看到与所选gitee的仓库名字相同的文件夹,这里仓库名字为test-kong;
因此现在直接打开git02, 与git01(本地仓库)相比,打开后多了一个与所选gitee的仓库名字相同的文件夹(test-kong)。
1.查看远程仓库状态(git remote)
在此目录下打开Git Bash 终端窗口(目录空白处点击右键->Open Git Bash here,再提示yi遍),输入:git remote查看远程仓库状态,会出现origin;
origin是Git默认分配给远程仓库的别名(alias),通常指向项目最初克隆(git clone)时来源的远程仓库地址。它是一个简短的标识符,用于代替完整的远程仓库URL!
查看远程仓库地址(git remote -v)
输入git remote -v查看仓库地址:
以上操作在git01中操作是没有对应结果的,一个本地仓库最多关联一个远程仓库,那么下面就来展示一下本地文件是如何关联到远程仓库的:
2.添加远程仓库(git remote add)
首先需要再建一个gitee仓库,创建完成之后会展示仓库地址:
地址下面圈出的可以直接复制到刚刚打开的Git Bash 终端窗口,将这个新建的远程仓库(test-00)关联到本地仓库(git01)。
git remote add origin https://gitee.com/xiaoningZjing/test-00.git
origin:远程仓库的别名
添加之后再查看远程仓库地址就不为空了,而是显示仓库地址。
3. 推送本地分支到远程仓库(git push)
现在打开本地仓库git01,里面有很多增加的文件(完成远程仓库传到本地仓库后在本地进行的修改),若想将这些文件推送到远程仓库(也就是为了同步进度):
在此目录打开git Bash终端窗口,输入git push origin main/master(分支名称,开头第一句最后会显示,按对应内容输入)进行推送。反应几秒要求输消息时,名字是用户账号名(像上面这张图中的gitee.com之后的一小段字母),密码正常输入。之后便会显示:
推送成功,再打开gitee查看该远程仓库的内容:
所以提交信息都能查看(可通过git log进行验证)。
4.克隆远程仓库到本地(git clone)
克隆操作会将远程仓库的完整内容(包括代码、提交历史、分支等)下载到本地,并自动设置远程跟踪分支。
git clone 仓库地址
git clone 主要克隆以下内容:
代码文件:仓库中的所有文件和目录。
提交历史:仓库的完整 Git 提交记录。
分支信息:默认克隆所有分支(但本地只检出默认分支,通常是 main 或 master)。
Git 配置:包括远程仓库地址(origin)和分支跟踪关系。
git02就是采用git仓库的获取方法2(clone)创建的,不过克隆的是一个空仓库。
现在新建一个文件git03并打开,在此目录打开git Bash终端窗口,输入:git clone 远程仓库地址(推送本地文件到的那个远程仓库):
git03中增加了远程仓库里的文件,但没有日志记录。因为git log要在工作区中操作,需要找.git文件,而此git Bash终端窗口是在git03目录下打开的,没有.git文件:
切换目录
- 关闭窗口,打开文件夹test-00(远程仓库clone过来的文件),进入test-00的目录
- 不关窗口直接输入:cd test-00/更改目录
再输入git log查看日志:
现在修改该本地仓库的一个文件的内容:
假设修改d.txt(增加了第二行的0)
进行常规提交操作:
但打开git01(开头时推送本地文件给远程仓库)的d.txt文件内容是未修改的:
远程仓库的内容也没变:
因为此修改仅添加到了本地仓库,添加的远程仓库才会在工作区的其他文件中显示修改,所以需要进行push操作^
5.推送本地分支到远程仓库(git push)
输入git push origin main:
再去查看远程仓库和git01的d.txt:
可见远程仓库的内容修改了,但git01没修改。
要想git01接收到修改内容,还需进行pull操作~(好像套娃……)
6.拉取远程分支并合并到当前分支(git pull)
在git01上打开窗口(谁想获取新版本谁拉取)并输入git pull origin main:
查看git01的d.txt:
若打开窗口的目录错误,则会出现下面这一段(显示无需拉取的内容),且git01的d.txt的内容不会变化。
分支操作等内容就放下篇吧(小声嘀咕:可能要迟yi会发),总有种一口气说不完快要憋死的感觉哈哈。撒花撒花~~