Git 常用

1.工作区、暂存区、版本库:

工作区:就是电脑上可以看到的目录;

暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);

版本库:工作区有一个隐藏目录.git,这个属于git版本库,版本库包括暂存区

  • 左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 git checkout . 或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

  • 当执行git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

2.常用命令

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

git init

初始化一个git仓库,执行后会在当前目录生成一个.git目录,包含了资源的所有元数据,其他目录保持不变

git init newrepo

初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

git add \*.c git add README $ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

注: 在 Linux 系统中,commit 信息使用单引号 ' ,Windows 系统,commit 信息使用双引号 " 。所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m "提交说明"

git add

添加文件到缓存区,告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中

ls 查看目录

ls -ah可查看隐藏目录

git commit

git commit 会生成一个40位的哈希值,用于作为id,并且把git add添加到缓存中的文件提交到本地仓库中,本地仓库迭代了一个版本

git commit 提交代码,使用-m命令简单描述信息,如果不使用-m,会调用终端的注释编辑器让你输入描述信息,但是不建议使用,因为注释编辑器比较难用

git commit -m "add file "test.c""

git commit 会生成一个40位的哈希值,用于作为id,并且把git add添加到缓存中的文件提交到本地仓库中,本地仓库迭代了一个版本

git commit --amend:改写提交 --amend:重写上一次的 提交信息,如果注释写错可以用ammend长命令选项来提交

git commit --amend 输入y选中是 输入i进入编辑界面 修改完成 用ctrl+o 保存 按下回车,就会提示已写入,用#是注释,不会被提交,git会自动过滤

git atatus

查看仓库当前的状态,显示有变更的文件

git status 命令会显示以下信息:

  • 当前分支的名称。
  • 当前分支与远程分支的关系(例如,是否是最新的)。
  • 未暂存的修改:显示已修改但尚未使用 git add 添加到暂存区的文件列表
  • 未跟踪的文件:显示尚未纳入版本控制的新文件列表。

git diff

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

git reset

回退版本

git reset --hard:回滚代码仓库 ,reset是重置命令,--hard代表重置代码仓库版本

有三个模式, --soft,--mixed,--hard

--soft:头指针恢复,已经add的暂存区以及工作空间的所有东西都不变

--mixed:将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码不变

--hard:一切都恢复,头边,add的暂存区也消失,工作空间的代码也都恢复之前状态

git rm

将文件从暂存区和工作区中删除:

git rm

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f:

git rm -f

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

git rm --cached

git mv

git mv 命令用于移动或重命名一个文件、目录或软连接。

git mv [file] [newfile]

如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数:

git mv -f [file] [newfile]

git checkout

git checkout 命令用于在不同的分支之间切换、恢复文件、创建新分支等操作。

**注意:**git checkout 命令在 Git 2.23 版本后引入了 git switch 和 git restore 命令,分别用于分支切换和文件恢复,以提供更清晰的语义和错误检查。如果你使用较新的 Git 版本,可以考虑使用这些命令代替 git checkout。

切换分支:

以下命令允许你从当前分支切换到指定的分支 :

git checkout

例如将你的工作目录切换到主分支:

git checkout master

创建新分支并切换:

以下命令用于创建一个新分支 并立即切换到新创建的分支:

git checkout -b

例如创建一个名为 feature-branch 的新分支并切换到它:

git checkout -b feature-branch

切换到前一个分支:

以下命令可以快速切换回前一个分支,无需记住分支名称:

git checkout -

检出文件:

以下命令可以将指定文件 恢复到最新的提交状态,丢弃所有未提交的更改,这对于撤销不需要的更改非常有用:

git checkout --

切换到特定提交:

你可以使用提交的哈希值 来切换到特定的提交状态。这将使你进入"分离头指针"状态,只能查看历史记录,而不能进行分支操作。通常情况下,不建议在分离头指针状态下工作,因为更改可能会丢失。

git checkout

切换到标签:

如果你有一个标签 ,你可以使用这个命令来切换到该标签所指向的提交状态。

git checkout tags/

Git switch

git switch 命令用于更清晰地切换分支。

git switch 命令作用与 git checkout 类似,但提供了更清晰的语义和错误检查。

切换分支:

以下命令允许你从当前分支切换到指定的分支 :

git switch

例如将你的工作目录切换到主分支:

git switch master

创建新分支并切换:

以下命令用于创建一个新分支 并立即切换到新创建的分支:

git switch -c

例如创建一个名为 feature-branch 的新分支并切换到它:

git switch -c feature-branch

切换到前一个分支:

以下命令可以让你快速切换回前一个分支,无需记住分支名称:

git switch -

切换到标签:

如果你有一个标签 ,你可以使用这个命令来切换到该标签所指向的提交状态:

git switch tags/

与 git checkout 不同,git switch 更容易理解和使用,因为它专注于分支切换的操作,此外,git switch 还提供了更好的错误检查,可以避免一些常见的错误操作。

**注意:**git switch 是 Git 2.23 版本引入的一个新命令,如果使用的是 Git 的旧版本,可能无法使用 git switch 命令,但仍然可以使用 git checkout 进行相同的操作。

Git restore

git restore 命令用于恢复或撤销文件的更改。

git restore 命令作用包括还原文件到最新提交的状态、丢弃未暂存的更改、丢弃已暂存但未提交的更改等。

还原文件到最新提交的状态以下命令可以将指定文件 恢复到最新的提交状态,丢弃所有未提交的更改:

git restore

这个命令对于撤销不需要的更改非常有用。

还原文件到暂存区的状态

如果你已经使用 git add 将文件添加到暂存区,但希望撤销这些更改,可以使用这个命令:

git restore --staged

以上命令将文件 恢复到暂存区的状态,但不影响工作目录中的文件。

还原全部更改

以下命令将还原所有未提交的更改,包括工作目录和暂存区的更改:

git restore .

使用这个命令要谨慎,因为它会清除所有未提交的修改。

还原文件到指定提交的状态如果你想将文件 恢复到特定提交 的状态,可以使用以下命令:

git restore --source=

这个命令在需要查看历史状态或将文件还原到历史版本时非常有用。

交互式还原:

以下命令允许你以交互方式选择要还原或保留的更改:

git restore -i

执行这个命令它会打开一个交互式界面,让你选择如何处理每个更改。

git restore 的目标是提供一种更直观、易于理解的方式来管理文件的状态,它的引入使得 Git 用户能够更容易地处理不同阶段的更改,从而提高了工作流的效率。

**注意:**git restore 是 Git 2.23 版本引入的一个命令,如果你使用的是较早版本的 Git,可能无法使用 git restore 命令,但你仍然可以使用 git checkout 等命令来进行类似的操作。

远程操作

命令 说明
git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码并合并
git push 上传远程代码并合并

git clone

从现有仓库中拷贝项目,拷贝一份远程仓库,也就是下载一个项目。

克隆仓库的命令格式为:

git clone

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone

参数说明:

  • repo:Git仓库
  • directory:本地目录

配置

git 的设置使用 git config 命令。显示当前的 git 配置信息:

$ git config --list

编辑 git 配置文件:

$ git config -e # 针对当前仓库

或者:

$ git config -e --global # 针对系统上所有仓库

设置提交代码时的用户信息:

git config --global user.name "runoob" git config --global user.email test@runoob.com

如果去掉 --global 参数只对当前仓库有效。

Git分支管理

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

Git 分支实际上是指向更改快照("修订版"的替换术语)的指针

git branch:列出分支,没有参数时会列出本地分支

git branch (branchname) 手动创建一个分支

git checked(branch) 切换到要修改的分支,修改的分支

git checkout -b (branchname) 创建新分支并立即切换到该分支下,从而在该分支中操作

git branch -d (branchname) 删除分支

git merge 合并分支命令,可以讲讲任何分支的的内容合并到当前分支中来

Git 查看提交历史

Git 提交历史一般常用两个命令:

git log :查看历史提交记录。

第一行的commit是哈希算法算出的id,分布式是没有一个主版本号的,他们都是用id做标志,同时用master作为主仓库,其他分支怎样改动都不会影响主master; head是指向的意思,表示提交到哪里; author代表作者的意思,显示格式是:用户名<邮箱> date表示提交时间,后面的+0800这个是格林尼治时间,代表当前是以哪儿的时间地作为基准,这是世界时间,用它来作为基数与当前所在地时差进行计算,包括地球自转等公式。 最下面就是注释

git blame : 以列表形式查看指定文件的历史修改记录。

Git 标签

-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。

$ git tag -a v1.0

当你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。

查看所有标签可以使用以下命令:

$ git tag

相关推荐
梦里不知身是客1124 分钟前
Spark介绍
大数据·分布式·spark
啊吧怪不啊吧31 分钟前
SQL之表的查改(下)
大数据·数据库·sql
猫猫姐姐8 小时前
Flink基于Paimon的实时湖仓解决方案的演进
大数据·flink·湖仓一体
极客数模11 小时前
2025年(第六届)“大湾区杯”粤港澳金融数学建模竞赛准备!严格遵循要求,拿下大奖!
大数据·python·数学建模·金融·分类·图论·boosting
Elastic 中国社区官方博客13 小时前
Elastic AI agent builder 介绍(三)
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
王卫东14 小时前
深入HBase:原理剖析与优化实战
大数据·数据库·hbase
HaiLang_IT15 小时前
2026 人工智能与大数据专业毕业论文选题方向及题目示例(nlp/自然语言处理/图像处理)
大数据·人工智能·毕业设计选题
呆呆小金人15 小时前
SQL键类型详解:超键到外键全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
StarRocks_labs15 小时前
StarRocks 4.0:基于 Apache Iceberg 的 Catalog 中心化访问控制
大数据·apache
Rverdoser15 小时前
制作网站的价格一般由什么组成
前端·git·github