Git是一个版本控制系统,用于跟踪和管理软件开发项目中的代码变更。它可以追踪文件的修改、添加和删除,并记录这些变更的历史。Git可以帮助团队成员协同开发,并提供了一种有效的方式来处理并发编辑和代码合并。 在这篇文章中,我们将介绍Git的正确使用姿势和最佳实践,以便更好地使用Git来管理代码进行团队协作。
一、Git基本概念
git本地有三个工作域:工作区(working directory), 暂存区(stage/index), 资源库(repository)。如果再算上远程服务器上的git仓库(remote directory)就可以分为四个工作域。其关系如下:
(一)四个工作区
- Workspace: 工作区,就是你平时存放项目代码的地方
- Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数 据。其中HEAD指向最新放入仓库的版本
- Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
(二)工作流程
git工作的一般流程:
- 在工作目录中添加,修改文件
- 将需要进行版本管理的文件放入暂存区
- 将暂存区的文件提交到git仓库
(三)文件的四种状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文 件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可 进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即 从库中取出文件, 覆盖当前修改
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified
二、Git基本命令
git init
:在当前目录下创建一个新的Git仓库。git clone
:从远程服务器上克隆一个Git仓库到本地。git add filename
:将文件添加到Git仓库的暂存区。git commit
:将暂存区中的文件提交到Git仓库。git status
: 查看仓库状态git log
:查看提交的历史记录git reflog
:查看对仓库的操作日志git diff HEAD
:比较当前内容与最后一次提交的版本的差异。git checkout filename
:放弃对工作区代码的修改。
三、Git分支的操作
在进行多个并行作业时,通常会用到分支。
git branch
:列出当前所有的分支。git checkout
:切换到指定的分支。git merge
:将指定分支的代码合并到当前分支中。git rebase
:将当前分支的代码变到指定分支上。
四、Git 协作
git push
:将本地Git仓库中的代码推送到远程服务器上。git pull
:从远程服务器上拉取最新的代码。git fetch
:从远程服务器上拉取最新的代码。git merge
:将远程分支的代码合并到本地分支中。
五、版本发布
每次发布稳定版本时,应该为该版本创建一个标签。标签可以用来标识特定版本的代码,方便日后查找和回溯。创建标签的步骤如下:
- 切换到主分支:
git checkout master
- 拉取最新的代码:
git pull origin master
- 创建标签:
git tag -a v1.0.0 -m "Release version 1.0.0"
- 推送标签到远程仓库:
git push origin --tags
六、远程仓库操作
- 生成通信密钥:ssh-keygen -t rsa -C "su@126.com" ,生成的公钥在/home/stu/.ssh/下,如下图。
2.测试与github或者gitee(码云)有没有连通:
测试github 的命令 :ssh -T git@github.com
测试gitee 也就是码云的命令 :
3. 克隆项目:git clone 项目地址
4. 提交分支到远程仓库:git push origin 分支名
5. 提交分支到远程仓库,并跟踪分支 :git push -u origin 分支名
6. 拉取远程服务器上的分支更新到本地 :git pull origin 分支名