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

news/2024/12/17 12:44:44/

一、引言

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/news/1555855.html

相关文章

DAY5 C++运算符重载

1.类实现> 、<、!、||、&#xff01;和后自增、前自减、后自减运算符的重载 代码&#xff1a; #include <iostream>using namespace std; class Complex {int rel;int vir; public:Complex(){};Complex(int rel,int vir):rel(rel),vir(vir){cout << "…

(一)简单 第 N 个泰波那契数

1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;4 解释&#xff1a; T…

OpenHarmony-3.HDF input子系统(5)

HDF input 子系统OpenHarmony-4.0-Release 1.Input 概述 输入设备是用户与计算机系统进行人机交互的主要装置之一&#xff0c;是用户与计算机或者其他设备通信的桥梁。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。本文档将介绍基于 HDF_Input 模型的触摸屏器件 IC 为 GT91…

数据结构day4链表作业

一、链表的剩下操作 1. listLinkPtr.h //任意位置删除 int index_del(linkListPtr H, int index);//按位置修改 int index_change(linkListPtr H, int index, DataType e);//按值查找返回地址 linkListPtr node_addr(linkListPtr H, DataType e);//反转 //int node_rever(link…

华为OD机试真题---观看文艺汇演问题

华为OD机试中的“观看文艺汇演问题”是一道考察算法与数据结构能力的题目。以下是对该题目的详细解析&#xff1a; 一、题目描述 为了庆祝某个重要节日&#xff08;如中国共产党成立100周年&#xff09;&#xff0c;某公园将举行多场文艺表演。很多演出都是同时进行的&#x…

PVE系统下——OpenWRT一键扩容脚本(x86下EXT4SquashFS)

扩容了x86上的 OpenWrt 根分区和文件系统。 1.PVE 上增加硬盘大小 2.执行脚本 安装依赖 opkg update opkg install parted losetup resize2fs下载脚本并一键执行 wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced…

前端(vue组件)

1组件对象 1.1定义组件对象 defineComponent( {} ) 1.2注册组件 1.3使用组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…