skip to content

Search

基础

6 min read Updated:

Git的基础操作指令

Git分区

在 Git 眼里,你的文件只存在于三个地方:

  1. 工作区(Working Directory):你电脑磁盘上看到的实体文件(你正在编辑的地方)。
  2. 暂存区(Staging Area / Index):一个临时的“购物车”,存放下一次要提交的快照。
  3. 本地仓库(Repository / HEAD):已经提交保存的永久历史记录。

三个区域可以理解为三个独立的仓库版本

文件在这三个区域之间流转,对应了四种状态:

  • 未跟踪(Untracked):全新文件,Git 从未见过(在仓库和暂存区都没有)。
  • 已修改(Modified):在工作区改了,但还没放入暂存区。
  • 已暂存(Staged):已放入暂存区,等待提交。
  • 已提交(Committed):数据已安全存储在本地仓库中。

基础指令

git add

  • 操作对象: 工作区中的文件,新添加的或者修改过的文件
  • 作用: 将工作区的文件复制到暂存区,准备提交。让 Git 开始跟踪新文件,或暂存旧文件的改动

git commit

  • 操作对象: 暂存区中的文件
  • 作用: 将暂存区的内容打包成一个新的提交对象,存入本地仓库。提交后,暂存区会与最新提交一致

git commit -a

  • 操作对象: 工作区中已跟踪的文件(即不包含新文件)
  • 作用: 自动将所有已跟踪文件的当前工作区修改先复制到暂存区,再立刻提交。注意:新文件(未跟踪)不会被包含

git rm

  • 操作对象: 工作区和暂存区中的文件
  • 作用: 物理删除磁盘文件,同时抹掉暂存区的记录,并把“删除”这个动作暂存起来(等待提交)

下次提交时,显示删除该文件

git rm —cached

  • 操作对象: 暂存区中的文件
  • 作用: 只把文件从暂存区抹掉,让 Git 停止跟踪它,但磁盘上的实体文件完好无损(变为未跟踪状态)

git mv

  • 操作对象: 工作区和暂存区中的文件
  • 作用: 相当于执行了三步:重命名磁盘文件 + 删除暂存区里的旧记录 + 添加暂存区里的新记录(一站式完成改名和暂存)

git restore

  • 操作对象: 工作区中的文件
  • 作用: 丢弃你工作区还没暂存的修改。用暂存区里的内容覆盖磁盘文件(相当于“撤销未 add 的改动”)

git restore —staged

  • 操作对象: 暂存区中的文件
  • 作用: 把暂存区回退到 HEAD 的版本。文件修改还在工作区,只是撤销了 git add(将文件变为“已修改未暂存”)

远程

远程分支

远程分支例如origin/main是存在本地.git目录下面的只读分支,用来记录上次查看时,远程仓库的 main 分支指向哪一次提交

远程分支无法在本地直接修改,只能被动被git fetch或者git push更新

git fetch

执行git fetch origin时,只做了两件事:

  • 下载:去远程服务器拉取本地没有的新提交和数据,存入你的本地仓库(.git 文件夹)
  • 移动:把本地的 origin/main 指针,移动到刚刚下载的最新提交上

git fetch重要在于

  • 不动工作区
  • 不动暂存区
  • 不动本地main分支

所以,git fetch 之后,项目文件看起来毫无变化

git pull

执行git pull origin main时,做了两件事:

  • git fetch origin main:去远程服务器拉取本地没有的新提交和数据,更新本地origin/main分支
  • git merge origin/main:把刚刚下载的 origin/main 分支,合并到当前分支上

git push

执行git push origin main时,做了3件事

  • 上传:把本地仓库的 main 分支中远程还没有的提交和文件对象,上传到远程服务器
  • 更新:更新远程服务器的 main 分支指针,指向最新提交
  • 同步:同步本地的origin/main分支指针,与刚刚推送的本地main指向同一个分支