Git 作为当前最流行的分布式版本控制系统,通过一系列命令实现了代码的版本管理、协作开发和分支控制等功能,掌握 Git 相关命令是开发者的必备技能,以下从基础操作、分支管理、合并与冲突解决、远程仓库交互、历史查看与撤销等方面详细介绍常用命令。

基础操作命令
基础操作是 Git 日常使用的核心,包括仓库初始化、文件状态管理、提交历史记录等。
git init:在当前目录初始化一个 Git 仓库,创建.git隐藏目录,用于存储版本信息。git clone [仓库地址]:克隆远程仓库到本地,git clone https://github.com/user/repo.git会下载整个仓库及其历史记录。git add [文件名]:将文件从工作区添加到暂存区,支持通配符,如git add .可添加所有修改的文件(包括新文件),git add -u仅添加已跟踪文件的修改。git commit -m "提交信息":将暂存区的文件提交到本地仓库,生成一个新的版本快照,提交信息需清晰描述变更内容。git status:查看工作区状态,显示未跟踪、已修改、已暂存的文件,帮助开发者快速了解当前仓库状态。git log:查看提交历史,默认按时间倒序显示每次提交的哈希值、作者、日期和提交信息,可通过参数调整显示格式,如git log --oneline简化输出,git log -p查看每次提交的详细差异。
分支管理命令
分支是 Git 实现并行开发的核心功能,允许开发者在不影响主分支的情况下独立开发功能或修复 bug。
git branch:列出本地所有分支,当前分支会以 标记。git branch -r查看远程分支,git branch -a查看所有分支(本地+远程)。git branch [分支名]:创建新分支,git branch feature/login创建feature/login分支,但不会切换到该分支。git checkout [分支名]:切换到指定分支,若分支不存在且-b参数,则创建并切换,如git checkout -b dev相当于git branch dev+git checkout dev。git merge [分支名]:将指定分支合并到当前分支,例如在main分支执行git merge feature/login,会将feature/login的提交历史合并到main。git branch -d [分支名]:删除本地分支,-D强制删除(即使分支未合并)。git switch [分支名](Git 2.23+):checkout的替代命令,专门用于分支切换,语法更清晰,如git switch -c new-branch创建并切换到新分支。
合并与冲突解决命令
当多个分支修改同一文件时,合并可能产生冲突,需手动解决后重新提交。
git merge --abort:合并过程中发生冲突时,取消合并操作,恢复合并前的状态。git diff [分支名1] [分支名2]:比较两个分支的差异,显示未合并的修改内容,帮助定位冲突文件。- 冲突解决步骤:
- 打开冲突文件, Git 会用
<<<<<<<、、>>>>>>>标记冲突内容,手动修改并删除标记。 - 执行
git add [冲突文件]将解决后的文件添加到暂存区。 - 运行
git commit完成合并提交,此时提交信息需明确标注冲突解决。
- 打开冲突文件, Git 会用
远程仓库交互命令
远程仓库(如 GitHub、GitLab)是团队协作的关键,通过命令实现本地与远程的同步。

git remote -v:查看远程仓库别名及其地址,例如显示origin https://github.com/user/repo.git (fetch)。git push [远程别名] [分支名]:将本地分支推送到远程仓库,如git push origin main,首次推送时可能需设置--set-upstream,后续可直接git push。git pull [远程别名] [分支名]:从远程仓库拉取并合并到当前分支,相当于git fetch+git merge,若存在冲突,需先解决再提交。git fetch [远程别名]:获取远程仓库的最新信息,但不会自动合并,需手动执行git merge。git remote add [别名] [地址]:添加新的远程仓库,如git remote add upstream https://github.com/original/repo.git添加上游仓库。
历史查看与撤销命令
Git 提供了强大的历史追溯和版本回滚功能,帮助开发者管理代码变更。
git show [提交哈希]:显示指定提交的详细信息,包括修改的文件内容和提交元数据。git reset --soft [提交哈希]:软回退,将 HEAD 指针移动到指定提交,暂存区和工作区保持不变,已提交的修改会进入暂存区,可用于重新提交。git reset --hard [提交哈希]:硬回退,彻底丢弃指定提交之后的所有修改,工作区和暂存区会同步回退,需谨慎使用。git revert [提交哈希]:创建一个新提交来撤销指定提交的修改,保留历史记录,适合团队协作中回滚公开提交。git reflog:查看 HEAD 指针的移动历史,可用于恢复被误删的提交或分支,例如通过git reset --hard [reflog中的哈希]恢复误删的提交。
标签管理命令
标签用于标记重要版本(如 v1.0.0),分为轻量标签(-a)和注释标签(-s)。
git tag [标签名]:为当前提交创建轻量标签,如git tag v1.0。git tag -a [标签名] -m "版本说明":创建带注释的标签,存储标签元数据。git push [远程别名] [标签名]:推送标签到远程仓库,git push --tags可推送所有标签。git checkout [标签名]:切换到标签对应的版本,但会进入“分离 HEAD”状态,建议创建新分支后再开发。
相关问答 FAQs
Q1:git reset 和 git revert 的区别是什么?
A:git reset 是通过移动 HEAD 指针来撤销提交,会修改历史记录(--hard 会丢弃修改,--soft 保留修改到暂存区),适合本地未推送的提交;git revert 是创建一个新提交来抵消指定提交的修改,不改变历史记录,适合回滚已推送到远程的公开提交,避免影响其他开发者。
Q2:如何取消本地未推送的 git commit?
A:若提交后未推送,可通过以下方式取消:

- 若已
git add但未commit:执行git reset HEAD [文件名]将文件从暂存区移回工作区,或git reset HEAD .撤销所有暂存。 - 若已
commit:使用git reset --soft HEAD~1撤销最后一次提交,修改会保留在暂存区;或git reset --hard HEAD~1彻底丢弃提交及修改(慎用)。
