Git 命令大全:全面掌握版本控制系统

ops/2024/12/16 21:56:23/

一、引言

Git 是一款广泛使用的分布式版本控制系统,它在软件开发、项目协作以及代码管理等方面发挥着极为重要的作用。无论是个人开发者独自管理代码库,还是大型团队协同开发复杂项目,Git 都提供了强大而灵活的功能来满足各种需求。通过掌握常用的 Git 命令,开发者能够高效地进行代码版本控制、分支管理、代码合并、历史记录查看等操作,从而提升开发效率、保障代码质量并促进团队协作。本文将按照功能划分详细介绍常用的 Git 命令,帮助读者深入理解并熟练运用 Git 进行项目开发与管理。

二、基本配置命令

(一)git config

  • 命令格式git config [--global | --local | --system] [--unset] option value
  • 功能描述:用于设置 Git 的各种配置项,包括用户信息、文本编辑器、合并工具等。--global 选项表示设置全局配置,对当前用户所有的 Git 仓库生效;--local 选项(默认)设置当前仓库的本地配置;--system 选项则设置系统级别的配置,影响所有用户。--unset 选项用于删除指定的配置项。
  • 示例
    • 设置全局用户名:git config --global user.name "John Doe"
    • 设置全局用户邮箱:git config --global user.email "johndoe@example.com"
    • 设置本地仓库的文本编辑器为 Visual Studio Code:git config --local core.editor "code --wait"

三、仓库初始化与克隆命令

(一)git init

  • 命令格式git init [directory]
  • 功能描述:在指定目录下创建一个新的空 Git 仓库。如果不指定目录,则在当前目录创建。初始化后,该目录会包含一个隐藏的 .git 目录,用于存储 Git 仓库的所有元数据和版本历史信息。
  • 示例:在当前目录创建一个新的 Git 仓库:git init

(二)git clone

  • 命令格式git clone [--depth <depth>] [--branch <branch>] <repository-url> [<directory>]
  • 功能描述:从远程 Git 仓库克隆一份代码到本地指定目录。--depth 选项可以指定克隆的深度,只获取最近的若干次提交历史,适用于大型仓库的快速克隆。--branch 选项用于指定克隆的分支。如果不指定目录,则会在当前目录下创建一个与远程仓库同名的目录,并将代码克隆到其中。
  • 示例
    • 克隆一个完整的远程仓库到当前目录下名为 my-project 的文件夹:git clone https://github.com/username/my-project.git my-project
    • 克隆远程仓库的 master 分支且只获取最近 10 次提交历史:git clone --depth 10 --branch master https://github.com/username/my-project.git

四、代码添加与提交命令

(一)git add

  • 命令格式git add [--all | --patch | <filepattern>]
  • 功能描述:将工作区的文件修改添加到暂存区,以便后续提交。--all 选项(可简写为 -A)将所有已修改和新增的文件添加到暂存区;--patch 选项(可简写为 -p)允许交互式地选择要添加的文件修改部分;若指定具体的文件或文件模式(如 *.txt),则只添加匹配的文件。
  • 示例
    • 添加所有修改和新增的文件到暂存区:git add -A
    • 交互式地选择要添加的修改部分:git add -p
    • 只添加 src 目录下的所有 .java 文件:git add src/*.java

(二)git commit

  • 命令格式git commit [-m <message> | --amend]
  • 功能描述:将暂存区的文件提交到本地仓库,创建一个新的提交记录。-m 选项用于指定提交的注释信息,如果不使用该选项,Git 会打开默认的文本编辑器让用户输入提交信息。--amend 选项用于修改上一次的提交,可用于修正提交信息或添加遗漏的文件修改到上一次提交。
  • 示例
    • 提交暂存区的文件,并附上提交信息:git commit -m "Add new feature X"
    • 修改上一次提交的信息:git commit --amend -m "Updated description of new feature X"

五、分支管理命令

(一)git branch

  • 命令格式git branch [--list | -a | -r | -d | -D | <branchname>]
  • 功能描述:用于分支的创建、列出、删除等操作。--list 选项(可简写为 -l)列出本地分支;-a 选项列出所有分支(包括本地和远程跟踪分支);-r 选项只列出远程跟踪分支;-d 选项删除指定的本地分支(分支必须已合并到其他分支);-D 选项强制删除本地分支,即使未合并;若直接指定分支名,则创建一个新的本地分支。
  • 示例
    • 列出本地分支:git branch -l
    • 列出所有分支:git branch -a
    • 创建一个名为 new-feature 的本地分支:git branch new-feature
    • 删除名为 old-branch 的本地分支(已合并):git branch -d old-branch
    • 强制删除名为 unwanted-branch 的本地分支(未合并):git branch -D unwanted-branch

(二)git checkout

  • 命令格式git checkout [--branch | -b | <branchname> | <commit-id>]
  • 功能描述:切换分支或恢复工作区文件。--branch 选项(可简写为 -b)在切换分支的同时创建一个新分支;若直接指定分支名,则切换到该分支;若指定提交 ID,则将工作区文件恢复到该提交时的状态。
  • 示例
    • 切换到名为 master 的分支:git checkout master
    • 创建并切换到名为 experimental 的新分支:git checkout -b experimental
    • 将工作区文件恢复到某个提交的状态:git checkout <commit-id>

(三)git merge

  • 命令格式git merge <branchname>
  • 功能描述:将指定分支合并到当前分支。合并时会根据两个分支的共同祖先和各自的修改历史进行合并操作,如果合并过程中出现冲突,需要手动解决冲突后再提交。
  • 示例:将 feature-branch 分支合并到 master 分支:git merge feature-branch

(四)git rebase

  • 命令格式git rebase [--onto <newbase> | <upstream-branch>] [<branchname>]
  • 功能描述:将一个分支的提交历史重新基于另一个分支或提交进行修改。它可以用于整理分支的提交历史,使提交记录更加线性和整洁。--onto 选项用于指定新的基础分支;若只指定 upstream-branch,则将当前分支的提交重新基于该上游分支;若再指定 branchname,则只对该分支的提交进行变基操作。
  • 示例
    • 将 feature-branch 的提交历史重新基于 master 分支:git rebase master feature-branch
    • 将当前分支的提交重新基于 origin/master 分支,并将提交历史整理到 new-base-commit 之后:git rebase --onto new-base-commit origin/master

六、远程仓库操作命令

(一)git remote

  • 命令格式git remote [--add | --remove | --rename | -v | <remotename>]
  • 功能描述:用于管理远程仓库的配置。--add 选项添加一个新的远程仓库;--remove 选项删除指定的远程仓库;--rename 选项重命名远程仓库;-v 选项查看远程仓库的详细信息(包括远程仓库的 URL 和对应的本地分支名);若直接指定远程仓库名,则显示该远程仓库的相关信息。
  • 示例
    • 添加一个名为 origin 的远程仓库:git remote add origin https://github.com/username/my-project.git
    • 删除名为 old-remote 的远程仓库:git remote --remove old-remote
    • 重命名远程仓库 origin 为 new-origingit remote --rename origin new-origin
    • 查看远程仓库的详细信息:git remote -v

(二)git fetch

  • 命令格式git fetch [--all | <remotename> | <remotename>/<branchname>]
  • 功能描述:从远程仓库获取最新的提交信息,但不会自动合并到本地分支。--all 选项获取所有远程仓库的最新信息;若指定远程仓库名或远程仓库名与分支名的组合,则只获取对应远程仓库或分支的信息。获取后的远程分支信息会存储在本地的远程跟踪分支中,可用于后续的合并或查看操作。
  • 示例
    • 获取所有远程仓库的最新信息:git fetch --all
    • 获取 origin 远程仓库的 master 分支信息:git fetch origin/master

(三)git pull

  • 命令格式git pull [--rebase | <remotename> [<branchname>]]
  • 功能描述:从远程仓库获取最新的提交信息,并自动尝试合并到当前分支。--rebase 选项在获取后先进行变基操作再合并,使提交历史更加整洁;若指定远程仓库名和分支名,则只拉取指定远程仓库和分支的信息并合并到当前分支。
  • 示例
    • 从 origin 远程仓库拉取最新信息并合并到当前分支:git pull origin
    • 从 origin 远程仓库拉取 master 分支信息,先变基再合并:git pull --rebase origin master

(四)git push

  • 命令格式git push [--force | --tags | <remotename> [<branchname>]]
  • 功能描述:将本地分支的提交推送到远程仓库。--force 选项强制推送,会覆盖远程仓库的相同分支内容,需谨慎使用;--tags 选项推送本地的标签到远程仓库;若指定远程仓库名和分支名,则将指定本地分支推送到远程仓库的对应分支。
  • 示例
    • 将本地 master 分支推送到 origin 远程仓库:git push origin master
    • 推送本地的所有标签到 origin 远程仓库:git push --tags origin
    • 强制将本地 feature-branch 分支推送到 origin 远程仓库,覆盖远程分支内容:git push --force origin feature-branch

七、代码比较与查看命令

(一)git diff

  • 命令格式git diff [--cached | <commit-id1> <commit-id2> | <branchname1> <branchname2> | <filepattern>]
  • 功能描述:用于查看文件或分支之间的差异。--cached 选项(可简写为 --staged)查看暂存区与上一次提交之间的差异;若指定两个提交 ID、两个分支名或一个文件模式,则分别查看对应提交、分支之间或指定文件的差异。
  • 示例
    • 查看暂存区与上一次提交之间的差异:git diff --cached
    • 查看 master 分支与 feature-branch 分支之间的差异:git diff master feature-branch
    • 查看 src 目录下所有 .java 文件的差异:git diff src/*.java

(二)git log

  • 命令格式git log [--oneline | --graph | --author | --since | --until | <branchname> | <commit-id>]
  • 功能描述:查看提交历史记录。--oneline 选项以简洁的一行格式显示提交信息;--graph 选项以图形化的方式展示分支和提交的关系;--author 选项根据作者筛选提交记录;--since 和 --until 选项分别根据时间范围筛选提交记录;若指定分支名或提交 ID,则只查看对应分支或提交之后的历史记录。
  • 示例
    • 以简洁一行格式查看提交历史:git log --oneline
    • 以图形化方式查看提交历史:git log --graph
    • 查看作者为 "John Doe" 的提交记录:git log --author "John Doe"
    • 查看自 2023-01-01 以来的提交记录:git log --since "2023-01-01"

(三)git show

  • 命令格式git show [--stat | <commit-id>]
  • 功能描述:显示指定提交的详细信息,包括提交的作者、日期、注释以及修改的文件内容等。--stat 选项在显示提交信息时同时列出修改的文件统计信息,如哪些文件被修改、添加或删除了多少行等。
  • 示例
    • 显示某个提交的详细信息:git show <commit-id>
    • 显示某个提交的详细信息并列出修改文件统计:git show --stat <commit-id>

八、标签管理命令

(一)git tag

  • 命令格式git tag [--list | -l | --delete | <tagname> [<commit-id>]]
  • 功能描述:用于创建、列出和删除标签。--list 选项(可简写为 -l)列出本地所有标签;--delete 选项删除指定标签;若直接指定标签名并可选地指定提交 ID,则在该提交上创建一个新标签。标签常用于标记重要的版本发布点或里程碑。
  • 示例
    • 列出本地所有标签:git tag -l
    • 创建一个名为 v1.0 的标签在当前分支的最新提交上:git tag v1.0
    • 删除名为 old-tag 的标签:git tag --delete old-tag

(二)git push --tags

  • 命令格式git push --tags <remotename>
  • 功能描述:将本地创建的标签推送到远程仓库。这使得远程仓库也能记录和识别这些标签,方便团队成员共享和查看项目的重要版本标记。
  • 示例:将本地所有标签推送到 origin 远程仓库:git push --tags origin

九、撤销与回退命令

(一)git reset

  • 命令格式git reset [--soft | --mixed | --hard | <commit-id>]
  • 功能描述:用于回退版本或撤销暂存区的文件。--soft 选项将当前分支的头指针回退到指定提交,但保留工作区和暂存区的修改;--mixed 选项(默认)将头指针回退并撤销暂存区的修改,但保留工作区的修改;--hard 选项将头指针回退并同时清除工作区和暂存区的修改,使工作区恢复到指定提交时的状态。
  • 示例
    • 回退到上一个提交,保留工作区和暂存区修改:git reset --soft HEAD~1
    • 回退到上一个提交,撤销暂存区修改,保留工作区修改:git reset HEAD~1
    • 回退到上一个提交,清除工作区和暂存区修改:git reset --hard HEAD~1

(二)git revert

  • 命令格式git revert <commit-id>
  • 功能描述:创建一个新的提交来撤销指定提交的修改。与 git reset 不同,git revert 不会修改历史提交记录,而是通过创建一个反向的提交来抵消指定提交的效果,适用于需要在不改变历史提交顺序的情况下撤销某个提交的情况。
  • 示例:撤销某个提交的修改并创建一个新的提交:git revert <commit-id>

十、子模块管理命令

(一)git submodule add

  • 命令格式git submodule add <repository-url> <path>
  • 功能描述:将一个外部 Git 仓库作为子模块添加到当前仓库的指定路径下。子模块可以用于将一个大型项目拆分成多个独立的子项目进行管理,同时保持它们之间的关联和版本控制。
  • 示例:将一个名为 submodule-repo 的外部仓库添加到当前仓库的 submodules 目录下:git submodule add https://github.com/username/submodule-repo.git submodules

(二)git submodule init

  • 命令格式git submodule init
  • 功能描述:初始化本地仓库中的子模块配置。在克隆包含子模块的仓库后,需要先执行此命令来初始化子模块的相关信息,以便后续对子模块进行操作。
  • 示例:初始化子模块:git submodule init

(三)git submodule update

  • 命令格式git submodule update [--remote | <submodule-path>]
  • 功能描述:更新子模块到指定的版本。--remote 选项使子模块更新到其远程仓库的最新版本;若指定子模块路径,则只更新该路径下的子模块。
  • 示例
    • 更新所有子模块到其远程仓库的最新版本:git submodule update --remote
    • 更新指定子模块:git submodule update submodules/some-submodule

Git 命令众多且功能强大,熟练掌握这些常用命令对于高效的代码版本控制和项目协作至关重要。通过不断实践


http://www.ppmy.cn/ops/142471.html

相关文章

服务器一般装什么系统?

在服务器管理中&#xff0c;操作系统的选择是一个关键因素&#xff0c;它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux&#xff0c;而不是Windows&#xff1f;选择合适的操作系统对服务器的性能和安全性有多么重要&#xff1f; 在众多操作系统中…

网络编程之初识网络

1.IP地址 IP地址实际上全称是&#xff08;互联网协议地址&#xff09;&#xff0c;是每一台计算机在网络上面的编号&#xff0c;每个连接Internet 的设备&#xff08;如计算机、路由器、服务器等&#xff09;都被分配一个唯一的 IP 地址&#xff0c;简单来说&#xff0c;IP地址…

Linux下禁止root远程登录访问

开始讲故事 Long long ago&#xff0c; Linux远程访问方式有telnet、ssh两种协议&#xff1b;有人可能还会说vnc和rdp协议方式&#xff0c;后面这两种主要是可视化桌面场景下的&#xff0c;并非主流。 时过境迁&#xff0c;telnet因安全性低逐渐被禁用淘汰&#xff0c;最后就…

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…

scala列表

1 不可变 List 说明 &#xff08;1&#xff09;List 默认为不可变集合 &#xff08;2&#xff09;创建一个 List&#xff08;数据有顺序&#xff0c;可重复&#xff09; &#xff08;3&#xff09;遍历 List &#xff08;4&#xff09;List 增加数据 &#xff08;5&#…

【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列

文章目录 一、跨库方式1&#xff1a;跨库导航二、手动跨库查询三、同服务器&#xff1a;自动查询跨库查询3.1 Mysql和SqlServer自动3.2 自动: PgSql跨Scheme查询3.3 其他库同服务器 四、跨服务器&#xff1a;自动跨库查询4.1 配置SqlServer dblink4.2 配置 Oracle dblink4.3 配…

BGP-面试

简单介绍一下BGP BGP&#xff0c;边界网关协议&#xff0c;属于路径矢量路由协议。属于触发式更新或者增量更新。具有丰富的路由策略&#xff0c;能够灵活的进行路由选择。重心不是在路由学习&#xff0c;而是路由优选、更高效的传递路由和维护大量的路由信息。基于TCP&#xf…

webrtc学习----前端推流拉流,局域网socket版,一对一

提示&#xff1a;局域网socket版 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 ‌‌‌‌‌WebRTC&#xff08;Web Real-Time Communication&#xff09;‌是一种实时通讯技术&#xff0c;允许网络应用或…