【Git】Git的基本指令

【Git】Git的基本指令

一、Git工作原理

Git 的四个工作区域:

  • 工作区(Workspace):平时 存放项目代码 的地方
  • 暂存区(Index/Stage):用于 临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • 本地仓库(Repository):安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • 远程仓库(Remote):托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

在这里插入图片描述

二、获取 Git 仓库

通常有两种获取 Git 项目仓库的方式:

  1. 初始化一个Git仓库,并且可以将当前项目的文件都添加到Git仓库中(目前很多的脚手架在创建项目时都会默认创建一个Git仓库)

    • 方式一:初始化Git仓库

      • git init

      • 该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的核心;

      • 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪;

        在这里插入图片描述

  2. 从其它服务器 克隆 一个已存在的 Git 仓库

    • 方式二:克隆现有的仓库
      • git clone <url>
      • 如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写

三、记录每次更新到仓库

3.1 文件的状态划分

  • 现在我们的电脑上已经有一个Git仓库:
    • 在实际开发中,你需要将某些文件交由这个Git仓库来管理;
    • 并且我们之后会修改文件的内容,当达成某一个目标时,想要记录下来这次操作,就会将它提交到仓库中;
  • 那么我们需要对文件来划分不同的状态,以确定这个文件是否已经归于Git仓库的管理:
    • 未跟踪:默认情况下,Git仓库下的文件也没有添加到Git仓库管理中,我们需要通过add命令来操作;
    • 已跟踪:添加到Git仓库管理的文件处于已跟踪状态,Git可以对其进行各种跟踪管理;
  • 已跟踪的文件又可以进行细分状态划分:
    • staged:暂缓区中的文件状态;
    • Unmodified:commit命令,可以将staged中文件提交到Git仓库
    • Modified:修改了某个文件后,会处于Modified状态;
  • 在工作时,你可以选择性地将这些修改过的文件放入暂存区;
  • 然后提交所有已暂存的修改,如此反复;

在这里插入图片描述

3.2 Git的提交与修改

3.2.1 检测文件的状态 - git status
  • 我们在有Git仓库的目录下新建一个文件,查看文件的状态:

    • git status
    • 在这里插入图片描述
  • Untracked files:未跟踪的文件

    • 未跟踪的文件意味着 Git 在之前的提交中没有这些文件;
    • Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”;
  • 我们也可以查看更加简洁的状态信息

    • git status -s
    • git status --short
3.2.2 文件添加到暂存区 – git add
  • 跟踪新文件命令:git add 文件名称

    • 使用命令 git add 开始跟踪一个文件
  • 跟踪修改的文件命令

  • 如果我们已经跟踪了某一个文件,这个时候修改了文件也需要重新添加到暂存区中

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 通过git add .将所有的文件添加到暂存区中

3.2.3 忽略文件
  • 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在 未跟踪文件列表。
  • 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建 的临时文件等;
  • 我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模 式;
  • 文件 .gitignore 的格式规范如下:
  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
  • 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。
  • 在实际开发中,这个文件通常不需要手动创建,在必须的时候添加自 己的忽略内容即可;
3.2.4 文件更新提交 – git commit
  • 现在的暂存区已经准备就绪,可以提交了

    • 每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了;
    • 再运行提交命令 git commit;
    • 可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
    • git commit -m [message]
    • [message] 可以是一些备注信息。
      在这里插入图片描述
  • -a 参数设置修改文件后不需要执行 git add 命令,直接来提交

    • git commit -a
  • 可以将两个命令结合来使用,在修改文件内容后执行命令:

    • git commit -a -m "提交信息"
      在这里插入图片描述
3.2.5 比较文件的不同 -git diff
  • 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。

  • 尚未缓存的改动:git diff
    在这里插入图片描述

  • 查看已暂存的将要添加到下次提交里的内容:git diff --staged

    • 这条命令将比对已暂存文件与最后一次提交的文件差异:
  • 查看已缓存的改动: git diff --cached
    在这里插入图片描述

  • 查看已缓存的与未缓存的所有改动:git diff HEAD

  • 显示摘要而非整个 diff:git diff --stat

3.2.6 查看提交的历史 – git log
  • 在提交了若干更新,又或者克隆了某个项目之后,有时候我们想要查看一下所有的历史提交记录。

  • 这个时候我们可以使用git log命令:

  • 不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面;

  • 这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明;
    在这里插入图片描述

  • git log 的常用选项

    • –pretty:使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。

在这里插入图片描述

  • –graph:在日志旁以 ASCII 图形显示分支与合并历史。

  • –abbrev-commit: 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。

在这里插入图片描述

  • –oneline :--pretty=oneline --abbrev-commit 合用的简写。

在这里插入图片描述

3.2.7 回退版本 git reset
  • git reset 命令语法格式如下:

    git reset [--soft | --mixed | --hard] [HEAD]
    
    • –mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
    • –soft 参数用于回退到某个版本:
    • –hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
  • 如果想要进行版本回退,我们需要先知道目前处于哪一个版本:Git通过HEAD指针记录当前版本。

    • HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交;
    • 理解 HEAD 的最简方式,就是将它看做 该分支上的最后一次提交 的快照;
  • 我们可以通过HEAD来改变Git目前的版本指向:

    • 上一个版本就是HEAD^
    • 上上一个版本就是HEAD^^
    • 如果是上1000个版本,我们可以使用HEAD~1000;
    • 我们可以可以指定某一个commit id;
      在这里插入图片描述
3.2.8 删除文件 git rm
  • 要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

  • 如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

git rm 删除文件的几种形式:

  • 将文件从暂存区和工作区中删除:
git rm <file>
  • 如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f
git rm -f <file>
  • 如果我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪,使用 --cached 选项
  • git rm --cached
3.2.9 移动或重命名文件 git mv

要在 Git 中对文件改名,可以这么做:

git mv file_from file_to

四、Git的远程操作

4.1 查看远程仓库 git remote

  • 如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Zh6TqFr-1676082475014)(D:\图片\Typora\typora-user-images\image-20230210113929881.png)]

  • 如果你已经克隆了自己的仓库,那么至少应该能看到origin——这是 Git 给你克隆的仓库服务器的默认名字

  • 你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

在这里插入图片描述

4.2 添加远程仓库 git remote add

  • 运行 git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
  • 也可以在命令行中使用字符串 pb 来代替整个 URL

4.3 从远程仓库中获得数据 git fetch

git fetch [alias]
  • 该命令访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
  • 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作
  • 当准备好时你必须手动将其合并入你的工作。

4.4 获得数据后合并 git merge

git merge [alias]/[branch]

4.5 推送到远程仓库 git push

  • 当你想分享你的项目时,必须将其推送到上游

  • 命令格式如下:

    git push <远程主机名> <本地分支名>:<远程分支名>
    

    如果本地分支名与远程分支名相同,则可以省略冒号:

    git push <远程主机名> <本地分支名>
    
  • 例如以下命令将本地的 master 分支推送到 origin 主机的 master 分支

    git push origin master
    
  • 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

    git push --force origin master
    
  • 删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:

git push origin --delete master

4.6 从远程获取代码并合并本地的版本 git pull

  • git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并

  • 命令格式如下:

    git pull <远程主机名> <远程分支名>:<本地分支名>
    

五、打标签

  • 像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。
  • 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0v2.0 等等)。

5.1 列出标签

在 Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list

5.2 创建附注标签

  • 最简单的方式是当你在运行 tag 命令时指定 -a 选项:

    $ git tag -a v1.0.0 -m "my version 1.0.0"
    
  • -m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。

  • 通过使用 git show 命令可以看到标签信息和与之对应的提交信息

  • 输出会显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息

5.3 共享标签

  • 默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。
  • 这个过程就像共享远程分支一样——你可以运行 git push origin <tagname>
  • 如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

5.4 删除标签

  • 要删除掉你本地仓库上的标签,可以使用命令 git tag -d <tagname>
  • 如果要更新你的远程仓库标签,则使用git push <remote> --delete <tagname>

5.5 检出标签

  • 如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令
  • 这会使你的仓库处于“分离头指针(detached HEAD)”的状态
  • 在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端程序员小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值