这篇博客用来记录自己学习git体系的经历.
首先谈谈对git
的理解:#
git
是一个版本控制系统,简而言之,是为了方便程序员维护和更改自己的代码。
假设你有一个没修好的bug,某一天,你突然想到了这个解决的方案,于是你大改特改,快改完的时候,你发现你的想法是错误的。。。
这个时候,有一个git
就很方便你回到之前的代码,这样能够节省你的操作,尤其是当文件很大的时候,这种改动尤为明显。
当然,git
的功能远超于此,上面只是一个我自己的感受。以下内容来源于gpt:
版本控制系统:Git是一个分布式版本控制系统,不仅仅是为了方便程序员维护和更改代码,还可以跟踪代码的历史记录,允许多人协作开发,管理不同版本的代码。
回滚和撤销更改:Git的一个主要功能是可以轻松地回滚到之前的代码状态,特别是在发现错误或者不正确的更改时,这样可以避免对项目造成不必要的破坏。
分支管理:分支允许开发者在不影响主干稳定版本的情况下开展工作。通过合并(merge)或者重整(rebase),可以将不同的分支整合到一起,确保代码的整洁和稳定性。
工作流程:Git的工作流程通常包括工作目录(Working Directory)、暂存区(Staging Area)和版本库(Repository)。工作目录是你实际操作和修改代码的地方,暂存区用来准备提交到版本库的更改,版本库则保存着项目的完整历史记录和所有版本的代码。
其次总括一下git
的工作流程:#
git
的基本工作原理包括三个主要区域:
- 工作目录:实际操作和修改代码的地方。
git
是管理这个工作项目的,相当于基于这个project 整体之上建立了一个系统来帮助程序员更好地管理。 - 版本库: 这个库一般被认为是经过仔细审查和测试的稳定版本,可以直接投入使用或或者部署到生产环境的内容。这部分内容最好不要多次改动,保障客户端的正常使用。
- 暂存区: 这个区域试介于版本库和工作目录之间的区域。像之前说的,当你在工作目录中完成了自己的代码修改之后,就需要进行审查和测试,只有经过审查和测试的代码才可以上传到版本库中。也就是说,这是你试错的地方。
接下来我们来看看git
的基本操作和工作流:
基本操作和工作流:#
创建仓库:
1
2
3
4
5# 初始化新的 Git 仓库
git init
# 或者将已有项目初始化为 Git 仓库
git init path\to\your\project #这是windows的地址写法。添加文件到暂存区:
1
2
3
4
5
6git status # 显示当前工作目录中被修改但尚未添加到暂存区的文件列表
git add file.txt # 根据上述 status 的显示结果确定要添加到暂存区的文件或者目录
git add project1\folder
git add . # 添加所有修改的文件和新文件(不包括被删除的文件)
git status # 确认已经提交到暂存区提交到版本库:
1
git commit -m "Commit message" # 提交的时候需要给出修改的部分信息,比如修改细节,改动内容之类的,方便管理。
远程仓库操作:#
连接远程仓库是为了实现项目的远程备份、团队协作和跨设备的同步,也就是使用一个平台进行共享之类的。常见的远程仓库位于github
\ gitlab
\ bitbucket
上。
连接远程仓库:
首先在github上创建一个仓库,这个仓库就是你在当前平台上用来托管的仓库。
我有一个个人仓库https://github.com/Hebown/Hebown.git,存放的是我的个人介绍。
这里我们就可以利用这个,将本地仓库连接到这个仓库中;1
2
3git remote add origin https://github.com/Hebown/Hebown.git
# 这里origin是远程仓库的别名,你也可以使用任何合适的名字来代表远程仓库,例如PROFILE
# git remote add PROFILE https://github.com/Hebown/Hebown.git克隆远程仓库:
上述内容是将本地内容上传到平台上,当然也可以将平台内容下载到本地.1
git clone https://github.com/Hebown/Hebown.git my-project # 指定clone的文件位置是my-project.
push 和 pull:
一旦本地仓库与远程仓库关联成功,你可以使用git push
命令将本地的提交推送到远程仓库,使用git pull
命令从远程仓库拉去最新的更新到本地。1
2git push origin master # origin是远程仓库的别名,master是主分支的名称(或者是main)
git pull origin master # 从远程仓库拉取内容,保证远程和本地仓库同步
分支管理和代码合并:#
分支(branch)是git
中非常关键的概念,它允许开发开发者在不影响主线的情况下进行并行开发和试验性工作。
创建一个新的分支,意味着创建了一个和父级分支完全相同的副本,包括文件、代码修改、提交记录等等内容。
我的理解是,相当于你继承了别人的工作,那么这个工作的内容和你的工具什么的必然全部都是相同的。
以下是分支的操作方法:
创建分支:
1
git branch feature-branch # 在当前提交的基础上创建一个`feature-branch`的新分支,但不会自动切换到当前分支上
切换分支:
1
2
3
4
5
6git checkout feature-branch
# 或者,你的git版本是2.23以上的,可以使用 git switch feature-branch
# 你还可以一次性创建并切换到新分支,如下所示,(对于 checkout)使用 -b 参数
git checkout -b new-feature-branch
# (对于 switch)使用 -c 参数: git switch -c new-feature-branch查看分支:
1
git branch
这条命令会展示本地所有分支及当前所在的分支(当前所在分支会有一个*)
合并分支:
首先切换到接受更改的目标分支(通常是主分支),然后执行合并命令1
2git checkout main
git merge feature-branch
(合并是依照一个模板来进行合并的,所以如果分支之间都做出了改变,那么合并的时候git
就不知道依照哪一个来进行合并,导致合并冲突)
- 删除分支:
如下所示:
1 | git branch -d feature-branch # 删除本地的分支 |
其他主题:#
处理代码冲突:#
当两个分支都中的同一文件的同一部分时候,git
不能自动合并这些修改,需要手动解决冲突。
git工具链和hook:#
git 提供了很多的工具和hooks,所谓hook,我认为可以理解成在完成某项工作之后,与之相关联的流程,比如代码检测、自动化测试、格式化、发送通知等等。
以下是一些内容:
常见的 Git 工具和钩子包括:#
Git 命令别名:
可以通过配置 Git 别名来简化常用命令,提高工作效率。例如,将git status
设置为git st
:1
git config --global alias.st status
Git 扩展(git-extras):
Git 扩展提供了许多额外的命令和功能,使得 Git 更强大和便捷。你可以通过安装和配置 Git 扩展来扩展 Git 的功能。Git 钩子(Git hooks):
Git 钩子是在特定 Git 操作时自动执行的脚本。常见的 Git 钩子包括:pre-commit
:在提交前执行,用于执行代码格式化、静态分析等。post-commit
:在提交后执行,用于发送通知、执行自动化测试等。pre-push
:在推送前执行,用于进行代码检查、测试等。post-checkout
和post-merge
:在切换分支或合并后执行,用于更新依赖、清理缓存等。
你可以在
.git/hooks/
目录下找到这些钩子的模板,并根据需要编写和配置自定义的钩子脚本。
2024年9月26日 更新:笔者上ads协作需要进一步将github和git联合起来,于是来强化一下。
主要学习这一系列文档
- 为本地仓库添加远程仓库:
git add remote origin repo-link
,其中origin
是你为远程仓库写的别名,你可以起任何方便你记忆的名字,repo-link
是你仓库的ip。 - 在本地创建对应分支的新分支:
git checkout -b new-branch origin/existing-branch
,这里existing-branch
是想基于的远程分支名。 - 如果别人更新了分支,可以进行拉取操作来同步自己的更新:
git pull
,但首先要进入到相应的分支中。