前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git专题 | 脱离IDE,git在命令行是如何工作的

git专题 | 脱离IDE,git在命令行是如何工作的

原创
作者头像
叫我阿柒啊
发布2024-09-03 18:01:57
1580
发布2024-09-03 18:01:57
举报
文章被收录于专栏:入门到放弃之路

前言

git 作为最常用的版本控制工具,已经成为协同开发中不可或缺的部分。随着 IDE 功能的不断集成发展,我们不知不觉中已经习惯了使用 IDE 中的集成命令,来进行代码提交和版本管理。对于许多开发者来说,IDE 提供的图形化界面简化了操作流程,让版本控制变得更加直观和容易。

然而,这也使得很多人并不了解 git 的底层命令和工作原理,所以本篇文章就使用 git 命令行操作,看看 git 是如何工作的。

工作区域

在 git 中,不同的命令是对不同的 git 工作区域进行操作。

  1. 工作目录(Working Directory):工作目录就可以理解为磁盘上所有的文件和文件夹,可以进行文件的修改、删除或者新增。
  2. 暂存区(Staging Area):暂存区是一个临时保存修改的区域,用于在提交本地仓库之前,暂存你的改动。当你使用 git add 命令时,你的修改会被放入暂存区。这样,你可以选择性地提交部分改动,而不是整个工作目录的状态。
  3. 本地仓库(Local Repository):当你执行 git commit 时,暂存区的内容会被提交到本地仓库中。同时,本地仓库包含了项目的所有版本和分支信息,通过 checkout 可以切换不同分支。
  4. 远程仓库(Remote Repository):远程仓库指的是 gitee、github 这样的代码托管平台等,当你执行 git push 时,你的本地仓库的更改会被推送到远程仓库。

git init

在需要版本管理的文件下,执行 git init 初始化,在当前目录下就生成了 .get 隐藏文件夹,里面记录了 git 信息。

新建一个名为aqi的文本,然后在里面输入一行 Hello World,此时我执行 git status 查看工作区状态。

git操作

在 git 中,最基本的操作就是 git add 和 commit。git add 负责将文件和变更提交到暂存区,commit 则是将暂存区的变更提交到本地仓库。

git add

提示你aqi这个文件,需要执行 git add 进行跟踪,那么我们执行 add 之后,aqi就被放到了暂存区,再 git status 查看工作区状态。

这时候,在 workspace 工作区中就没有未被跟踪的文件了,而 aqi 就成了暂存区要提交(commit)的变更。

git commit

执行 git commit 将暂存区的变更提交到本地仓库, -m 指定提交信息。

提交完成之后,使用 git log 可以看到提交日志,这时候暂存区已经没有了可以提交的变更。

此时,如果修改aqi,新增一行 Hello qi,再查看工作区状态,提示aqi有可提交的变更。

也就是说,加入暂存区被跟踪的文件,在 workspace 中只要修改,就能被捕捉到变更,这时候就要执行 git add 将这些变更更新到暂存区,然后 git commit 提交到本地仓库。

和第一次 git add 将文件添加到暂存区不同的是,这次只是提交变更到暂存区,所以可以使用 git commit -a 来合并 add 和 commit 命令。

提交变更之后,又多了一条提交日志。我在aqi中又新增一行 “Hello a”,然后 git add 提交到暂存区。

再 git commit提交到本地仓库,这两步操作和合并命令结果是一样的。

至此,本地仓库中已经有了三条提交信息。

分支branch

在讲完 git 的基本操作之后,我们再结合branch,深入探讨一下 git 的工作区域。git 中默认的分支是 master,不同的分支可以进行不同的代码开发和变更,在本地仓库也有各自的提交信息。

git branch

使用 git branch 新建一个dev分支,git checkout 切换到dev分支。

git branch 也可以查看分支信息,星号指向当前所在的分支。此时,dev 是基于本地仓库中 master 分支生成的,所以此时 dev 和 master 分支的提交信息是相同的。

在 dev 分支下,我再添加一行数据,如下图所示:

然后 git status 查看工作区已经有了aqi的变更信息。

这里需要明确的是:文件的变更我是在dev分支进行的,文件变更没有add到暂存区,而是在 workspace 中。当我切换到 master 分支上,查看 aqi,居然看到了在dev分支是的变更。

这也就意味着,workspace区域是分支之间共享的。 在 master 分支下,我执行 git add 将 workspce 中的变更提交到暂存区。然后我再 checkout 切换到dev分支。

当我再次查看aqi,虽然在master分支将变更更新到了暂存区,但是dev分支仍可以看到变更的数据。

所以,暂存区也是分支之间共享的。这次我在 dev 分支上,直接 git commit 到本地仓库。

这时候再 checkout 到master分支,就看不到aqi中的第四行数据了。总结:对于所有分支而言,工作区和暂存区是公共的,已add未commit的内容不属于任何一个分支。只有commit到本地仓库,变更才会归属到具体的分支

我们在 dev 和 master 分支下分别执行 git log。

如上图,dev 相对于 master 而言,已经多了一条提交信息。此时将 git log 界面展示,如图:

dev 是在3时基于 master 生成的,所以 dev 也有1 ~ 3的提交信息。此时,master 分支的 HEAD 指向3,dev 分支的 HEAD 指向4,两个分支的 aqi 文件此时内容也是不一样的。

冲突

在 master 分支上,我在aqi中,新增了一行数据“Hello master”。然后我 git add 更新到了暂存区。

这时候,我想 checkout 到 dev 分支,就会切换失败,提示在 checkout 之前,要将暂存区的变更 commit 或者 stage。

我们按照提示,将变更提交到本地仓库,然后就成功 checkout 到了dev分支。

为什么之前分支修改了 aqi 文件之后,不需要 commit 就能切换到另一个分支,而这次在 master修改了就得先 commit 才能 checkout?

原因就是当时 master 和 dev 分支的HEAD指向的都是3,所以此时两个分支的 aqi 文件都是一样的,不会造成冲突。但是这次修改时,master 分支的 HEAD 指向3,而 dev 分支的 HEAD 指向的是4, 而暂存区的变更是共享的,你在 3 的基础上做的变更,想要共享到4上,岂不是会造成冲突。

在 master 提交之后, 在界面化查看分支情况。

master 和 dev 分支都有了不同的提交信息。

结语

本篇文章脱离图形化界面,在命令行中使用 git 完成各种操作。同时也基于 git 的基本操作命令,通过实际操作对 git 中工作区域进行了一个解析。在 git 中除了常见的 add、commit,也有 merge、rebase、stage 等操作,这些命令的具体用法也值得探究一下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 工作区域
    • git init
    • git操作
      • git add
        • git commit
        • 分支branch
          • git branch
          • 冲突
          • 结语
          相关产品与服务
          代码托管
          CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档