Git的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践
什么是Git?
- Git 是一个免费开源的
分布式版本控制系统,可以方便地 处理各种项目版本控制,记录文件内容变化,不再让程序员在面对众多的代码版本时茫然无措。(亲身体验过朋友的数字命名法——文件夹1,文件夹11,文件夹1.1)
下载Git
Git (git-scm.com) 进入Dowloads模块,找对自己计算机对应版本下载即可
集中式与分布式的区别
除了git,其实还有svn、cvs这样的集中式版本控制系统
集中式版本控制系统 每次在写代码时, 都需要从服务器中拉取一份下来,如果服务器丢失了,那么所有的代码就都丢失了,你的电脑仅保存当前的版本信息。换句话说,集中式就是把代码放在一个服务器上集中管理,你所有的回滚等操作 都需要服务器支持。
分布式版本控制系统 的优点在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你也可以把自己的代码新建一份仓库分享给其它人。
Git的常用命令
| 命令代码 | 命令作用 |
|---|---|
| git config --global | 配置git环境 |
| git init | 创建本地空仓库,直接就是main |
| git add 文件名 | 将文件添加到缓存区 |
| git commit -m | 把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中 |
| git commit --amend | 改写提交 |
| git log | 查看历史提交日志 |
| git status | 查看本地库状态,可以检测文件是否被改动 |
| git reset --hard 要回滚到的版本ID | 回滚代码仓库 |
常见Git配置:
git config --global user.name "Jack" # 将用户名设置为Jack
git config --global user.email Jacklove@xx.com # 设置邮箱
Git命令别名配置:
git config --global alias.cam "commit --amend --no-edit" # 将后面的命令取别名cam
Objects:
commit, tree, blob 在git里面都属于 Object, 除此之外还有一个 tag 的Object commit: 记录提交信息,对应唯一版本代码 tree: 存储文件的目录信息 blob: 存储文件的内容
- 通过commit寻找到tree信息,每个commit都会存储对应的tree id;
- 通过tree存储的信息,获取到对应的目录树信息;
- 从tree中获得blob的id,通过该id获取对应文件的内容。
修改历史版本
- git commit --amend 可以修改最近一次的commit信息,修改之后 commit id 会变
- git rebase 通过git rebase -i HEAD~3 可以实现对最近3个commit进行修改
- 合并 commit
- 修改具体的 commit message
- 删除某个commit
Git的分支命令
分支的作用:同时并行多个功能开发,提高开发效率
| 命令代码 | 命令作用 |
|---|---|
| git branch 分支名 | 创建分支 |
| git branch -v | 查看分支 |
| git checkout 分支名 | 切换分支 |
| git commit -m | 把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中 |
| git merge 需要合并的分支名 | 把指定的分支合并到当前分支上 |
Git 远端交互与多人合作
将远端代码拉取到本地
git clone : 拉取完整的仓库到本地目录,可以指定分支,深度(配合Github食用更佳)
git fetch : 将远端某些分支最新代码拉取到本地,不会执行merge操作。如果需要和本地代码合并需要手动操作
git pull : 拉取远端某分支,并和本地代码进行合并。相当于 git fetch + git merge
将本地代码同步至远端
git push
通常使用 git push origin main (可能产生冲突,谨慎对待!)
使用vscode的小伙伴也可以下载插件,使用更简单的图形化界面操作