Git 基础概念
Git 概念汇总
概念 | 描述 |
---|---|
工作区(Workspace) | 在本地的代码库,新增和修改的文件会提交到暂存区 |
暂存区(stage) | 用于临时存放文件的修改,实际上是一个文件(. Git/index),保存待提交的文件列表 |
仓库(repository) | Git 的管理仓库,记录文件状态的地方,所有的代码版本都在里面 |
远程仓库(origin/remote) | 专用的 git 服务器,为多人提供共享服务。本地的仓库通过 push命令将代码推送到远程仓库里 |
本地仓库 | 本地电脑内直接使用的版本库 |
分支(Branch) | 分支是从主线分离出的副本,可以独立操作而不干扰主线,仓库初始化后会有一个默认主分支“master”或“main” |
头(HEAD) | HEAD 类似指针,指向当前活动分支的最新版本 |
提交(Commit) | 将 stage 中的所有变更提交到当前仓库的活动分支 |
推送(Push) | 将本地仓库的版本推送到远程仓库 |
拉取(Pull) | 从远程仓库获取更新到本地仓库 |
获取(Fetch) | 从远程仓库更新,作用同 pull,但是不会自动合并 |
冲突(Conflict) | 多人对同一个文件进行修改后在远程仓库合并时会面临冲突,需要人工合并处理 |
合并(Merge) | 对有 conflict 的文件进行合并操作,git 可以自动合并变更内容,无法自动处理的文件需要人工处理 |
标签(Tag) | 标签指的是某个分支某个特定时间点的状态,可以理解为提交记录的别名,常用来标记版本。 |
main/master | 仓库的默认主分支 |
origin/main | 表示远程仓库的 main 分支 |
工作区/暂存区/仓库
- 图中的 objects 标识的区域为 git 的对象库,实际的位置是“. Git/objects”目录中,里面包含了创建的各种对象和内容
- 当对工作区的修改/新增文件执行 git add命令后,暂存区的目录树被更新,同时工作区修改/新增文件的内容被写入 objects 的一个新的对象中,而该对象的 ID 被记录在 stage 的文件索引中
- 当执行 git commit时,stage 的目录树写入 objects 中,main 分支做出更新
- 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
- 当执行 git rm --cached “file” 命令时,会直接从暂存区删除文件,工作区则不做出改变
工作区
本地计算机内的项目文件
暂存区(stage)
暂存区是一个临时存储区域,包含即将提交到版本库中的文件快照
常用命令
git add filename # 将单个文件添加到暂存区
git add . # 将工作区中的所有修改添加到暂存区
git status # 查看哪些文件在暂存区中
版本库(Repository)
版本库包含项目的所有版本历史记录,每次提交都会在版本库中创建一个新的快照,这些快照不可变,确保了项目的完整历史记录
常用命令
git commit -m "Commit message" # 将暂存区的更改提交到本地版本库
git log # 查看提交历史
git diff # 查看工作区和暂存区之间的差异
git diff --cached # 查看暂存区和最后一次提交之间的差异
三者之间的关系
- 工作区->暂存区
git add
- 暂存区->版本库
git commit -m "Commit message"
- 版本库->远程仓库
git push origin branch-name
- 远程仓库->本地版本库
git pull origin branch-name
# 或者
git fetch origin branch-name
git merge origin/branch-name
Git 工作流程
1、克隆仓库
如果你要参与一个已有的项目,首先需要将远程仓库克隆到本地:
git clone https://github.com/username/repo.git
cd repo
2、创建新分支
为了避免直接在 main 或 master 分支上进行开发,通常会创建一个新的分支:
git checkout -b new-feature
3、工作目录
在工作目录中进行代码编辑、添加新文件或删除不需要的文件。
4、暂存文件
将修改过的文件添加到暂存区,以便进行下一步的提交操作:
git add filename
或者添加所有修改的文件
git add .
5、提交更改
将暂存区的更改提交到本地仓库,并添加提交信息:
git commit -m "Add new feature"
连接远程仓库
git remote add origin [[email protected]]
6、拉取最新更改
在推送本地更改之前,最好从远程仓库拉取最新的更改,以避免冲突:
git pull origin main
或者如果在新的分支上工作
git pull origin new-feature
7、推送更改
将本地的提交推送到远程仓库:
git push origin new-feature
8、删除分支
如果不再需要新功能分支,可以将其删除:
git branch -d new-feature
或者从远程仓库删除分支:
git push origin --delete new-feature
Git 指令
Git 分支
Git 仓库在 fork 中打开后界面如下:
可以看到每一个分支相互平行,只有完成某些项目的开发时才会合并到主分支。
那么分支有什么用呢?当计划开发一个新的功能时,第一天完成了百分之 50,如果直接提交到 master 分支,则可能导致别人无法开发,如果全部写完再提交的话又可能因为意外丢失之前的进度。此时就体现出来分支的优越性了。我们可能创建一个属于自己的别人不可见的分支,在这个分支上开发提交代码不会影响他人,可以随意操作,等到开发结束了再一次性合并到 master 分支。
Git 分支常用命令
git branch # 列出所有本地分支
git branch -r #列出所有远程分支
git branch -a #列出所有本地和远程的分支
git branch [new-branch-name] #创建一个新的分支,但停留在当前分支
git checkout -b [new-branch-name] #创建一个新的分支,并切换到该分支
git branch --track [branch] [remote-branch] #创建一个新分支,并与指定的远程分支建立追踪关系
git checkout [new-branch-name] #切换到指定分支,并更新工作区
git merge [branch] #合并指定分支到当前分支
git branch -d [branch] #删除分支
git push origin --delete [branch] #删除远程分支