Git配置管理工具
Git配置管理工具
一、入门
1. 简介
Git是一个分布式版本管理系统(VCS),最早由Linux之父Linus使用C语言开发,主要有以下四个概念:
- Workspace:工作区,即工作目录
- Index / Stage:暂存区,指
.git
目录下的index
文件 - Repository:仓库区或本地仓库,就是工作目录下的隐藏目录
.git
- Remote:远程仓库,一般是代码托管平台上或服务器上搭建的的仓库
2. 安装
-
查看git
命令行输入git
查看是否已安装git -
安装git
-
Windows/Mac
在Git官网下载安装程序,然后按照提示安装即可 -
Linux
命令行输入:sudo apt-get install git
-
3. 配置
命令行输入:
git config --global user.name <user-name>
git config --global user.email <user-email>
其中,<user-name>
是用户名,<user-email>
是用户邮箱
- 说明
--system
参数将配置应用于所有用户--global
参数将配置应用于本用户--local
参数将配置应用于本仓库
4. git入门示例
-
创建仓库
- 新建空目录gitdemo,并进入到gitdemo
- 命令行输入
git init
命令初始化仓库。这时该目录下会多出一个.git
隐藏目录
-
编辑文件
在gitdemo(或其子目录)下新建文本文档readme.txt,内容如下:Git is a distributed version control system. Git is free software distributed under the GPL.
-
添加到仓库
-
命令行输入如下命令把工作区中的内容添加到暂存区
git add readme.txt
-
命令行输入如下命令把暂存区中的内容提交到版本库
git commit readme.txt -m "the first commit"
-
二、版本管理
1. 创建仓库
- 进入已有目录或新建空目录(推荐)并进入
- 使用
git init
命令初始化仓库
注意
git只能跟踪文本文件的变化,例如.txt, .html, .java等;对于二进制文件,只能进行管理,无法跟踪变化,例如.docx, .img等
2. 添加到仓库
-
使用
git add <file>
命令把工作区中文件<file>
的变化添加到暂存区 -
使用
git commit <file> -m <comment>
命令把暂存区中的内容提交到版本库,其中,-m
参数和后面的说明<comment>
可以省略,但为了查找方便,建议添加说明,例如:git commit -m "the fitst commit"
3. 版本回退
-
使用
git log --pretty=oneline
命令按照从近到远的顺序显示提交历史,--pretty=oneline
参数表示只显示精简信息,可以省略,例如:git log
- 说明
HEAD
表示最新提交的版本,HEAD^
表示上一个提交的版本,HEAD^^
表示上上一个提交的版本……依此类推HEAD~<n>
表示最新提交之前的第<n>
个版本
-
使用
git reset --hard <version>
命令回退到<version>
标识的版本,其中<version>
可以用HEAD
格式表示,也可以用<commit id>
表示(可以不写全),例如回退到上一个版本(9bd243df8476a7b4e1a6eba21f2433789a79e673
标识的版本):git reset --hard HEAD^
或
git reset --hard 9bd243
-
说明
-
使用
<commit id>
可以回退版本,也可以在回退后恢复到回退前的版本,例如,如果当前已经回退到9bd243df8476a7b4e1a6eba21f2433789a79e673
所标识的版本之前,恢复到该版本可以使用如下命令:git reset --hard 9bd243
-
如果忘记了
commit id
,可以使用git reflog
命令查看命令历史
-
4. 查看状态
git status
命令查看状态信息
5. 查看区别
git diff <version> -- <file>
命令显示版本库中<version>
标识的版本和工作区中版本的差别,例如显示版本库中readme.txt的最新版本和工作区中版本的差别
git diff HEAD -- readme.txt
6. 撤销修改
- 如果已经把变动添加到暂存区,使用
git reset HEAD <file>
命令撤销暂存区中的变动 - 命令
git checkout -- <file>
撤销工作区中文件<file>
的所有变动,回退到最近一次git add
或git commit
的状态
注意
区分git checkout -- <file>
和git checkout <branch>
7. 删除文件
git rm <file>
命令删除暂存区文件- 如果要删除删除版本库中的文件,再执行
git commit
命令提交暂存区即可 - 如果要恢复工作区中的文件,使用
git checkout -- <file>
撤销工作区中的变动(这里是指删除)即可
三、远程仓库
1. 添加远程仓库
- 在github或gitee等支持Git的平台上创建一个仓库,例如仓库gitdemo
- 使用
git remote add origin <repo-name>
命令关联远程仓库<remote-repo>
,其中,origin
是惯用名,可以根据需要更改,例如改为gitee
,github
等 - 使用
git push origin <branch-name>
命令将当前分支推到远程仓库的<branch-name>
分支。第一次推送时,-u
参数把本地分支和远程仓库分支关联起来,可以简化后续使用时的命令
2. 删除远程仓库
git remote rm <remote-repo>
命令删除远程仓库<remote-repo>
,建议删除前先查看远程仓库信息
3. 查看远程仓库
git remote
命令查看远程仓库的信息git remote -v
命令查看远程仓库的详细信息
4. 克隆远程仓库
git clone <remote-repo>
命令克隆远程仓库<remote-repo>
到本地
注意
Git执行多种协议,如ssh、https等,推荐使用ssh协议
5. 抓取远程分支
git pull <remote-repo>
命令抓取远程仓库<remote-repo>
到本地
四、分支管理
1. 创建分支
-
git branch <branch-name>
命令创建一个新的分支,名字为<branch-name>
,例如:git branch dev
新版Git可使用
git switch <branch-name>
命令 -
git chechout -b <branch-name>
命令创建并切换到分支<branch-name>
,例如:git checkout -b dev
新版Git可使用命令
git switch -b <branch-name>
-
git checkout -b <branch-name1> origin/<branch-name2>
命令在本地创建与远程分支<branch-name2>
对应的分支<branch-name1>
,并切换到该分支,建议<branch-name1>
和<branch-name2>
名字相同
2. 切换分支
git chechout <branch-name>
命令切换当前分支为<branch-name>
,例如:
git checkout dev
3. 查看分支
git branch
命令查看所有分支,其中当前分支前用*
标识git log --graph
命令查看含有分支合并图的历史信息
4. 合并分支
-
git merge <branch-name>
命令将分支<branch-name>
合并到当前分支,例如:git merge dev
--no-ff
参数表示不使用Fast forward
合并模式,而是使用基础合并(新的提交),此时建议使用-m
参数指定提交说明 -
注意
Fast forward
合并模式是指合并时,将当前分支指针指向待合并分支指针所指的版本- 合并分支冲突时需要先解决冲突,然后再提交,合并后完成合并
-
git cherry-pick <commit id>
命令将<commit id>
标识的版本合并到当前分支,例如:git cherry-pick 9bd243
其中,
9bd243df8476a7b4e1a6eba21f2433789a79e673
是一个版本标识
5. 删除分支
-
git branch -d <branch-name>
命令删除分支<branch-name>
,例如:git branch -d dev
-
git branch -D <branch-name>
命令强行删除分支<branch-name>
,例如:git branch -D dev
6. 关联分支
git branch --set-upstream-to <branch-name1> origin/<branch-name2>
命令将本地分支<branch-name1>
与远程分支<branch-name2>
关联起来
7. rebase
git rebase
命令将交叉分支整理成直线分支
8. 管理未提交分支
-
git stash
命令保存正在进行的未提交分支的工作现场 -
git stash list
命令查看保存的现场 -
git stash apply
命令恢复保存的现场 -
git stash drop
命令删除保存的现场 -
git stash pop
命令恢复并删除保存的现场
例如:
一次bug修复前:git stash
bug修复后:
git stash apply git stash drop
或
git stash pop
分支策略
- master分支:非常稳定,仅用来发布新版本,时刻与远程同步
- dev分支:不稳定,供开发使用,发布新版本时合并到master分支,时刻与远程同步
- bug分支:本地修复bug,无需推送到远程
- other分支:每个人在自己的分支上工作,并合并到dev分支
多人协作
- 尝试
git push origin <branch-name>
推送自己的变动 - 如果推送失败,使用
git pull
抓取以合并分支;如果提示no tracking information
,则使用git branch --set-upstream-to <branch-name1> origin/<branch-name2>
- 如果合并冲突,则解决冲突,并在本地提交
- 如果没有冲突或已经解决了冲突,使用
git push origin <branch-name>
推送
五、标签管理
1. 创建标签
-
git tag <tag-name>
命令创建一个标签<tag-name>
,例如:git tag v1.0.0
-
git tag <tag-name> <commit id>
命令为<commit id>
标识的版本创建标签<tag-name>
-
git tag -a <tag-name> -m <comment> <commit id>
命令为标签<tag-name>
指定说明<comment>
2. 查看标签
git tag
命令查看标签,其中标签按字母顺序排列git show <tag-name>
命令查看标签说明
3. 删除标签
git tag -d <tag-name>
命令删除标签<tag-name>
- 如果标签推送到远程,删除远程标签应再执行命令
git push origin :refs/tags/<tag-name>
4. 推送标签
git push origin <tag-name>
命令推送标签到远程(创建的标签都在本地,不会自动推送到远程)git push origin --tags
命令推送尚未推送的所有标签到远程
六、自定义Git
1. 忽略特殊文件
- 在工作区创建
.gitignore
文件,然后把需要忽略的文件名或规则填写到该文件中去。该文件本身需要放到版本库中进行管理 - 使用
git status
命令检查上述文件中的规则是否正确。规则中,*
表示匹配所有,!
表示不匹配 - 如果不正确,使用命令
git check-ignore -v <file>
检查规则
2. 配置别名
-
git config --global alias.<alias> <name>
命令为<name>
配置别名<alias>
,例如:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
-
.git/config
文件是Git的配置文件,[alias]
后是已经配置的别名
文件忽略原则
- 忽略操作系统自动生成的文件
- 忽略编译生成的中间文件、可执行文件等
- 忽略自己的带有敏感信息的配置文件
七、常用命令
1. 配置Git
# 显示配置信息
$ git config --list
# 编辑配置文件
$ git config -e [--global]
# 配置用户信息
$ git config [--global] user.name [<user-name>]
$ git config [--global] user.email [<user-email>]
2. 新建仓库
# 当前目录下新建仓库
$ git init
# 新建目录并将其初始化为仓库
$ git init [<dir>]
# 克隆项目及其提交历史
$ git clone [<url>]
# 克隆项目及其提交历史,并指定本地文件夹名称
$ git clone [<url>] [<dir>]
3. 添加
# 添加指定文件到暂存区
$ git add [<file1>] [<file2>] ...
# 添加指定目录及其子目录到暂存区
$ git add [<dir>]
# 添加当前目录下所有文件、文件夹到暂存区
$ git add .
# 分多次提交同一文件的多处变动,添加每个变动都需要确认
$ git add -p
4. 删除
# 删除工作区中指定文件,并在暂存区记录本次删除
$ git rm [<file1>] [<file2>] ...
# 停止追踪指定文件,但该文件仍保留在工作区
$ git rm --cached [<file>]
# 更改文件名,并在暂存区记录本次变动
$ git mv [<old-name>] [<new-name>]
5. 提交
# 提交暂存区所有内容到仓库
$ git commit -m [<comment>]
# 提交暂存区的指定文件到仓库
$ git commit [<file1>] [<file2>] ... -m [<comment>]
# 提交自上次提交后工作区的变动到仓库
$ git commit -a
# 提交时显示所有变动信息
$ git commit -v
# 替代上一次提交
$ git commit --amend -m [<comment>]
# 重做上一次提交,同时提交指定文件的变化
$ git commit --amend [<file1>] [<file2>] ...
6. 撤销
# 恢复暂存区的指定文件到工作区
$ git checkout [<file>]
# 恢复某次提交中的指定文件到暂存区和工作区
$ git checkout [<version>] [<file>]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 暂存区中的指定文件重置为上一次提交的版本,但工作区不变
$ git reset [<file>]
# 暂存区与工作区重置为上一次提交的版本
$ git reset --hard
# 当前分支的指针重置为指定提交,并重置暂存区为该提交的版本,但工作区不变
$ git reset [<version>]
# HEAD指针重置为指定提交,同时重置暂存区和工作区为该提交的版本
$ git reset --hard [<version>]
# HEAD指针重置为指定提交,但保持暂存区和工作区不变
$ git reset --keep [<version>]
# 当前分支新建提交,并将指定的版本撤销到该提交
$ git revert [<version>]
# 存储并移除未提交的变动
$ git stash
# 存储的未提交变动移入工作区,但不删除存储
$ git stash apply
# 删除存储的未提交变动
$ git stash drop
# 存储的未提交变动移入工作区,并删除存储
$ git stash pop
7. 查看
# 显示文件的变化
$ git status
# 显示文件变化的简短信息
$ git status -s
# 显示当前分支的提交历史
$ git log
# 显示当前分支的提交历史和每次提交发生变动的文件
$ git log --stat
# 图形化显示分支合并历史
$ git log --graph
# 显示每次提交的tag信息
$ git log --decorate
# 显示指定作者的提交历史
$ git log --author=[<author-name>]
# 显示根据时间筛选的log信息
$ git log [--since] [--util] [--before] [--after]
# 根据关键词搜索提交历史
$ git log -S [<keyword>]
# 显示某次提交之前的所有提交说明,每个说明占一行
$ git log [<tag>] <version> --pretty --oneline
# 显示某次提交之前符合搜索条件的所有提交说明
$ git log [<tag>] <version> --grep <condition>
# 显示某个文件包括改名在内的提交历史
$ git log --follow [<file>]
$ git whatchanged [<file>]
# 显示指定文件的每一次变动
$ git log -p [<file>]
# 显示最近n次提交
$ git log -<n> --pretty --oneline
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件的修改者、修改时间、修改内容等历史信息
$ git blame [<file>]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区中指定文件和上一次提交的差异
$ git diff --cached [<file>]
# 显示工作区与当前分支最新提交的差异
$ git diff HEAD
# 显示两个分支分开后的差异
$ git diff [<version1>]...[<version2>]
# 显示未提交的变动行数
$ git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
$ git show [<version>]
# 显示某次提交发生变动的文件
$ git show --name-only [<version>]
# 显示指定提交中指定文件的变动内容
$ git show [<version>]:[<file>]
# 显示当前分支的最近提交
$ git reflog
8. 远程同步
# 获取远程仓库的所有变动
$ git fetch [<remote-repo>]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [<remote-repo>]
# 增加一个新的远程仓库,并命名
$ git remote add [<repo-name>] [<url>]
# 获取远程仓库的变动,并与本地分支合并
$ git pull [<remote-repo>] [<branch-name>]
# 推送本地指定分支到远程仓库
$ git push [<remote-repo>] [<branch-name>]
# 强行推送当前分支到远程仓库
$ git push [<remote-repo>] --force
# 推送所有分支到远程仓库
$ git push [<remote-repo>] --all
9. 分支管理
# 显示所有本地分支
$ git branch
# 显示所有远程分支
$ git branch -r
# 显示所有本地分支和远程分支
$ git branch -a
# 新建一个分支但不切换分支
$ git branch [<branch-name>]
# 新建一个分支并切换到该分支
$ git checkout -b [<branch-name>]
# 新建一个指向指定提交的分支
$ git branch [<branch-name>] [<version>]
# 新建一个分支并与指定的远程分支建立联系
$ git branch --track [<branch-name>] [<remote-branch>]
# 切换到指定分支,并更新工作区
$ git checkout [<branch-name>]
# 切换到上一个分支
$ git checkout -
# 本地分支与指定的远程分支建立联系
$ git branch --set-upstream [<branch-name>] [<remote-branch>]
# 合并指定分支到当前分支
$ git merge [<branch-name>]
# 合并指定提交到当前分支
$ git cherry-pick [<version>]
# 删除分支
$ git branch -d [<branch-name>]
# 删除远程分支
$ git push origin --delete [<branch-name>]
$ git branch -dr [<remote/branch>]
10. 标签管理
# 显示所有tag
$ git tag
# 为当前提交新建一个tag
$ git tag [<tag>]
# 为指定提交新建一个tag
$ git tag [<tag>] [<version>]
# 删除本地tag
$ git tag -d [<tag>]
# 删除远程tag
$ git push origin :refs/tags/[<tag>]
# 查看tag信息
$ git show [<tag>]
# 提交指定tag
$ git push [<remote-repo>] [<tag>]
# 提交所有tag
$ git push [<remote-repo>] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [<branch-name>] [<tag>]
11. 其他
# 生成一个可供发布的压缩包
$ git archive
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?