Git基本命令
Git 基本命令全解析:从入门到精通
Git 作为目前最流行的分布式版本控制系统,其命令是开发者日常协作和版本管理的基础。本文将系统梳理 Git 的核心命令,涵盖仓库初始化、配置管理、版本控制、分支操作、标签管理及远程协作等场景,帮助你快速掌握 Git 的使用技巧。
仓库初始化与配置
初始化本地仓库
# 在当前目录初始化 Git 仓库(生成 .git 目录)
git init
执行后,目录下会生成 .git 文件夹,存储 Git 版本控制的所有元数据(如分支、提交记录、配置等)。
配置用户信息
Git 通过用户信息区分不同开发者的提交,支持仓库级别和全局级别配置:
# 仓库级别配置(仅当前仓库生效,存储在 .git/config 中)
git config user.name "你的用户名"
git config user.email "你的邮箱"
# 全局级别配置(所有仓库生效,存储在 ~/.gitconfig 中)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
# 查看配置信息
git config --list # 查看所有配置
git config user.name # 查看指定配置项
优先级:仓库级别配置 > 全局级别配置。
工作区与暂存区操作
查看文件状态
git status # 显示工作区和暂存区的文件状态
- 未跟踪(Untracked):新文件,Git 未记录。
- 已修改(Modified):已跟踪文件被修改但未暂存。
- 已暂存(Staged):已添加到暂存区,等待提交到本地库。
将文件添加到暂存区
# 添加指定文件
git add filename.txt
# 添加当前目录所有文件(包括新文件和修改文件)
git add .
# 添加所有修改的文件(不包括新文件)
git add -u
撤销工作区 / 暂存区修改
# 丢弃工作区的修改(用暂存区内容覆盖工作区)
git checkout -- filename.txt
# 将暂存区的文件撤回至工作区(取消暂存)
git reset HEAD filename.txt
# 或
git rm --cached filename.txt
提交与版本管理
提交到本地库
# 提交暂存区文件到本地库,需在编辑器中输入提交信息
git commit
# 直接添加提交信息(推荐)
git commit -m "提交说明:如修复登录bug"
# 跳过暂存区,直接提交已跟踪文件的修改
git commit -am "提交说明"
查看提交历史
# 查看完整提交历史(含哈希值、作者、时间、说明)
git log
# 简洁显示(一行一条记录)
git log --oneline
# 查看所有分支的提交历史(含回滚记录)
git reflog
# 查看指定文件的提交历史
git log --follow filename.txt
# 查看两次提交之间的差异
git log -p commit1_id..commit2_id
版本回滚与前进
通过移动 HEAD 指针实现版本切换,核心命令为 git reset:
# 基于哈希值回滚(最常用,哈希值可通过 git log 或 git reflog 获取)
git reset --hard 634938c # 634938c 为目标版本的哈希值
# 回滚到上一个版本(^ 表示后退一步,^^ 后退两步)
git reset --hard HEAD^
# 回滚到前 n 个版本(~n 表示后退 n 步)
git reset --hard HEAD~3
git reset 三个参数的区别:
--hard:重置本地库、暂存区和工作区(谨慎使用,会丢失未提交的修改)。--mixed(默认):重置本地库和暂存区,不影响工作区。--soft:仅重置本地库,不影响暂存区和工作区。
比较文件差异
# 比较工作区与暂存区的差异
git diff filename.txt
# 比较暂存区与本地库最新版本的差异
git diff --cached filename.txt
# 比较两个版本之间的差异
git diff commit1_id commit2_id filename.txt
分支操作
分支是 Git 最强大的功能之一,用于并行开发(如功能开发、bug 修复),避免影响主分支。
查看分支
git branch # 查看本地分支(* 表示当前分支)
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地 + 远程)
git branch -v # 查看分支及最新提交信息
创建与切换分支
# 创建分支
git branch dev # 创建 dev 分支
# 切换分支
git checkout dev # 切换到 dev 分支
# 创建并切换分支(推荐)
git checkout -b feature # 创建 feature 分支并切换到该分支
合并分支
将指定分支的修改合并到当前分支:
# 切换到目标分支(如 master)
git checkout master
# 合并 dev 分支到 master
git merge dev
解决合并冲突:
当合并时出现冲突(同一文件同一位置被修改),Git 会标记冲突文件,需手动编辑冲突部分,然后执行:
git add filename.txt # 标记为已解决
git commit -m "解决合并冲突"
删除分支
# 删除本地分支(需先切换到其他分支)
git branch -d dev # 若分支未合并,会提示错误
git branch -D dev # 强制删除(即使未合并)
# 删除远程分支
git push origin --delete dev
其他常用分支命令
# 重命名分支
git branch -m oldname newname
# 查看分支合并关系
git log --graph --oneline --all
# 将 dev 分支的某个提交合并到当前分支
git cherry-pick commit_id
标签管理
标签(Tag)用于标记重要版本(如发布版本),便于后续回溯。
创建标签
# 在当前最新提交上创建轻量标签(仅含标签名)
git tag v1.0
# 在指定提交上创建标签
git tag v0.9 commit_id
# 创建带说明的注解标签(推荐,含作者、时间、说明)
git tag -a v1.0 -m "版本 1.0 发布" commit_id
查看标签
git tag # 列出所有标签
git show v1.0 # 查看标签详情
推送与删除标签
# 推送指定标签到远程仓库
git push origin v1.0
# 推送所有标签到远程仓库
git push origin --tags
# 删除本地标签
git tag -d v1.0
# 删除远程标签
git push origin :refs/tags/v1.0
远程仓库协作
关联远程仓库
# 添加远程仓库并命名(别名通常为 origin)
git remote add origin https://github.com/yourname/yourrepo.git
# 查看远程仓库信息
git remote # 列出远程仓库别名
git remote -v # 列出别名及对应的 URL
克隆远程仓库
# 克隆远程仓库到本地(自动初始化仓库并关联远程)
git clone https://github.com/yourname/yourrepo.git
拉取远程代码
# 拉取远程指定分支并合并到当前分支(= fetch + merge)
git pull origin master
# 仅拉取远程代码,不合并(需手动 merge)
git fetch origin master
git merge origin/master # 合并拉取的远程分支
推送本地代码到远程
# 推送本地分支到远程(首次推送需关联分支)
git push -u origin master # -u 关联本地 master 与远程 master
# 后续推送(已关联)
git push origin master
# 强制推送(覆盖远程,谨慎使用!)
git push origin master --force
暂存工作区(git stash)
当需要临时切换分支但不想提交当前修改时,可使用 git stash 暂存工作区:
# 暂存当前工作区的修改(已跟踪文件)
git stash
# 暂存包括未跟踪文件
git stash -u
# 查看所有暂存记录
git stash list
# 恢复最近一次暂存并删除该记录
git stash pop
# 恢复指定暂存(不删除记录)
git stash apply stash@{1} # stash@{1} 为暂存索引
# 删除指定暂存
git stash drop stash@{1}