1. 环境准备:Git安装与基础配置
在Ubuntu 20.04上安装Git只需要一条命令。打开终端(Ctrl+Alt+T)输入以下命令:
sudo apt update && sudo apt install git -y安装完成后,我们需要进行最基本的用户信息配置。这个配置非常重要,因为每次代码提交都会记录这些信息。运行以下两条命令,把示例中的姓名和邮箱替换成你自己的GitHub账号信息:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"这里有个实用小技巧:如果你经常在不同项目使用不同身份,可以去掉--global参数,在项目目录下单独配置。我习惯用git config --list查看当前配置,确保不会弄混工作身份。
注意:邮箱地址必须和GitHub账号绑定的邮箱一致,否则贡献统计可能无法正确关联
验证安装是否成功可以输入git --version,如果看到类似git version 2.25.1的输出就说明安装正确。建议再设置下默认文本编辑器,避免遇到需要写提交信息时不知所措:
git config --global core.editor "nano"2. 首次使用:建立本地与云端仓库
2.1 创建GitHub仓库
登录GitHub后,点击右上角"+"选择"New repository"。仓库命名建议使用小写字母和连字符,比如my-first-project。初学者可以暂时忽略其他高级选项,但有两个关键点需要注意:
- README文件:建议勾选创建,它会自动生成一个基础说明文件
- .gitignore:根据项目类型选择模板,比如Python项目会自动忽略.pyc等临时文件
创建完成后,你会看到一个空的仓库页面,记住这个页面顶部的HTTPS地址(形如https://github.com/username/repo.git),接下来会用到。
2.2 初始化本地仓库
在本地项目文件夹打开终端,执行:
git init这个命令会在当前目录创建隐藏的.git文件夹,所有版本控制信息都存储在这里。我建议紧接着创建一个基础项目结构:
mkdir src tests docs touch README.md .gitignore现在执行git status,你会看到所有未被跟踪的文件。这时可以用git add .添加所有文件,但我更推荐明确指定要添加的文件:
git add README.md .gitignore src/2.3 关联本地与远程仓库
使用以下命令将本地仓库与GitHub关联(替换成你的实际地址):
git remote add origin https://github.com/username/repo.git这里有个常见问题:如果输错了远程地址怎么办?可以先git remote remove origin删除错误配置,再重新添加。关联成功后,首次推送代码需要加上-u参数:
git commit -m "初始提交" git push -u origin main提示:GitHub现在默认分支名为main而非master,如果遇到分支名问题可以用
git branch -M main修改
3. 日常开发工作流
3.1 代码修改与提交
典型的开发周期遵循"修改→暂存→提交→推送"的流程。假设我们修改了src/main.py文件:
# 查看哪些文件被修改 git status # 将修改添加到暂存区 git add src/main.py # 提交到本地仓库 git commit -m "修复用户登录逻辑" # 推送到GitHub git push我强烈建议提交信息写得具体明确。糟糕的提交信息如"修复bug",好的提交信息如"修复用户登录时密码验证失效问题"。团队协作时可以加上前缀,比如[auth] 修复登录验证逻辑。
3.2 处理.gitignore
有些文件不应该纳入版本控制,比如:
- 编译产物(*.pyc,pycache)
- 环境配置(.env)
- 编辑器文件(.vscode/)
在.gitignore中添加规则后,已经跟踪的文件需要用以下命令清除:
git rm --cached <file>我常用的Python项目.gitignore模板:
# Byte-compiled __pycache__/ *.py[cod] # Environment .env venv/ # IDE .vscode/ .idea/4. 分支管理与协作
4.1 基础分支操作
创建新分支开发功能是个好习惯:
# 创建并切换到feature分支 git checkout -b feature/user-profile # 开发完成后合并到main分支 git checkout main git merge feature/user-profile # 删除已合并的分支 git branch -d feature/user-profile遇到合并冲突时,Git会在冲突文件中标记冲突位置。解决后需要手动标记为已解决:
git add <冲突文件> git commit4.2 团队协作流程
标准的GitHub协作流程是:
- Fork主仓库到自己的账号
- Clone自己的仓库到本地
- 添加主仓库为上游远程源:
git remote add upstream https://github.com/original/repo.git- 定期同步主仓库变更:
git fetch upstream git merge upstream/main- 推送变更到自己fork的仓库后,在GitHub页面发起Pull Request
5. 常见问题解决方案
5.1 认证失败问题
GitHub已禁用密码认证,推荐两种认证方式:
SSH方式(推荐):
- 生成SSH密钥:
ssh-keygen -t ed25519 - 将~/.ssh/id_ed25519.pub内容添加到GitHub的SSH Keys设置
- 修改远程地址为SSH格式:
git remote set-url origin git@github.com:user/repo.git
Personal Access Token:
- 在GitHub设置中生成token(勾选repo权限)
- 推送时使用token作为密码
5.2 撤销更改
几个常用撤销命令:
- 丢弃工作区修改:
git checkout -- <file> - 取消暂存:
git reset HEAD <file> - 回退到某次提交:
git reset --hard <commit-hash>
5.3 大文件存储
Git不适合直接存储大文件,解决方案:
- 使用git-lfs扩展:
git lfs install git lfs track "*.psd" git add .gitattributes- 或使用.gitignore排除大文件,通过其他方式共享
6. 进阶技巧与工具
6.1 图形化工具
虽然命令行足够强大,但图形工具有时更直观:
gitk:内置的仓库浏览器git gui:图形化提交工具- VS Code的Git插件:内置diff和提交功能
6.2 别名配置
在~/.gitconfig中添加这些别名能提升效率:
[alias] co = checkout br = branch ci = commit st = status last = log -1 HEAD unstage = reset HEAD --6.3 钩子脚本
在.git/hooks/目录下可以添加脚本自动化任务。比如pre-commit钩子可以运行代码检查:
#!/bin/sh flake8 src/ if [ $? -ne 0 ]; then echo "代码风格检查未通过" exit 1 fi记得给脚本添加执行权限:chmod +x .git/hooks/pre-commit
7. 完整开发实例演示
让我们通过一个Python项目实例完整走一遍流程:
- 在GitHub创建新仓库python-demo
- 本地初始化项目:
mkdir python-demo && cd python-demo git init echo "# Python Demo" > README.md mkdir src tests touch src/__init__.py src/main.py- 编写基础代码后提交:
git add . git commit -m "项目初始化" git remote add origin https://github.com/yourname/python-demo.git git push -u origin main- 开发新功能时:
git checkout -b feature/calculator # 编写计算器功能代码... git add src/ git commit -m "添加基础计算器功能" git push origin feature/calculator- 在GitHub页面发起Pull Request,经过代码审查后合并到main分支