Python 开发者的 Git 与 GitHub 入门:从暂存区到远程协作

2026-08-21 25 预计阅读时间: 1 分钟
来源: realpython.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:7 分钟

Git 不只是“保存代码”的工具。对 Python 项目来说,提交记录、暂存区、分支、合并和远程仓库共同组成了一套可回溯的协作流程。理解这些概念后,你不仅能找回误删的代码,也能更有把握地开发功能、修复问题并提交 Pull Request。

一次提交到底保存了什么

Git 通常涉及三个区域:

  • 工作区:你正在编辑的项目文件。
  • 暂存区:下一次提交准备包含的改动。
  • 本地仓库:已经提交并由 Git 记录的版本。

git add 不会提交文件,它只是把改动放入暂存区;git commit 才会创建一个新的版本记录。这个分离很有价值:你可以在一个文件中只提交已经完成的部分,而把仍在修改的内容留在工作区。

可以用下面的命令初始化一个简单的 Python 项目:

mkdir git-python-demo
cd git-python-demo
python -m venv .venv
printf ".venv/\n__pycache__/\n*.pyc\n" > .gitignore
printf 'def greet(name):\n    return f"Hello, {name}!"\n' > app.py
git init
git status
git add app.py .gitignore
git commit -m "Add initial Python project"

这里的 git status 是日常操作的入口。提交前,建议确认三件事:文件是否被正确暂存、是否误把虚拟环境加入提交,以及提交信息是否清楚描述了这次变化。

分支让不同任务并行进行

分支可以理解为一条独立的提交历史。开发新功能时,可以从主分支创建功能分支;修复线上问题时,也可以创建单独的修复分支。这样做能减少未完成代码对稳定分支的影响。

# 查看当前分支和工作区状态
git status

# 从当前提交创建并切换到功能分支
git switch -c add-greeting-test

# 修改代码后检查差异
git diff

# 暂存、提交功能改动
git add app.py
git commit -m "Add greeting behavior"

# 回到主分支并合并功能分支
git switch main
git merge --no-ff add-greeting-test

实际使用中,主分支名称可能是 main,也可能是仓库既有的其他名称。执行命令前可以通过 git branch --show-current 确认当前分支。

合并冲突并不表示 Git 失败,而是 Git 无法替你判断两组改动应该如何组合。发生冲突时,处理顺序可以是:

  1. 执行 git status,定位冲突文件。
  2. 打开文件,处理 <<<<<<<=======>>>>>>> 标记。
  3. 运行测试,确认合并后的 Python 代码仍然有效。
  4. 执行 git add <文件> 标记冲突已解决。
  5. 执行 git commit 完成合并。

不要只为了让合并结束而机械保留一侧内容。合并后的行为和测试结果才是判断依据。

GitHub 负责远程协作

本地仓库记录的是当前机器上的历史,GitHub 等远程仓库则用于备份、共享和团队协作。配置远程仓库后,可以用 push 上传本地提交,用 pull 获取远程分支的更新。

下面是一个可以改造的典型流程。将远程地址替换为你在 GitHub 上创建的仓库地址:

# 查看已有远程仓库
git remote -v

# 首次添加远程仓库
# git remote add origin git@github.com:YOUR_NAME/git-python-demo.git

git branch -M main
git push -u origin main

# 开始新任务
git switch -c fix-input-validation
# 编辑代码并运行测试后提交
git add .
git commit -m "Validate greeting input"
git push -u origin fix-input-validation

在团队项目中,推送功能分支后通常通过 GitHub Pull Request 合并到主分支。Pull Request 不只是审批界面,也是讨论设计、查看差异和运行自动化检查的地方。提交应当尽量小而集中,例如把“输入校验”和“无关的格式化”拆成不同提交,评审和回滚都会更容易。

获取远程更新时,可以先同步远程引用,再决定如何整合:

git fetch origin
git log --oneline --decorate --graph --all
# 确认变更后,将远程主分支合并到当前分支
git merge origin/main

如果项目团队约定使用变基或特定分支策略,应遵循项目规则。不要在多人共享的分支上随意重写已经推送的历史。

给 Python 项目的实用检查清单

可以把下面的习惯加入日常开发:

  • 使用 .gitignore 排除 .venv/__pycache__/.pyc、密钥和本地配置。
  • 提交前运行项目已有的测试和代码检查命令。
  • git diff --staged 检查暂存区,而不是只看工作区差异。
  • 一个提交只解决一个清晰的问题。
  • 提交信息使用动词开头,例如 AddFixUpdate
  • 合并前先同步目标分支,尽早发现冲突。
  • 不要把密码、访问令牌或生产配置提交到远程仓库。

Git 的核心能力不在于记住大量命令,而在于建立清晰的变更边界:哪些修改已经准备好,哪些修改属于另一个任务,哪些版本已经共享给团队。对 Python 开发者而言,掌握工作区、暂存区、本地提交、分支和远程仓库之间的关系,就足以支撑大多数日常项目协作。


相关推荐