基本概念
在实际开发中,会使用 git 作为版本控制工具来完成团队协作。因此,对基本的 git 操作指令进行总结是十分有必要的。
git 的通用操作流程如下图:
主要涉及到四个关键点:
1.工作区:本地电脑存放项目文件的地方,比如 learnGitProject 文件夹;
2.暂存区(Index/Stage):在使用 git 管理项目文件的时候,其本地的项目文件会多出一个.git 的文件夹,将这个.git 文件夹称之为版本库。其中.git 文件夹中包含了两个部分,一个是暂存区(Index 或者 Stage),顾名思义就是暂时存放文件的地方,通常使用 add 命令将工作区的文件添加到暂存区里;
3.本地仓库:.git 文件夹里还包括 git 自动创建的 master 分支,并且将 HEAD 指针指向 master 分支。使用 commit 命令可以将暂存区中的文件添加到本地仓库中;
4.远程仓库:不是在本地仓库中,项目代码在远程 git 服务器上,比如项目放在 github 上,就是一个远程仓库,通常使用 clone 命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;

因此,经过这样的分析,git 命令可以分为这样的逻辑进行理解和记忆:
1.git 管理配置的命令;
2.几个核心存储区的交互命令:
3.工作区与暂存区的交互;
4.暂存区与本地仓库(分支)上的交互;
5.本地仓库与远程仓库的交互。
本地基本操作
初始化本地库
git init
查看状态
git status
添加暂存区 git add
- 将当前目录及其子目录下所有变更添加到暂存区
git add .
- 将本地库所有变更添加到暂存区
git add -A
- 指定文件添加暂存区
git add file1 file2 ...
提交本地库 git commit
- 提交所有变更
git commit
# or
git commit -m '日志信息' -a
- 提交当前目录及其子目录的变更
git commit -m '日志信息' .
- 提交指定文件
git commit -m '日志信息' fileName
分支命令
创建分支
- 基于当前分支创建分支
git branch 新分支
- 基于指定分支创建分支
git branch 新分支 已有分支
- 基于某个 commit 创建分支
git branch 新分支 commitID
- 基于当前分支创建分支并切换到新分支
git checkout -b 新分支
- 基于远程分支创建新分支
git checkout -b 新分支 别名/远程分支名
git checkout -b test_2023 origin/test_2023
查看本地分支
git branch -v
删除分支
- 安全删除本地分支
git branch -d 分支
- 强制删除本地分支
git branch -D 分支
切换分支
git checkout 分支名
合并分支
合并本地分支
- 将 A 分支合并到当前分支,且为 merge 创建 commit
git merge A
- 将 A 分支合并到 B 分支,且为 merge 创建 commit
git merge A B
- 把当前分⽀基于 B 分⽀做 rebase,以便把 B 分⽀合⼊到当前分⽀
git rebase B
- 把 A 分⽀基于 B 分⽀做 rebase,以便把 B 分⽀合⼊到 A 分⽀
git rebase B A
合并远程仓库分支
- 将远程指定分支与本地当前分支合并。可用于在合并到团队公共分支之前解决冲突问题,在本地合并公共分支先解决掉冲突。
git merge --no-ff origin/develop_2023-03-12
远程仓库交互
git remote
- 查看所有远程仓库地址别名
git remote -v
- 为远程仓库起别名
git remote add 别名 地址
- 删除远程仓库别名
git remote remove 别名
- 修改别名
git remote rename 旧名 新名
git clone
- 克隆远程仓库到本地
git clone 地址
- 克隆远程仓库指定分支到本地
git clone -b 远程仓库分支名 地址
git pull
- 拉取远程分支,并与本地分支合并
git pull 别名 分支名
git push
- 推送本地指定分支到仓库指定分支
git push 别名 本地分支:远程分支
- 如果远程分支被省略,表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin master
- 如果省略本地分支名,等同于推送一个空的本地分支到远程分支,表示删除指定的远程分支,等同于
git push origin :master
# 等同于
git push origin --delete master
- 强制推送
git push --force origin master
- 直接使用仓库地址推送,无需起别名
git push git@github.com:<USERNAME>/<REPO>.git master:main