Git全书 · 其二丨常用Git指令及原理

还未安装Git软件的伙伴可以前往上一篇教程: Git全书 · 其一丨Git软件/环境安装全流程

以下内容均默认已配置好Git本地环境,默认已经配置完成全局用户名及邮箱,如果没有查阅上述教程!

在此我啰嗦几句,虽然目前各大IDE或者AI Agent都拥有可视化的Git或一键操作Git的能力,但我仍然觉得了解或使用常见Git命令是当前正解,只有使用命令才会理解Git的实现原理,以及是什么?为什么?等问题,过度依赖可视化操作或者AI,在遇到关键的Git操作时将会出现知识断层或毁版本的风险!
所以本篇教程以Git命令操作为主,TRAE软件内可视化界面为辅!

演示环境:

  • Windows 11
  • TRAE国内版(v3.3.55)
  • Git(git version 2.53.0.windows.2)

在敲命令之前我们先来了解一下Git的工作流程,你现在可以不用管图片中的命令,只需要知道在Git操作中分为本地仓库和远程仓库概念,而本地仓库又被划分为工作区(工作目录)、暂存区和本地仓库,是不是有点乱,不要怕,我们先不看远程仓库的概念!
当你使用命令让Git接管你的代码后,你的仓库(存放代码或项目的文件夹)就已经被隐形的划分为三区了,你的所有操作都默认进入了工作区,你可以在这里正常的进行开发、增删查改等操作,但是你的文件状态一旦变更,那么就会被Git捕捉到,当你觉得当前功能进入一个阶段性的时候,可以使用对应命令(git add)将你的更改放入暂存区,这就相当于游戏进行了一段存档,这时你又可以在工作区进行修改,或者你觉得这段存档没什么问题,那么就可以将它彻底放置到(git commit)本地仓库中进行储存,并且附带一段修改信息(commit信息)来告诉未来的自己或者他人(涉及远程仓库/多人协作),这段更改是为什么,动了哪里等!
目前了解到这里就可以了,逆向回溯我们后面根据命令再聊!

注:图源网络

接下来我将以自己一个真实的案例结合Git进行全流程讲解,但请注意,Git命令众多,我只会涉及到常见常用的命令,无法覆盖全面,但尽量保证!另外本案例中涉及Github远程仓库的操作,这段内容不包含在本教程初始目的内,但是我仍然会放进来,会在截图中标注远程操作,请自行忽略!

从一个完全空白的项目开始(注意,已经有项目文件的也可以使用Git),创建项目文件夹,并且进入当前文件夹


在快捷栏启动CMD(个人习惯,如果有命令行操作经验的,也可以直接使用命令进入该文件夹)

初始化Git

让git接管当前项目文件夹

git init


此操作将会在当前文件夹下创建一个.git隐藏文件夹,注意该文件夹下的任何内容均不要修改、不要修改、不要修改!!!

不显示隐藏文件夹的可以在设置中打开,具体操作如下:

重命名绑定分支

该操作在安装时已经默认设置为安装输入的分支名,此处为我个人习惯(一般无需该步操作)!
另外分支的概念类似于游戏存档的多存档机制,例如我在游玩游戏的时候存储了A存档,今天打开A存档游玩之后另存了B存档(也就是说当前游戏存档同时包含了以前的A存档和现在的B存档),分支机制确保了我在原有存档基础上新建一个分支进行开发修改,该操作不会影响原存档,即便修坏了也可以一键切换回原存档,这就是分支存在的意义(解释并不全面,不知道是否理解~)

git branch -M main


该命令不会输出内容!

绑定远程仓库(!忽略)

git remote add origin 远程仓库链接

开发!

到此为止你可以先去开发你的内容了!
根据自己的需求进行项目开发


存个档吧~

当前已经完成了首次开发,并且测试没有什么问题,所以打算进行第一次的git版本管理,我会把命令&IDE可视化进行1比1对比。

  • 是否还记得我们上面的图片,当我们在工作区完成修改后,第一步是进行添加到暂存区
# 添加单个文件
git add <file>

# 添加所有更改
git add .

当我们想要单独添加其中一个文件修改时可以采用git add <file>命令,例如我这里先把.gitignore文件(该文件是git管理中专门用来忽略管理范围的文件,具体介绍可以看后续内容)添加至暂存区,这时我需要使用git add .gitignore命令


注意,这里返回了一段警告,具体意思是git为了确保多系统协作的一致性,这里将添加暂存区的文件换行符&回车符进行了替换,无须担心,属于正常格式调换!
在IDE中的可视化窗口,该操作按钮如图:


点击按钮后即可将对应文件添加至暂存区

  • 接下来将已在暂存区的文件commit到本次仓库中,进入版本管理
    使用git commit -m "提交信息"命令即可将暂存区的文件一键进入git版本管理。


    注意:commit信息原则上可以完全自定义内容,但是为了更加标准和方便后续的团队他人看懂此次更改,一般采用国际通用的约定式提交格式: 约定式提交,有兴趣的可以去官网查看
    什么?你不想背这些格式,也不知道怎么写commit?很简单!交给AI处理,在TRAE中内置了AI进行一键输出commit信息!


    看,AI已经按照约定式提交的标准格式帮你写好了commit内容,点击提交就是直接使用git commit -m "提交信息"命令!

    这时在下方的图形窗口可以可视化看见已提交的记录!注意此时的昵称信息源自于Git全书 · 其一丨Git软件/环境安装全流程教程中设置的用户名,邮箱同理!这里的头像是因为我绑定了Github远程仓库,显示的Github头像,没有绑定的未出现属于正常现象!
    或者使用命令git reflog查看提交记录

  • 未绑定远程仓库的到这里就已经完成了一次版本管理工作,由于我绑定了远程仓库,所以这里我再进行一次提交至远程的操作!
    由于我是首次推送,所以我要使用附带分支名称的推送,用来告诉远程仓库我的分支是什么?具体命令为git push -u origin <branch-name>,如果不是首次推送则使用git push origin <branch-name>命令即可,其中替换成自己的分支名!


    在IDE中的具体操作如图:


    Github就会同步此次操作

  • 剩下修改的文件一键全部添加吧,为了节约篇幅我这里只演示IDE操作



撤销!

当你发现开发偏离核心、代码错误等一切想要回复到某个版本时即可使用git的专属操作!
但是需要分清你是什么情况!为了方便演示我这边创建一个演示测试用的文件!

  • 工作区
    想要撤销工作区的修改,也就是还没有进行git add和git commit操作的内容
    使用git checkout -- <file>命令即可,或者直接使用IDE的可视化操作!
    注意,此操作会将已有文件但修改部分的代码全部撤回,新增文件会被直接删除文件,完全回退到你上一次版本管理的状态!


  • 暂存区
    放入暂存区的文件代表你已经进行了git add但是还没进行git commit
    可以使用git reset HEAD <file>撤销暂存区文件回到工作区,之后操作同上一步
    直接使用IDE可视化操作如图:


  • 本地仓库!(注意这里默认为未推送到远程仓库的情况,远程仓库会跟着github篇介绍)
    到了这一步就证明已经生成了git版本管理记录,这种情况就要分类讨论了!


    其一是你打算彻底回退记录,也就是说抹杀掉这条记录,让它不复存在
    具体命令为git reset --hard HEAD~1,该操作未找到IDE的实际可视化处,所以仅以命令方式展示
    命令中的1代表以当前版本管理为基准,撤回多少次记录,我这里只需要撤回我commit的最新1次记录

    执行命令后我们可以看到,版本管理已经删除最新一次的版本,并且相关涉及的文件已经被删除!
    其二是想一步一步逆向回去,也就是从本地仓库退回暂存区再退回工作区
    从本地仓库退回到暂存区命令为git reset --soft HEAD~1,其中的数字1同上述含义
    在IDE中的可视化操作如图(但本操作只能退回上次一次的提交,如果需要多次则需要循环操作):


    从本地仓库直接退回到工作区的命令为git reset --mixed HEAD~1,该操作没有找到对应的IDE可视化界面

面对撤销修改除了数次数外还有一个专门制定版本的撤销,就是利用版本哈希值(git自动生成的一段不重复哈希值),可以使用git log命令查看所有已生成的版本日志,其中存有哈希值,或者使用IDE的可视化操作复制哈希值。



使用以下命令即可根据哈希值撤回!
注意注意注意!该方法提供的哈希值撤回不包含该哈希版本,例如A,B,C三个版本你想一下子撤回B,C两个版本需要使用A的哈希!!!

至此本地仓库的三区撤回的基础操作已经完成,可以满足大部分用户的日常使用!接下来的内容涉及分支操作,将会新开教程帖用来分割知识模块,针对本帖内容不清晰或者不懂的地方均可评论,让我们一起打磨这系列教程!

2 个赞

点赞了哥,真不错