常用操作

2025-04-25
1379字
Git

暂存区基本操作

添加到暂存区

将文件添加到暂存区有三种方式:

  1. 特定文件,例如git add utils/tools.py
  2. 特定目录,例如git add utils/,递归搜索utils下面的所有文件并添加到暂存区;
  3. 通配符匹配,例如git add ./*.py

使用后两种方式的时候,只会将未被.gitignore匹配到的文件加入暂存区,第一种方式的优先级高于.gitignore。

从暂存区回退

.git/obejcts目录下的文件不会被改变,从暂存区删除只是从.git/index中修改工作文件与blob文件的关联关系而已。

操作命令:git restore --staged <file><file>同样可以使用上述的三种方式指定。

停止追踪文件

很好理解,从.git/index中删除对应的关联关系即可。

操作命令:git rm --cached <file><file>同样可以使用上述的三种方式指定。

.gitignore

.gitignore是git仓库根目录下的一个

引用提交

引用提交可以理解为使用某种标识定位到特定的提交。有三种常见的方式:

  1. 通过分支、标签或者HEAD指针;
  2. 直接通过提交的hash值;
  3. 在1或者2的基础上进行相对定位。

git中以提交为作用对象的命令都可以使用这些引用方式,以git log -n 1 <commit>(这个命令输出<commit>的概要信息,-n 1表示只输出当前提交的信息,不沿parent指针向上回溯)为例,可以使用下面的几种命令:

git log -n 1 HEAD  # HEAD区分大小写
git log -n 1 main
git log -n 1 <hash>  # 只需要【可以唯一确定一个提交】的长度即可
git log -n 1 main^
git log -n 1 HEAD^2~3
git log -n 1 main^2^

^~是相对定位。

^表示向上回溯一次,如果存在多个父提交(合并时产生),默认回溯到第一个父提交,可以用^<index>指定具体要回溯到哪个父提交。父提交的顺序可以使用git log --pretty=%P -n 1 <commit>查看。

~<n>表示连续向上回溯n个提交(使用沿第一个父提交进行回溯)。

分支基本操作

  • git branch:列出所有本地分支。
  • git branch <new_branch> [<branch>]:新建一个分支<new_branch>,和<branch>分支指向同一提交。如果<branch>未指定,则与HEAD指向同一提交。
  • git branch -d <branch>:删除分支。
  • git switch <branch>:切换到<branch>指向的提交,同时HEAD与<branch>绑定,也就是切“切换到了<branch>分支”。

切换是一个相对复杂的过程,需要做3件事情:修改工作区、重建index文件、HEAD绑定。

一个提交对应一个工作区快照,那么快照中的文件和当前工作区中的文件就有4种可能的情况:

  1. 快照中有,工作区中没有:直接将快照中的文件写入工作区。
  2. 快照中没有,工作区中有:工作区的文件保留原样。
  3. 两者都有,内容一致:这还用说吗。
  4. 两者都有,内容不一致:git会要求将当前的改动提交,否则拒绝执行切换。

这样切换之后的工作区的内容就是目标提交(分支)的内容了,同时当前分支的改动也被妥善保存。

[!TIP]

可以用git switch -c <new_branch>新建一个分支的同时切换到该分支。

[!NOTE]

在Git 2.23之后的版本,请使用switch进行分支切换,不要再用checkout。