Git 分支与提交操作:从本地仓库到 GitHub

Git 的日常操作可以理解成一条链路:先把文件变成一次提交,再从提交创建分支,最后把分支推送到远程仓库。把这条链路理清之后,git branch、git commit 和 git push 就不容易混在一起了。

一、Git 中的三个位置
一次修改通常会经过三个位置:
- 工作区:正在编辑的文件。
- 暂存区:执行
git add后,准备放入下一次提交的内容。 - 提交历史:执行
git commit后,形成一个可以被分支指向的版本节点。
常用检查命令是:
git status它可以告诉我们哪些文件还没有加入暂存区、哪些文件已经暂存,以及当前处于哪个分支。
二、初始化仓库并完成第一次提交
如果看到:
已初始化空的 Git 仓库于 /path/to/project/.git/说明 .git 目录已经创建,但仓库还没有提交。此时先执行:
git add .git commit -m "Initial commit"git add . 会把当前目录下的修改加入暂存区;git commit 才会真正产生第一个提交。
也可以只提交某个文件夹:
git add folder-a/git commit -m "更新 folder-a"三、创建和切换分支
创建并立即切换
现在 Git 推荐使用:
git switch -c Quadruped-robot-investigation其中 -c 的含义是 create,表示创建新分支并切换过去。
旧版 Git 的等价写法是:
git checkout -b Quadruped-robot-investigation只创建,不切换
git branch Quadruped-robot-investigation这个命令要求当前仓库至少已经有一个提交。空仓库中没有 master 对应的提交对象,因此会出现:
fatal: 不是一个有效的对象名:'master'解决方法就是先完成第一次提交,再创建分支。
切换到已有分支
git switch Quadruped-robot-investigation旧版 Git 可以写成:
git checkout Quadruped-robot-investigation查看本地分支:
git branch带有 * 的分支就是当前分支。
修改当前分支名称
git branch -m 是重命名,不是创建分支:
git branch -m 新名称例如,想把当前分支直接改名为目标名称,可以使用:
git branch -M Quadruped-robot-investigation不要写成 git branch -b,因为 git branch 没有 -b 这个选项;创建并切换应使用 git switch -c 或 git checkout -b。
四、不同文件夹能否推送到不同分支?
可以选择性地提交不同文件夹:
git switch -c branch-agit add folder-a/git commit -m "更新 folder-a"
git switch maingit switch -c branch-bgit add folder-b/git commit -m "更新 folder-b"但要注意,Git 的分支不是“只存一个文件夹”。分支指向的是整个仓库的一组提交,每个提交描述的是整个项目在某一时刻的状态。git add folder-a/ 只是让这次提交主要包含 folder-a 的修改。
如果两个文件夹需要长期完全独立管理,通常更适合拆成两个仓库;如果只是希望同时在不同目录中开发不同分支,可以考虑 git worktree。
五、添加远程仓库
第一次添加远程仓库:
git remote add origin https://github.com/33233dp/AHU.git查看远程地址:
git remote -v如果出现:
error: 远程 origin 已经存在。说明远程仓库已经配置过了,不需要再次 add。如果地址写错,使用 set-url 修改:
git remote set-url origin https://github.com/33233dp/AHU.git在终端中输入远程地址时要使用原始 URL,不要把 Markdown 链接写法 [文字](URL) 一起复制进去。
六、使用 SSH 推送到 GitHub
本机有 SSH 密钥,并不代表 HTTPS 远程地址会自动使用 SSH。下面这个地址仍然是 HTTPS:
https://github.com/33233dp/AHU.git如果希望使用 SSH,应把远程地址改成:
git remote set-url origin git@github.com:33233dp/AHU.git测试 SSH 是否能连接 GitHub:
ssh -T git@github.com如果密钥没有加入当前 SSH agent,可以尝试:
ssh-add ~/.ssh/id_ed25519七、推送本地分支
第一次把本地分支推送到远程时,使用 -u 建立跟踪关系:
git push -u origin Quadruped-robot-investigation建立跟踪关系后,后续在该分支中通常可以直接使用:
git pushgit pull完整流程可以压缩成下面几步:
git initgit add .git commit -m "Initial commit"git switch -c Quadruped-robot-investigationgit remote add origin git@github.com:33233dp/AHU.gitgit push -u origin Quadruped-robot-investigation如果远程 origin 已经存在,就跳过 git remote add origin ...;如果它仍然是 HTTPS 地址,则先用 git remote set-url 改成 SSH 地址。
常见报错速查
| 报错或现象 | 原因 | 处理方式 |
|---|---|---|
不是一个有效的对象名:'master' | 仓库还没有第一次提交 | 先执行 git add . 和 git commit |
未知开关 'b' | 把 git branch 和 checkout -b 的写法混用了 | 使用 git switch -c 分支名 |
远程 origin 已经存在 | 远程名称已经配置 | 用 git remote -v 查看,必要时用 git remote set-url 修改 |
| 推送时要求输入用户名和密码 | 远程地址是 HTTPS | 改用 git@github.com:用户/仓库.git 的 SSH 地址 |
记住一句话即可:先提交,再建分支;先确认远程协议,再推送分支。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














