本博客用于记录本人在工作中用到的Git命令、功能及对应的使用场景,后续会逐步更新完善,如有错误欢迎评论区指正。
一、分支
1.1 常用命令
| 命令 | 作用 |
| git branch | 显示本地所有分支 |
| git branch -v | 列出本地所有分支,并显示每个分支最后一次提交的摘要信息 |
| git branch -r | 显示远程跟踪分支 |
| git branch -a | -a是--all的简写,显示本地和远程跟踪分支 |
| git branch -vv | 查看本地分支和远程分支的关联关系 |
| git switch <分支名> | 切换到已经存在的指定分支 |
| git checkout <分支名> |
| 命令 | 作用 |
git switch -c <分支1> <分支2> | -c(--create简写),基于<分支2>创建名称为<分支1>分支并切换到<分支1>。当<分支2>省略时,默认基于当前分支创建。 如果想使用该命令基于远程分支在本地创建同名分支,<分支2>设置为远程跟踪分支(格式通常为origin/branch_name),<分支1>需设置为同名(对应的为branch_name),此时会基于远程跟踪分支<分支2>在本地创建同名分支并切换。但新建分支与远程分支不会建立关联。 |
git switch -t origin/<远程分支名>等价于 git switch -c <远程分支名> -t origin/<远程分支名> | -t(--track简写),基于远程跟踪分支自动创建同名分支并切换,同时建立关联。 注意基于远程分支创建分支时需要先执行git fetch获取远程分支最新状态。 |
| git checkout -b <new_branch_name> <branch_name2> | -b(--branch简写),同git switch -c命令 |
git checkout --track origin/<远程分支名>等价于 git checkout -b --track <远程分支名> origin/<远程分支名> | 同git switch -t命令 |
| git branch <new_branch_name> | 基于当前分支创建分支,但不切换 |
| git branch -d <branch_name> | 删除分支,通常是在目标分支出现BUG时,会在本地基于目标分支新建一个分支用于BUG修复,BUG修复完成并合入目标分支后,使用该命令将修复分支删除。 |
| git branch -D <branch_name> | 强制删除分支 |
1.2 关于origin
在Git命令中,有时会包含origin或origin/,有时又没有,初学者容易困惑。
简单来说,origin只是远程仓库的一个别名。当你从GitHub克隆一个项目到本地时,Git会自动给这个远程服务器起名叫origin。
至于什么时候加origin,什么时候不加,关键在于要操作的是本地分支还是远程分支。可通过以下三个场景理清:
1.2.1 什么时候不加origin
场景:操作本地电脑上的真实分支
当你在本地进行日常的代码开发、提交和切换分支时,不需要加origin,因为Git默认你在操作本地仓库。
- 创建/切换本地分支:git switch release/1.0或git checkout release/1.0
- 查看本地分支:git branch
- 提交代码到本地:git commit -m "update"
1.2.2 什么时候加origin(不带斜杠)
场景:告诉Git你要和哪个“远程服务器”通信
当你要把本地代码推送到远程,或者从远程拉去代码时,你需要先指定目标仓库。origin在这里代表“远程服务器”,通常可省略。
- 推送到远程:git push origin release/1.0
- 从远程拉取:git pull origin release/1.0
- 添加新的远程仓库:git remote add upstream <url>(这里upstream是另一个别名)
1.2.3 什么时候加origin/(带斜杠)
场景:引用远程分支在本地留下的“快照”,即远程跟踪分支。
这是最容易混淆的地方。在本地通过git branch -r命令展示的origin/release/1.0并不是服务器上的真实分支,而是上次执行fetch或pull时Git保存在本地的一个只读书签(快照)。它记录了上次执行fetch或pull后远程分支的状态。所以在基于远程分支创建分支之前,要先执行fetch获取远程分支的最新状态。
- 查看远程分支列表:git branch -r (你会看到origin/main)
- 基于远程分支创建本地分支:git checkout -b release/1.0 origin/release/1.0(可以回忆一下该命令是否自动建立两者的关联)