Git 下令

[复制链接]
发表于 2025-9-17 23:00:33 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
参考文献:

  • Git 教程 | 菜鸟教程
  • Git 利用教程:最详细、最正宗手把手教学(万字长文)
  • git忽略某个目次或文件不上传


工作原理

Git 是由 Linus Torvalds 开辟的分布式版本控制系统,可以或许追踪各类文件的修改汗青,方便备份、分支、规复到旧版本,还可以实现协同开辟、统计工作量,等等。
起首,有三个根本概念,


  • 工作区(Working Directory):即我们的工作目次及其子目次,这是项目的当前状态;
  • 暂存区(Staging Area):这是暂时存储区,记载了工作区中尚未提交到版本库的文件快照(在 .git/index 文件中记载);
  • 版本库(Repository):记载每次提交的文件快照(只读),可进一步分为当地仓库(即 .git 目次)和长途仓库(好比 github.com)。
它们之间的关系如图所示:

当地仓库(.git 目次)包罗如下的内容,


  • config 文件:存储该仓库特有的设置信息,可以覆盖全局设置。
  • description 文件:记载了该仓库的形貌信息,通常没什么用。
  • HEAD 文件:指向当前分支,内容形如 ref: refs/heads/master(表示处于 master 分支)
  • index 文件:这是暂存区,记载了待提交文件的元数据(文件名、权限)及其内容的哈希值(利用 SHA-1)。
  • COMMIT_EDITMSG 文件:记载每次提交时,所附带的形貌信息。
  • branches 目次:在早期 Git 版本中,用于用于存储当地分支的引用,当前已很少利用。
  • refs 目次:存储了各种引用,重要包罗:当地分支(heads 子目次)、标签(tags 子目次)、长途分支(remotes 子目次)。
  • objects 目次:此为焦点存储目次,所有的提交(commit)、树(tree)、文件内容(Binary Large Object, blob)和标签(tag)等对象都以文件情势存储在这里;每个对象都有一个哈希值,取前两位作为子目次的名称。详细而言,

    • tree:记载了目次结构,包罗了对相应 blob 的引用;
    • blob:记载了文件内容,但是不包罗文件名、文件路径等信息;如果文件内容发生厘革(匹配 Hash 值),实验 git add filename 下令会创建新的 blob 对象;
    • commit:记载了一个版本的快照,包罗一个 tree 的引用,以及提交信息(提交者、提交时间、提交阐明,等等);
    • tag:对于某些紧张的版本,可以打上故意义的标签(好比 v1.0.0),以方便后续管理和引用。

  • info 目次:重要包罗 exclude 文件,作用与 .gitignore 雷同,用于排除一些文件或目次。
  • hooks 目次:包罗了一些 “钩子” 脚本,会在某些 Git 操纵发生之前/之后主动实验。
  • logs 目次:存储了每个引用的日志日志信息,此中 logs/HEAD 文件记载了当前分支的更新和切换(旧提交哈希值,新提交哈希值,操纵人信息,时间戳,操纵形貌),logs/refs 目次存储了各个引用的变更汗青(包罗 heads, remotes 和 tags 子目次)
根本下令

利用 --help 可以检察资助文档。
设置

检察 Git 设置,
  1. git config --list
复制代码
编辑 Git 设置文件,
  1. git config -e                                # 打开当前仓库的 config 文件
  2. git config -e --global                # 打开全局的 config 文件
  3. git config --global user.name "my name"                        # 配置全局的用户名
  4. git config --global user.email [email protected]                # 配置全局的邮箱
复制代码
利用

在当前目次上创建 Git 仓库,
  1. git init                # 工作目录中出现 .git 子目录
复制代码
将工作区的修改添加到暂存区,
  1. git add a.txt        # 追踪 a.txt 文件
  2. git add .                # 追踪整个工作目录
复制代码
将暂存区提交到 Git 仓库,
  1. git commit -m "该提交的说明"         # 会显示在 git log 日志日志里
  2. git commit                                                # 自动打开注解文件,可写入一些注解
复制代码
检察当前分支的状态(工作区的文件是否被追踪、文件内容是否有修改、暂存区是否尚未提交),
  1. git status
复制代码
拷贝现有的 Git 仓库,
  1. git clone https://github.com/malb/lattice-estimator.git ./myrepo
复制代码
递归更新 Git 仓库的子模块,
  1. git submodule update --init --recursive
复制代码
其他下令

日志日志

检察日志信息(哈希值、提交者、提交时间、提交信息),
  1. git log
  2. git log --oneline        # 简洁版本
  3. git log --graph                # 分支、合并的拓扑图
复制代码
该指令还包罗多种参数,好比 --auther=<作者>, --since=<起始时间>, --until=<竣事时间>,等等。
检察某个文件的修改汗青(逐行表现:哈希值、作者、时间、内容),
  1. git blame a.txt
  2. git blame -L 1,3 a.txt                        # 只显示第 1-3 行的内容
  3. git blame --show-stats a.txt        # 额外显示该文件 blob, commits 对象的数量
复制代码
分支

检察所有的分支,
  1. git branch
复制代码
创建新的分支,同时切换到该分支上,
  1. git checkout -b kem                # 此时 master 和 kem 依然重合,执行 add 和 commit 之后将分离
复制代码
如果想要切换回 master 分支,可以实验:
  1. git checkout master
复制代码
此时,工作区会被修改为 master 分支的最新快照。
归并分支(假设有 kem 和 pqc 两个分支,当前指向 kem),
  1. git merge pqc                # 将 pqc 分支合并到 kem 分支上,其中 pqc 不变,而 kem 变化
复制代码
如果出现辩说,这些文件中的辩说内容会被标志,须要手动办理,然后再 add 和 commit。辩说标志的寄义是:


  • <<<<<<<<:辩说地区的起始标志,接下来的内容是当前分支(好比 kem)的文件内容;
  • ========:辩说地区的分隔标志,接下来的内容是归并分支(好比 pqc)的文件内容;
  • >>>>>>>>:辩说地区的竣事标志,接下来是两个分支的非辩说部门。
删除当地的分支(要求不是当前分支),
  1. git branch
  2. -d pqc        # 删除 pqc 分支
复制代码
回退

检察 HEAD 的变更日志(表现前                               7                          7               7 位哈希值),可以找回丢失的提交,
  1. git reflog
  2. git reflog show master
复制代码
将分支回退到特定的提交,
  1. git reset --soft b36f484                # 仅将 HEAD 回退到 b36f484 版本
  2. git reset --mixed b36f484                # 也把 index 回退到 b36f484 版本(默认)
  3. git reset --hard b36f484                # 把工作区也回退到 b36f484 版本(危险动作,未提交的修改内容将丢失)
复制代码
将工作区回退到特定的提交,
  1. git checkout b36f484                        # 将整个工作区回退到 b36f484 版本git checkout d748164 -- a.txt         # 仅把 a.txt 回退到 d748164 版本git checkout master
  2.                                 # 切换回 master 版本
复制代码
如果切换的提交不是该分支的最新版本(真的回退,而非切换),将会进入 detached HEAD 状态(即 HEAD 指向了详细的提交,而非某个分支)。此时检察 git branch
,会发现多了一个暂时的分支。如果工作区做了修改,在该状态下的所有提交,将不被任何一个分支引用;因此,须要创建新的分支,以生存这些修改。
标签

为当前分支的最新版本打标签,
  1. git tag v1.0.0                                                # 不带附注
  2. git tag -a v1.0.1 -m "注解信息"                # 携带附注,包括:作者、时间
复制代码
检察标签,
  1. git tag                                # 显示所有标签
  2. git show v1.0.0                # 查看该标签的信息
复制代码
忽略指定文件

在工作目次中,新建文件 .gitignore(就叫这个名字),内容设置为:
  1. bin                        # 排除 bin 目录
  2. build                # 排除 build 目录
  3. doc/*.png        # 排除 doc 目录下的所有 png 文件
  4. log.txt                # 排除 log.txt 文件
复制代码
此时实验 git status
,打印内容中不再包罗上述被排除的路径。实验 git add . 下令时,就忽略了这些文件的修改。
长途仓库

为了协作,可以利用 github.com 作为长途仓库的服务器,须要设置账户和 SSH 密钥。比力繁琐,这部门内容以后偶尔间再增补。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表