Git常用命令指南

Git 作为现代软件开发中最流行的分布式版本控制系统,已成为开发者的必备技能。本文旨在为读者提供一份Git常用命令的全面指南,从基础配置到核心工作流,再到分支管理和高级技巧,帮助开发者高效地使用Git进行代码管理和协作。无论是初学者还是有一定经验的开发者,都能从本文中找到实用的信息,提升工作效率。

一、Git基础配置

在开始使用Git之前,首先需要进行一些基本配置,这些配置将影响所有Git仓库的操作。

1. 设置用户信息

Git需要知道是谁在进行提交,因此设置用户信息是使用Git的第一步:

复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
  • --global 参数表示配置全局生效,适用于所有项目
  • 如果希望针对特定项目单独配置,可以省略 --global 参数
  • 可以使用 git config --list 查看所有配置项
2. 分支配置

Git默认分支名称从 master 改为 main,但可以根据个人或团队习惯进行调整:

复制代码
git config --global init.defaultBranch main
  • 这会设置新建仓库时的默认分支名称
  • 可以使用 git config --global init.defaultBranch feature 设置为其他名称
3. 其他实用配置
复制代码
git config --global core.autocrlf input
git config --global core.excludesfile ~/.gitignore_global
  • core.autocrlf 控制换行符转换,input表示将CRLF转换为LF提交,但检出时不转换
  • core.excludesfile 指定全局的 .gitignore 文件路径,避免在每个项目中重复配置

二、Git核心工作流程命令

Git的核心工作流程包括初始化仓库、添加文件、提交更改、查看历史记录等操作,这些是日常使用Git的基础。

1. 初始化与克隆仓库
复制代码
git init
git clone <远程仓库地址>
  • git init:在当前目录初始化一个新的Git仓库,创建 .git 目录
  • git clone:克隆远程仓库到本地,创建完整的本地副本
  • 克隆时可以指定分支:git clone -b <分支名> <远程仓库地址>
  • 克隆时可以指定目录:git clone <远程仓库地址> <目录名>
2. 查看仓库状态
复制代码
git status
  • 最常用的Git命令,显示工作目录和暂存区的状态

  • 显示哪些文件已修改但未暂存,哪些已暂存但未提交

  • 显示当前所在分支

  • 显示远程仓库与本地仓库的同步状态

  • 示例输出:

    复制代码
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
      modified:   README.md
    
    no changes added to commit that are not already in the commit
3. 添加文件到暂存区
复制代码
git add <文件名>
git add .
git add -A
git add -u
git add -p
  • git add <文件名>:将指定文件添加到暂存区
  • git add .:添加所有已修改、已跟踪和新创建的文件(Git 2.x中等同于 git add -A
  • git add -A:添加所有已修改、已跟踪和新创建的文件(包括未跟踪的文件)
  • git add -u:仅添加已跟踪文件的修改(不添加新文件)
  • git add -p交互式添加,允许选择文件中的特定修改块
  • git add --intent-to-add <文件名>:添加未跟踪文件的意图,即使文件内容为空
  • git add -f <文件名>:强制添加被 .gitignore 忽略的文件
4. 提交更改
复制代码
git commit -m "提交信息"
git commit --amend
git commit --all
git commit --only
  • git commit -m "提交信息":将暂存区的更改提交到本地仓库,并添加提交信息
  • git commit --amend:修改最后一次提交(添加新文件或修改提交信息)
  • git commit --all:等同于 git add . && git commit,提交所有已跟踪文件的修改
  • git commit --only:仅提交已跟踪文件的修改,不添加新文件
  • 提交信息应遵循最佳实践:简明扼要,使用祈使句(如"Fix"而非"Fixed"),说明更改的目的
5. 查看提交历史
复制代码
git log
git log --oneline
git log --graph
git log --stat
git log --since=2.weeks
git show <commit>
git diff
git diff --staged
  • git log:查看完整的提交历史记录,包括提交哈希、作者、日期和提交信息
  • git log --oneline以单行简洁格式显示提交历史,便于快速浏览
  • git log --graph:以图形化方式显示提交历史,直观展示分支合并情况
  • git log --stat:显示每次提交的文件修改统计信息
  • git log --since=2 weeks:显示两周内的提交历史
  • git show <commit>:显示特定提交的详细信息和修改内容
  • git diff:比较工作区与暂存区的差异
  • git diff --staged:比较暂存区与最新提交的差异

三、分支管理命令

分支是Git最强大的功能之一,它允许开发者在不影响主线代码的情况下进行并行开发和测试。

1. 创建与切换分支
复制代码
git branch <分支名>
git checkout <分支名>
git checkout -b <新分支名>
git checkout --track origin/<远程分支名>
  • git branch <分支名>:创建一个新分支
  • git checkout <分支名>:切换到指定分支
  • git checkout -b <新分支名>:创建并切换到新分支(等同于 git branch <新分支名> && git checkout <新分支名>
  • git checkout --track origin/<远程分支名>:基于远程分支创建并切换到同名本地分支
  • 创建分支时建议使用有意义的名称,如 feature/user-authbugfix/loginissue-123
2. 分支操作
复制代码
git branch
git branch -a
git branch -d <分支名>
git branch -D <分支名>
git branch --merged
git branch --no-merged
git branch -m <旧分支名> <新分支名>
  • git branch:列出本地所有分支
  • git branch -a:列出所有分支(包括本地和远程分支)
  • git branch -d <分支名>:删除已合并的本地分支(如果分支未合并会报错)
  • git branch -D <分支名>:强制删除本地分支(无论是否合并)
  • git branch --merged:列出所有已合并到当前分支的分支
  • git branch --no-merged:列出所有未合并到当前分支的分支
  • git branch -m <旧分支名> <新分支名>:重命名当前分支
3. 合并与冲突解决
复制代码
git merge <分支名>
git merge --no-ff <分支名>
git merge --abort
git mergetool
  • git merge <分支名>:将指定分支的更改合并到当前分支
  • git merge --no-ff <分支名>禁用快进合并,强制创建合并提交,保留分支历史
  • git merge --abort:中止当前的合并操作
  • git mergetool:启动外部合并工具(如Meld、KDiff3等)解决合并冲突
4. 变基
复制代码
git rebase <目标分支>
git rebase --continue
git rebase --abort
git rebase --skip
  • git rebase <目标分支>:将当前分支的提交"重写"到目标分支之后,形成线性历史
  • git rebase --continue:解决冲突后继续变基操作
  • git rebase --abort:中止变基操作
  • git rebase --skip:跳过当前冲突的提交

四、远程仓库协作命令

与团队协作时,远程仓库是必不可少的,以下命令用于与远程仓库交互。

1. 管理远程仓库
复制代码
git remote add <远程名> <远程仓库地址>
git remote -v
git remote remove <远程名>
git remote rename <旧远程名> <新远程名>
  • git remote add <远程名> <远程仓库地址>:添加远程仓库
  • git remote -v:查看所有远程仓库及其URL
  • git remote remove <远程名>:删除远程仓库
  • git remote rename <旧远程名> <新远程名>:重命名远程仓库
2. 获取与推送更改
复制代码
git fetch
git pull
git pull origin <分支名>
git push
git push -u origin <本地分支名>
git push origin --delete <分支名>
git push origin :<分支名>
git push --force
git push --force-with-lease
  • git fetch:从远程仓库获取最新的提交记录和分支信息,不会修改本地工作目录
  • git pull:等同于 git fetch + git merge,获取远程更改并合并到当前分支
  • git pull origin <分支名>:从远程仓库的指定分支获取并合并到当前分支
  • git push:将本地分支推送到远程仓库(需先设置上游分支)
  • git push -u origin <本地分支名>:将本地分支推送到远程仓库,并设置上游分支关系
  • git push origin --delete <分支名>:删除远程仓库中的分支
  • git push origin :<分支名>:简写形式,效果同上
  • git push --force:强制推送更改,覆盖远程仓库的历史(高风险操作,慎用)
  • git push --force-with-lease:更安全的强制推送,仅在远程分支未被他人更新时覆盖
3. 远程分支操作
复制代码
git push origin <本地分支名>:<远程分支名>
git checkout -b <本地分支名> origin/<远程分支名>
git fetch origin <分支名>:<本地分支名>
  • git push origin <本地分支名>:<远程分支名>:将本地分支推送到远程仓库的指定分支
  • git checkout -b <本地分支名> origin/<远程分支名>:基于远程分支创建并切换到本地分支
  • git fetch origin <分支名>:<本地分支名>:从远程分支获取更改到本地指定分支

五、高级技巧与命令

除了基础命令外,Git还提供了许多高级功能,可以帮助开发者更高效地工作。

1. 暂存工作区修改
复制代码
git stash
git stash save "暂存描述"
git stash list
git stash pop
git stash apply
git stash drop
git stash clear
  • git stash:暂存当前工作区的所有修改(包括未暂存的修改和已暂存的修改)
  • git stash save "暂存描述":带描述地暂存当前工作区
  • git stash list:列出所有已暂存的内容
  • git stash pop:恢复最近一次暂存的内容并删除该暂存
  • git stash apply:恢复最近一次暂存的内容,但不删除该暂存
  • git stash drop:删除指定的暂存内容
  • git stash clear:删除所有暂存内容
2. 撤销修改
复制代码
git reset --soft HEAD^
git reset --mixed HEAD^
git reset --hard HEAD^
git revert <commit>
git revert --no-commit <commit>
  • git reset --soft HEAD^:撤销最后一次提交,但保留修改在暂存区和工作区
  • git reset --mixed HEAD^(默认模式):撤销最后一次提交,保留修改在工作区
  • git reset --hard HEAD^彻底撤销最后一次提交,丢弃所有修改
  • git revert <commit>:撤销指定提交的修改,但不会修改提交历史,而是创建一个新的提交来抵消原提交的修改
  • git revert --no-commit <commit>:撤销指定提交的修改,但不自动提交,允许合并多个撤销
3. 选择性应用提交
复制代码
git cherry-pick <commit>
git cherry-pick --no-commit <commit>
git format-patch <commit>
git am <patch>
  • git cherry-pick <commit>:将指定提交的修改应用到当前分支
  • git cherry-pick --no-commit <commit>:应用提交修改但不自动提交,允许合并多个提交
  • git format-patch <commit>:生成指定提交的补丁文件
  • git am <patch>:应用补丁文件到当前分支
4. 二分法定位问题
复制代码
git bisect start
git bisect bad
git bisect good <commit>
git bisect reset
git bisect visualize
  • git bisect start:开始二分查找
  • git bisect bad:标记当前提交为有问题
  • git bisect good <commit>:标记指定提交为正常
  • git bisect reset:结束二分查找并恢复分支
  • git bisect visualize:可视化显示二分查找过程(需图形化Git工具支持)
5. 标记特定版本
复制代码
git tag v1.0
git tag -a v1.0 -m "版本1.0发布"
git tag -l
git show v1.0
git push origin v1.0
git push origin --delete v1.0
  • git tag v1.0:创建轻量级标签v1.0,指向当前提交
  • git tag -a v1.0 -m "版本1.0发布":创建附注标签v1.0,包含完整标签信息
  • git tag -l:列出所有标签
  • git show v1.0:显示标签v1.0的详细信息
  • git push origin v1.0:推送标签v1.0到远程仓库
  • git push origin --delete v1.0:删除远程仓库中的标签v1.0

六、常见问题与解决方案

1. 合并冲突处理

当执行 git mergegit pull 时,可能会出现合并冲突:

复制代码
git status       # 查看冲突文件
git diff          # 查看冲突差异
git mergetool    # 使用图形化工具解决冲突
git add <文件名>  # 标记冲突已解决
git commit        # 完成合并提交
  • 冲突文件中会包含 <<<<<<< HEAD=======>>>>>>> <分支名> 标记
  • 需手动编辑冲突文件,解决冲突后标记为已解决
  • 推荐使用图形化合并工具(如KDiff3、Meld等)简化冲突解决过程
2. 恢复丢失的提交

如果误执行了 git reset --hardgit rebase 导致提交丢失:

复制代码
git reflog       # 查看所有引用变更历史
git checkout <commit>  # 切换到丢失的提交
git checkout -b <新分支名> <commit>  # 基于丢失的提交创建新分支
git reset --hard <commit>  # 将当前分支重置到丢失的提交
  • git reflog 会记录所有对仓库引用的操作,包括 git resetgit rebase 等操作
  • 通过 git reflog 可以找到丢失的提交的SHA-1哈希值,然后恢复
3. 查看文件修改记录
复制代码
git blame <文件名>
git log -p <文件名>
git log -- <文件名>
git log --author=<作者名> <文件名>
git log --since=<日期> <文件名>
  • git blame <文件名>:显示文件每一行的修改记录
  • git log -p <文件名>:显示文件的历史修改记录和差异
  • git log -- <文件名>:仅显示修改过该文件的提交记录
  • git log --author=<作者名> <文件名>:显示特定作者对文件的修改记录
  • git log --since=<日期> <文件名>:显示指定日期后对文件的修改记录

七、总结

Git的命令虽然众多,但掌握以上常用命令足以应对90%以上的开发场景。Git的核心价值在于其强大的版本控制能力和分支管理功能,这些功能通过简单的命令即可实现。

在使用Git时,建议养成以下良好习惯:

  1. 频繁提交:每次完成一个功能或修复一个bug后立即提交
  2. 有意义的提交信息:清晰描述更改的内容和目的
  3. 合理使用分支:每个功能或bug修复使用单独的分支
  4. 定期同步远程仓库 :使用 git fetchgit pull 获取远程最新更改
  5. 谨慎使用危险命令 :如 git reset --hardgit push --force
  6. 合理使用暂存区 :通过 git add 选择要提交的更改

通过本文介绍的Git常用命令,开发者可以更高效地管理代码版本,与团队协作开发,并在出现错误时快速恢复。Git不仅是一个版本控制工具,更是现代软件开发流程中不可或缺的协作平台。随着对Git命令的熟练掌握,开发者将能够更自信地面对复杂的代码管理和团队协作挑战

相关推荐
吠品4 小时前
命令行揭示SSL证书真相
https·github·ssl
瑞华丽PLM4 小时前
电子行业国产PLM系统功能差异化对比表
大数据·plm·国产plm·瑞华丽plm·瑞华丽
、BeYourself4 小时前
解决git@github.com: Permission denied (publickey)
github
Elasticsearch5 小时前
弥合差距:从云原生到大型机的端到端可观测性
elasticsearch
深圳市恒星物联科技有限公司5 小时前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
是做服装的同学6 小时前
如何选择适合的服装企业ERP系统才能提升业务效率?
大数据·经验分享·其他
十步杀一人_千里不留行6 小时前
Git提交前ESLint校验实践(Husky + lint-staged)
git·github
朱昆鹏6 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github