Git代码库安装与管理常用操作
一、Git 环境初始化与配置
1.1 安装 Git
- Windows:从 Git 官网 下载安装包,勾选 “Add Git to PATH” 简化命令行使用。
- Linux:通过包管理器安装:
sudo apt install git
(Debian/Ubuntu)或sudo yum install git
(CentOS)。 - macOS:使用 Homebrew:
brew install git
,或通过 Xcode Command Line Tools 安装。
1.2 首次配置用户信息
# 设置全局用户名和邮箱(提交代码时显示的身份)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"# 查看配置信息
git config --list
1.3 配置常用别名(可选)
# 简化常用命令(如用st代替status,co代替checkout)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm "commit -m"
二、本地代码库基础操作
2.1 初始化新仓库
# 在现有项目目录中初始化Git仓库
cd /path/to/your/project
git init # 生成.git隐藏目录(仓库核心文件)
2.2 工作区、暂存区、版本库关系
- 工作区:本地可见的项目文件目录。
- 暂存区(Index):临时存储待提交的修改,通过
git add
提交到暂存区。 - 版本库(Repository):.git 目录,存储所有历史版本和元数据,通过
git commit
提交到版本库。
2.3 基础操作流程
# 1. 创建/修改文件后,查看工作区状态
git status # 显示未跟踪、已修改的文件# 2. 将文件添加到暂存区
git add filename.txt # 添加单个文件
git add . # 添加当前目录所有修改(不包括.gitignore排除的文件)
git add -u # 只添加已跟踪文件的修改(忽略未跟踪文件)# 3. 提交暂存区内容到版本库
git commit -m "feat: 添加用户登录功能" # -m后接提交说明(必填)# 4. 查看提交历史
git log # 显示详细历史(按q退出)
git log --oneline # 简洁显示每条提交(一行一条)
git log --graph --oneline # 图形化显示分支合并历史
2.4 撤销操作
# 撤销工作区修改(未add的文件)
git checkout -- filename.txt # 恢复到最近一次commit或add的状态# 撤销暂存区修改(已add但未commit)
git reset HEAD filename.txt # 将文件从暂存区移回工作区# 撤销最近一次commit(保留修改到工作区)
git reset --soft HEAD~1 # HEAD~1表示上一个版本,~2表示上上个# 彻底回滚到某个版本(谨慎使用!会丢弃后续所有修改)
git reset --hard <commit_id> # commit_id可通过git log获取
三、分支管理核心操作
3.1 分支概念与作用
- 主分支(main/master):存放稳定可发布的代码,禁止直接修改。
- 功能分支(feature/*):开发新功能,如
feature/user-auth
。 - 修复分支(bugfix/*):修复生产环境问题,如
bugfix/login-error
。 - 发布分支(release/*):准备发布版本,如
release/v1.0.0
。
3.2 分支操作命令
# 1. 查看分支
git branch # 显示本地分支(当前分支前带*)
git branch -r # 显示远程分支
git branch -a # 显示本地+远程所有分支# 2. 创建并切换到新分支
git checkout -b feature/payment # 等价于 git branch feature/payment + git checkout feature/payment
# 或Git 2.23+支持的新命令
git switch -c feature/payment# 3. 切换已有分支
git checkout main
# 或新命令
git switch main# 4. 删除本地分支(需先切换到其他分支)
git branch -d feature/old-feature # -d安全删除(确保已合并)
git branch -D feature/unused-feature # -D强制删除(未合并也可删)# 5. 合并分支(如将功能分支合并到main)
git checkout main # 切换到目标分支
git merge feature/payment # 合并feature/payment到当前分支# 6. 解决合并冲突
# 冲突时git status会显示冲突文件,打开文件找到<<<<< HEAD和>>>>>标记的冲突区域
# 手动编辑保留正确代码后,执行:
git add conflicted_file.txt
git commit -m "fix: 解决合并冲突"
四、远程仓库协作(GitHub/GitLab)
4.1 关联远程仓库
# 1. 克隆远程仓库到本地(首次获取项目)
git clone https://github.com/your-username/your-repo.git # HTTPS方式
# 或SSH方式(需配置SSH密钥,更安全)
git clone git@github.com:your-username/your-repo.git# 2. 本地仓库关联远程仓库(已有本地仓库时)
git remote add origin https://github.com/your-username/your-repo.git
# 查看远程仓库信息
git remote -v
4.2 拉取与推送代码
# 1. 拉取远程分支最新代码(避免冲突)
git pull origin main # 拉取远程main分支到本地当前分支# 2. 推送本地分支到远程
git push origin feature/payment # 推送本地feature/payment到远程同名分支
# 首次推送新分支需设置上游关联
git push -u origin feature/payment # 后续可直接用git push# 3. 推送标签(用于版本发布)
git tag v1.0.0 # 创建标签
git push origin v1.0.0 # 推送单个标签
git push origin --tags # 推送所有本地标签
4.3 团队协作流程
- 从远程 main 分支拉取最新代码:
git pull origin main
- 创建功能分支:
git switch -c feature/xxx
- 开发过程中定期提交:
git add . && git cm "xxx"
- 开发完成后拉取远程 main 分支更新:
git pull origin main
(解决本地冲突) - 推送功能分支到远程:
git push -u origin feature/xxx
- 在 GitHub/GitLab 上发起 Pull Request(PR)/Merge Request(MR)
- 代码审核通过后合并到 main 分支,删除功能分支。
五、高效技巧与问题排查
5.1 .gitignore 文件配置
创建 .gitignore
文件排除无需跟踪的文件(如编译产物、日志、IDE 配置):
# .gitignore示例
# 排除编译生成的目录
build/
dist/
# 排除日志文件
*.log
# 排除IDE配置(VS Code)
.vscode/
# 排除特定语言文件
__pycache__/ # Python
node_modules/ # Node.js
5.2 stash 暂存工作区
临时切换分支时,可暂存未提交的修改:
# 暂存当前工作区修改
git stash save "暂存登录功能的半成品"# 查看所有stash
git stash list# 恢复最近一次stash并删除stash记录
git stash pop# 恢复指定stash(如stash@{1})
git stash apply stash@{1} # apply保留stash,pop删除stash
5.3 查看文件修改内容
# 查看工作区与暂存区的差异
git diff filename.txt# 查看暂存区与版本库的差异
git diff --cached filename.txt# 查看工作区与版本库最近一次commit的差异
git diff HEAD filename.txt# 查看两个版本之间的差异
git diff <commit_id1> <commit_id2>
5.4 常见问题解决
-
提交信息写错:
git commit --amend -m "correct message"
(仅修改最近一次未推送的 commit) -
误删分支恢复:
找到分支最后一次提交的 commit_id:git reflog
,然后恢复:git checkout -b recover-branch <commit_id>
-
本地分支与远程分支不一致:
拉取时强制覆盖:git pull origin main --rebase
(rebase 方式合并,保持历史整洁) -
撤销已推送的 commit:
创建新 commit 抵消旧修改:git revert <commit_id>
(安全,不修改历史)
六、进阶操作:Rebase 与 Cherry-pick
6.1 Rebase(变基)保持历史整洁
相比 merge 的 “分叉历史”,rebase 可将分支修改 “嫁接” 到目标分支上,形成线性历史:
# 在功能分支上rebase到main,避免合并节点过多
git switch feature/payment
git rebase main # 将main的最新修改合并到当前分支,解决冲突后继续
# 冲突解决后:git add . && git rebase --continue
# 放弃rebase:git rebase --abort# 推送rebase后的分支(需强制推送,谨慎!)
git push origin feature/payment --force-with-lease # 比--force更安全
6.2 Cherry-pick(挑选提交)
将某个分支的特定 commit 应用到当前分支:
# 1. 在源分支查看commit_id
git log --oneline feature/bugfix # 假设目标commit_id是abc123# 2. 切换到目标分支
git switch main# 3. 应用该commit
git cherry-pick abc123 # 若冲突,解决后git add . && git cherry-pick --continue
七、Git 命令速查表
功能分类 | 常用命令 |
---|---|
配置 | git config --global user.name "Name" 、git config --list |
初始化与克隆 | git init 、git clone <url> |
暂存与提交 | git add <file> 、git commit -m "msg" 、git status |
历史查看 | git log 、git log --oneline 、git log --graph |
分支操作 | git branch 、git checkout -b <branch> 、git merge <branch> |
远程协作 | git remote add origin <url> 、git pull 、git push |
撤销与回滚 | git reset --hard <commit> 、git checkout -- <file> 、git revert <commit> |
暂存与标签 | git stash 、git stash pop 、git tag <tagname> 、git push origin <tag> |
进阶操作 | git rebase <branch> 、git cherry-pick <commit> |