Git 命令

参考文献:

  1. Git 教程 | 菜鸟教程
  2. Git 使用教程:最详细、最正宗手把手教学(万字长文)
  3. 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, remotestags 子目录)

基本命令

使用 --help 可以查看帮助文档。

配置

查看 Git 配置,

git config --list

编辑 Git 配置文件,

git config -e				# 打开当前仓库的 config 文件
git config -e --global		# 打开全局的 config 文件

git config --global user.name "my name"			# 配置全局的用户名
git config --global user.email my@mail.com		# 配置全局的邮箱

使用

在当前目录上创建 Git 仓库,

git init		# 工作目录中出现 .git 子目录

将工作区的修改添加到暂存区,

git add a.txt	# 追踪 a.txt 文件
git add .		# 追踪整个工作目录

将暂存区提交到 Git 仓库,

git commit -m "该提交的说明" 	# 会显示在 git log 日志里
git commit						# 自动打开注解文件,可写入一些注解

查看当前分支的状态(工作区的文件是否被追踪、文件内容是否有修改、暂存区是否尚未提交),

git status

拷贝现有的 Git 仓库,

git clone https://github.com/malb/lattice-estimator.git ./myrepo

递归更新 Git 仓库的子模块,

git submodule update --init --recursive

其他命令

日志

查看日志信息(哈希值、提交者、提交时间、提交信息),

git log
git log --oneline	# 简洁版本
git log --graph		# 分支、合并的拓扑图

该指令还包含多种参数,比如 --auther=<作者>, --since=<起始时间>, --until=<结束时间>,等等。

查看某个文件的修改历史(逐行显示:哈希值、作者、时间、内容),

git blame a.txt
git blame -L 1,3 a.txt			# 只显示第 1-3 行的内容
git blame --show-stats a.txt	# 额外显示该文件 blob, commits 对象的数量

分支

查看所有的分支,

git branch

创建新的分支,同时切换到该分支上,

git checkout -b kem		# 此时 master 和 kem 依然重合,执行 add 和 commit 之后将分离

如果想要切换master 分支,可以执行:

git checkout master

此时,工作区会被修改为 master 分支的最新快照。

合并分支(假设有 kempqc 两个分支,当前指向 kem),

git merge pqc		# 将 pqc 分支合并到 kem 分支上,其中 pqc 不变,而 kem 变化

如果出现冲突,这些文件中的冲突内容会被标记,需要手动解决,然后再 addcommit。冲突标记的含义是:

  • <<<<<<<<:冲突区域的起始标记,接下来的内容是当前分支(比如 kem)的文件内容;
  • ========:冲突区域的分隔标记,接下来的内容是合并分支(比如 pqc)的文件内容;
  • >>>>>>>>:冲突区域的结束标记,接下来是两个分支的非冲突部分。

删除本地的分支(要求不是当前分支),

git branch -d pqc	# 删除 pqc 分支

回退

查看 HEAD 的变更日志(显示前 7 7 7 位哈希值),可以找回丢失的提交,

git reflog
git reflog show master

分支回退到特定的提交,

git reset --soft b36f484		# 仅将 HEAD 回退到 b36f484 版本
git reset --mixed b36f484		# 也把 index 回退到 b36f484 版本(默认)
git reset --hard b36f484		# 把工作区也回退到 b36f484 版本(危险动作,未提交的修改内容将丢失)

工作区回退到特定的提交,

git checkout b36f484			# 将整个工作区回退到 b36f484 版本
git checkout d748164 -- a.txt 	# 仅把 a.txt 回退到 d748164 版本
git checkout master				# 切换回 master 版本

如果切换的提交不是该分支的最新版本(真的回退,而非切换),将会进入 detached HEAD 状态(即 HEAD 指向了具体的提交,而非某个分支)。此时查看 git branch,会发现多了一个临时的分支。如果工作区做了修改,在该状态下的所有提交,将不被任何一个分支引用;因此,需要创建新的分支,以保存这些修改。

标签

为当前分支的最新版本打标签

git tag v1.0.0						# 不带附注
git tag -a v1.0.1 -m "注解信息"		# 携带附注,包括:作者、时间

查看标签,

git tag				# 显示所有标签
git show v1.0.0		# 查看该标签的信息

忽略指定文件

在工作目录中,新建文件 .gitignore(就叫这个名字),内容设置为:

bin			# 排除 bin 目录
build		# 排除 build 目录
doc/*.png	# 排除 doc 目录下的所有 png 文件
log.txt		# 排除 log.txt 文件

此时执行 git status,打印内容中不再包含上述被排除的路径。执行 git add . 命令时,就忽略了这些文件的修改。

远程仓库

为了协作,可以使用 github.com 作为远程仓库的服务器,需要配置账户和 SSH 密钥。比较繁琐,这部分内容以后有时间再补充。

<think>好的,我现在需要帮助用户了解Git命令的使用教程和常见命令列表。首先,用户提到想学习Git命令的用法,可能需要基础命令的介绍和一些实际例子。根据用户提供的引用内容,我应该优先包含git config、git add、git commit、git push这些基本命令,因为这些在引用中都有提到。特别是引用1详细介绍了git config和git add的使用,引用3提到了git push的简化操作。 接下来,我需要确保结构清晰,按照用户的要求分步骤讲解。可能的结构是:安装配置、基本工作流程、分支管理、远程仓库操作、其他常用命令。每个部分下给出具体的命令和示例,比如在配置部分,引用1和引用2都提到了git config的使用,包括设置用户名、邮箱和查看配置列表,这些都需要包含进去。 另外,用户示例中的Python代码块提醒我需要用代码块格式展示Git命令,但注意用户的问题是关于Git的,所以应该用命令行代码块,如```bash。同时,需要检查LaTeX格式是否正确,不过这个问题中可能用到的数学公式不多,但如果有的话,比如在解释某些概念时,可能需要使用行内公式,比如$ git add $这样的变量?不过Git命令本身不需要数学公式,所以可能不用,但需要留意系统指令中的要求。 用户还要求生成相关问题,我需要根据内容提出相关问题,比如如何撤销提交、分支管理策略等,这些是用户可能进一步想了解的。 需要确保引用的正确使用,每个引用对应的内容要准确。例如,引用1提到git add .,引用3提到git push -u origin master,这些都要在相应部分标注引用标识。同时,用户提供的引用中没有提到git commit、git status等命令,但这些属于常见命令,可能需要补充,但因为没有引用来源,可能需要避免引用标记,或者如果用户提供的引用中确实没有,可能需要不标注引用,但根据用户给出的引用,只能使用现有的三个引用。 不过,用户提供的引用中,引用1提到了git config和git add,引用2是git config --list,引用3是git push。所以当提到这些特定命令时,添加对应的引用标记,其他命令git commit、git status可能没有引用来源,就不添加引用标识。 最后,生成的相关问题应该围绕Git的进一步学习,比如配置管理、撤销操作、分支合并冲突解决、.gitignore文件使用等,这些都是用户可能感兴趣的点。 现在开始组织内容: 1. 安装与配置:根据引用1和2,介绍git config设置用户信息,查看配置。 2. 基本工作流程:git init, git add(引用1), git commit, git status, git log。 3. 分支管理:git branch, git checkout, git merge。 4. 远程仓库:git remote add, git push(引用3), git pull。 5. 其他命令git clone, .gitignore, git reset(可能没有引用来源,但常见)。 在写作时,确保每个命令的示例正确,比如git add . 来自引用1,要标注[^1]。git config --list来自引用2,标注[^2]。git push -u来自引用3,标注[^3]。 可能还需要检查是否有其他命令在引用中提到,但根据提供的三个引用,主要涉及config、add、push。因此,其他命令可能没有引用来源,但用户的问题需要常见命令列表,所以必须包含,但引用标记只用在对应的部分。 最后生成相关问题,如如何撤销提交、解决合并冲突、配置忽略文件等。</think>### Git 常用命令使用教程 Git 是分布式版本控制系统,以下是基础命令和常见用法: --- #### 一、安装与配置 1. **配置用户信息**(提交时标识身份) ```bash git config --global user.name "你的用户名" git config --global user.email "你的邮箱" ``` 此配置会保存在全局文件(如 `~/.gitconfig`)。 2. **查看当前配置** ```bash git config --list ``` 可检查所有生效的配置项。 --- #### 二、基本工作流程 1. **初始化仓库** ```bash git init ``` 2. **添加文件到暂存区** ```bash git add <文件名> # 添加单个文件 git add . # 添加所有修改和新文件 ``` 3. **提交更改** ```bash git commit -m "提交说明" ``` 4. **查看状态与日志** ```bash git status # 查看工作区和暂存区状态 git log # 查看提交历史 ``` --- #### 三、分支管理 1. **创建与切换分支** ```bash git branch <分支名> # 创建分支 git checkout <分支名> # 切换分支 git checkout -b <分支名> # 创建并切换 ``` 2. **合并分支** ```bash git merge <目标分支> ``` --- #### 四、远程仓库操作 1. **关联远程仓库** ```bash git remote add origin <仓库URL> ``` 2. **推送代码** ```bash git push -u origin master # 首次推送需指定分支[^3] git push # 后续推送可简化 ``` 3. **拉取更新** ```bash git pull origin master ``` --- #### 五、其他常用命令 | 命令 | 用途 | |------|------| | `git clone <仓库URL>` | 克隆远程仓库到本地 | | `git reset <文件>` | 撤销暂存区的修改 | | `git diff` | 查看文件差异 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值