一、引言
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 ] [--branch ] []
功能描述: 从远程 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 | ]
功能描述: 将工作区的文件修改添加到暂存区,以便后续提交。--all
选项(可简写为 -A
)将所有已修改和新增的文件添加到暂存区;--patch
选项(可简写为 -p
)允许交互式地选择要添加的文件修改部分;若指定具体的文件或文件模式(如 *.txt
),则只添加匹配的文件。
示例:
添加所有修改和新增的文件到暂存区:git add -A
交互式地选择要添加的修改部分:git add -p
只添加 src 目录下的所有 .java
文件:git add src/*.java
二)git commit
命令格式: git commit [-m | --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 | ]
功能描述: 用于分支的创建、列出、删除等操作。--list
选项(可简写为 -l
)列出本地分支;-a
选项列出所有分支(包括本地和远程跟踪分支);-r
选项只列出远程跟踪分支;-d
选项删除指定的本地分支(分支必须已合并到其他分支);-D
选项强制删除本地分支,即使未合并;若直接指定分支名,则创建一个新的本地分支。
示例:
创建一个名为 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 | | ]
功能描述: 切换分支或恢复工作区文件。--branch
选项(可简写为 -b)在切换分支的同时创建一个新分支;若直接指定分支名,则切换到该分支;若指定提交 ID,则将工作区文件恢复到该提交时的状态。
示例:
切换到名为 master 的分支:git checkout master
创建并切换到名为 experimental 的新分支:
git checkout -b experimental
将工作区文件恢复到某个提交的状态:git checkout
三)git merge
命令格式: git merge
功能描述: 将指定分支合并到当前分支。合并时会根据两个分支的共同祖先和各自的修改历史进行合并操作,如果合并过程中出现冲突,需要手动解决冲突后再提交。
示例: 将 feature-branch 分支合并到 master 分支:git merge feature-branch
四)git rebase
命令格式: git rebase [--onto | ] []
功能描述: 将一个分支的提交历史重新基于另一个分支或提交进行修改。它可以用于整理分支的提交历史,使提交记录更加线性和整洁。--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 | ]
功能描述: 用于管理远程仓库的配置。--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-origin:git remote --rename origin new-origin
查看远程仓库的详细信息:git remote -v
二)git fetch
命令格式:
git fetch [--all | | /]
功能描述: 从远程仓库获取最新的提交信息,但不会自动合并到本地分支。--all
选项获取所有远程仓库的最新信息;若指定远程仓库名或远程仓库名与分支名的组合,则只获取对应远程仓库或分支的信息。获取后的远程分支信息会存储在本地的远程跟踪分支中,可用于后续的合并或查看操作。
示例:
获取所有远程仓库的最新信息:git fetch --all
获取 origin 远程仓库的 master 分支信息:git fetch origin/master
三)git pull
命令格式: git pull [--rebase | []]
功能描述: 从远程仓库获取最新的提交信息,并自动尝试合并到当前分支。--rebase
选项在获取后先进行变基操作再合并,使提交历史更加整洁;若指定远程仓库名和分支名,则只拉取指定远程仓库和分支的信息并合并到当前分支。
示例:
从 origin 远程仓库拉取最新信息并合并到当前分支:git pull origin
从 origin 远程仓库拉取 master 分支信息,先变基再合并:git pull --rebase origin master
四)git push
命令格式: git push [--force | --tags | []]
功能描述:
将本地分支的提交推送到远程仓库。--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 | | | ]
功能描述: 用于查看文件或分支之间的差异。--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 | | ]
功能描述: 查看提交历史记录。--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 | ]
功能描述: 显示指定提交的详细信息,包括提交的作者、日期、注释以及修改的文件内容等。--stat
选项在显示提交信息时同时列出修改的文件统计信息,如哪些文件被修改、添加或删除了多少行等。示例:
显示某个提交的详细信息并列出修改文件统计:git show --stat
八、标签管理命令
一)git tag
命令格式: git tag [--list | -l | --delete | []]
功能描述: 用于创建、列出和删除标签。--list
选项(可简写为 -l)列出本地所有标签;--delete
选项删除指定标签;若直接指定标签名并可选地指定提交 ID,则在该提交上创建一个新标签。标签常用于标记重要的版本发布点或里程碑。
示例:
创建一个名为 v1.0 的标签在当前分支的最新提交上:git tag v1.0
删除名为 old-tag 的标签:git tag --delete old-tag
二)git push --tags
命令格式: git push --tags
功能描述: 将本地创建的标签推送到远程仓库。这使得远程仓库也能记录和识别这些标签,方便团队成员共享和查看项目的重要版本标记。
示例: 将本地所有标签推送到 origin 远程仓库:git push --tags origin
九、撤销与回退命令
一)git reset
命令格式: git reset [--soft | --mixed | --hard | ]
功能描述: 用于回退版本或撤销暂存区的文件。--soft
选项将当前分支的头指针回退到指定提交,但保留工作区和暂存区的修改;--mixed
选项(默认)将头指针回退并撤销暂存区的修改,但保留工作区的修改;--hard
选项将头指针回退并同时清除工作区和暂存区的修改,使工作区恢复到指定提交时的状态。
示例:
回退到上一个提交,保留工作区和暂存区修改:git reset --soft HEAD~1
回退到上一个提交,撤销暂存区修改,保留工作区修改:git reset HEAD~1
回退到上一个提交,清除工作区和暂存区修改:git reset --hard HEAD~1
二)git revert
命令格式: git revert
功能描述: 创建一个新的提交来撤销指定提交的修改。与 git reset
不同,git revert
不会修改历史提交记录,而是通过创建一个反向的提交来抵消指定提交的效果,适用于需要在不改变历史提交顺序的情况下撤销某个提交的情况。
示例: 撤销某个提交的修改并创建一个新的提交:git revert
十、子模块管理命令
一)git submodule add
命令格式: git submodule add
功能描述: 将一个外部 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 | ]
功能描述: 更新子模块到指定的版本。--remote
选项使子模块更新到其远程仓库的最新版本;若指定子模块路径,则只更新该路径下的子模块。
示例:
更新所有子模块到其远程仓库的最新版本:git submodule update --remote
更新指定子模块:git submodule update submodules/some-submodule
Git 命令众多且功能强大,熟练掌握这些常用命令对于高效的代码版本控制和项目协作至关重要。通过不断实践