git
git更像是运用型技术,这些知识只是帮助你能更好的理解其工作机制,更重要的是去使用
安装git
- git下载地址
- https://git-scm.com/downloads/win
- git-GUI下载地址
- https://desktop.github.com/download/
git核心概念
仓库(Repository)
定义:Git仓库Git用来存储项目的地方,包含项目的所有文件和历史记录
仓库的核心是一个隐藏的.git
目录,其中存储了Git的所有元数据和对象。
在Git中,相同文件的不同版本会共享存储空间,只有变化的部分会被存储,文件内容存储在Git的对象数据库中(blob对象),而提交(commit)则记录了这些文件的快照
.get
目录的结构objects/
:存储所有的Git对象(Blob、Tree、Commit、Tag)。refs/
:存储所有的引用(分支、标签等)HEAD
:指向当前分支的最新提交config
:仓库的配置文件index
:暂存区的索引文件
工作区(Working Directory)
定义:工作区是项目的当前状态,包含你正在编辑的文件和目录。
- 工作区中文件可能存在的状态
- 未跟踪(Untracked):新创建的文件,尚未被Git管理
- 已跟踪(Tracked):已经被Git管理的文件
- 未修改(Unmodified):文件内容与最近一次提交一致
- 已修改(Modified):文件内容被更改,但尚未添加到暂存区
- 已暂存(Staged):文件已被添加到暂存区,准备提交
暂存区(Staging Area)
定义:暂存区是一个临时区域,用于保存提交的更改
- 暂存区的本质是一个索引文件(位于
.git/index
),记录了那些文件将被包含在下一次提交中。 - 使用
git add <file>
将文件添加到暂存区 - 使用
git status
可以查看暂存区和工作区的状态
提交(Commit)
定义:提交是Git中的一个快照,记录了工作区和暂存区的当前状态
- 每次提交都会生成一个唯一的SHA-1哈希值,用于标识该提交
- 提交包含信息
- 提交的快照(即文件的当前状态)
- 提交的作者和提交者信息
- 提交的时间戳
- 提交的父提交(前一个提交的哈希值)
- 提交信息(通过
git commit -m "message"
添加) - 提交是不可变的,一旦创建就无法直接修改(但可以通过
git rebase
或git commit --amend
间接修改)
分支(Branch)
定义:分支是项目开发的不同线路,允许并行开发
- 分支的本质是一个指向某个提交的指针
- 默认分支通常称为
main
或master
- 创建新分支时,Git只是创建一个新的指针,指向当前提交
- 使用
git branch <branch-name>
创建新分支 - 使用
git checkout <branch-name>
或git switch <branch-name>
切换分支 - 使用
git branch -d <branch-name>
删除分支
合并(Merge)
定义:合并是将两个分支的历史记录合并在一起
- 快进合并(Fast-Forward Merge)
- 当目标发呢之是当前分支的直接祖先时,Git只需要将当前分支的指针移动到目标分支的最新提交
- 三方合并(Three-Way Merge)
- 当分支有分叉时,Git会创建一个新的合并提交,包含两个分支的更改。
- 如果两个分支修改了同一文件的一部分可能会产生冲突,需要手动解决
- 使用
git merge --no-ff
强制创建合并提交,即使可以快进合并
克隆(Clone)
定义:克隆是从远程仓库赋值一个完整的本地仓库
- 克隆会下载远程仓库的所有文件、提交历史和分支
- 克隆命令
git clone <repository-url>
- 克隆后,本地仓库会自动关联远程仓库(通常命名未
origin
)
拉取(Pull)
定义:拉取是从远程仓库获取更改并合并到当前分支
- 拉取实际上是两个操作的组合
git fetch
:从远程仓库下载最新的提交和分支git merge
:将远程分支的更改合并到当前分支
- 拉取命令
git pull
- 如果远程分支和本地分支有冲突需要手动解决
推送(Push)
定义:推送是将本地仓库的更改上传到远程仓库
- 推送命令
git push <remote> <branch>
- 如果远程仓库有本地没有的更改,需要先拉取(
git pull
)再推送 - 推送时可能会遇到权限问题,需要确保你有权限写入远程仓库
git基本命令
实际上在日常运用中大多是在可视化界面,如idea中进行git的相关操作
初始化与克隆
git init
:在当前目录初始化一个新的 Git 仓库。
git clone <repository-url>
:克隆远程仓库到本地。
查看状态与历史
git status
:查看工作区和暂存区的状态。
git log
:查看提交历史。
git log --oneline
:以简洁的方式查看提交历史。
添加与提交
git add <file>
:将文件添加到暂存区。
git add .
:将所有更改添加到暂存区。
git commit -m "commit message"
:提交暂存区的更改,并附上提交信息。
分支操作
git branch
:查看所有分支,当前分支前会有一个 * 号。
git branch <branch-name>
:创建一个新分支。
git checkout <branch-name>
:切换到指定分支。
git checkout -b <branch-name>
:创建并切换到新分支。
git merge <branch-name>
:将指定分支合并到当前分支。
git branch -d <branch-name>
:删除分支。
远程仓库操作
git remote -v
:查看远程仓库信息。
git remote add origin <repository-url>
:添加远程仓库。
git push origin <branch-name>
:将本地分支推送到远程仓库。
git pull origin <branch-name>
:从远程仓库拉取最新更改并合并到本地分支。
撤销与回退
git reset <file>
:将文件从暂存区移除,但保留工作区的更改。
git reset --hard HEAD
:撤销工作区和暂存区的所有更改,回到最近一次提交的状态。
git revert <commit-hash>
:撤销指定提交,并生成一个新的提交。
标签(Tag)
git tag
:查看所有标签。
git tag <tag-name>
:在当前提交上创建一个轻量标签。
git tag -a <tag-name> -m "tag message"
:创建一个带注释的标签。
git push origin <tag-name>
:将标签推送到远程仓库。