Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践 | 青训营

117 阅读4分钟

一、Git 简介

Git是一个快速的、可扩展的分布式版本控制系统。它将每次变化的文件作快照后,记录在一个系统中。每次提交更新,都会把所有文件的信息做一遍快照,然后保存一个指向该快照的索引。

Git 结构

对于任何一个文件,Git内部只有三种状态:已修改,已暂存和已提交。

  • 修改表示已修改了某个文件,但是没有提交暂存
  • 暂存表示已将文件放入暂存区
  • 提交表示将当前所有文件更新持久化到本地版本库中

Git在工作和使用时,可以分为三个区域:工作目录、暂存区、版本库。

  • 工作目录:就是项目的目录
  • 暂存区:每次修改完文件,都要把修改的文件放入暂存区才能提交到版本库,可以将暂存区理解为缓存
  • 版本库:本地仓库,里面按照不同的提交,将每次提交分为了一个个版本,可对某一个版本进行回滚操作

二、Git 使用

1. 初始化

进入工作目录后使用命令:

git init

将当前目录初始化成 Git 的一个仓库。

还可以进行用户名邮箱的个性化设置:

git config --global user.name xxx
git config --global user.email xxx@xxx.com

第一条命令设置用户名,第二条命令设置邮箱,然后我们就能在家目录下看到一个 .gitconfig 文件,里面设置了用户名和邮箱。

[user]
    name = xxx
    email = xxx@xxx.com

2. 下载远程库

git clone xxx

最经常使用的命令,将xxx地址库的下载到当前工作目录中。

3. 版本库基础命令

添加暂存区

git add xxx
git add .
git commit -m "this is a explain"

用 add 命令将 xxx 文件添加到暂存区,使用 add . 将所有文件加入暂存区。然后使用 commit 命令并用 -m 参数写上备注提交版本到本地仓库。

查看当前仓库状态

git status

命令将显示出当前仓库有无修改文件需要放到暂存区,并且给出命令建议。

回滚仓库相关命令

git log                   // 查看当前分支所有版本
git reset --hard HEAD^    // 往前回滚一个版本
git reset --hard HEAD^^   // 回滚两个版本
git reset --hard HEAD~100 // 回滚一百个版本
git reset --hard version_num    // 回滚到指定版本
git reflog                // 查看HEAD指针历史移动纪录

Git 的目录结构是类似树型的,有一个HEAD指针指向当前所在的版本,这里的回滚都是将HEAD指针往前移动。

撤销删除相关命令

git rm --cached xxx   // 将xxx从暂存区撤销
git restore xxx       // 将xxx的修改撤销

restore 的撤销是针对于暂存区的,将文件恢复成暂存区里文件的模样,如果暂存区为空,那就恢复成当前版本的模样。

远程连接仓库

git remote add origin www.xxx.com

将本地仓库关联至 www.xxx.com 地址的仓库。

git push -u  // 将本地仓库推送至远程仓库,第一次需要加 -u
git push origin branch_name // 将分支推送至远程仓库
git pull     // 将远程仓库的当前分支与本地仓库的当前分支合并

4. 分支

当使用git init命令后,本地仓库初始化后会自动创建 master 主分支,之前的所有命令都是默认在主分支上进行的。为了多人协作,才有了分支的设定,每人或多人单独写一个分支,最后将分支合并到主分支,保证了分支之间的独立性,以便同一时间对仓库进行改动。

创建分支

git checkout -b branch_name   // 创建分支并切换到该分支
git branch branch_name        // 创建分支

删除分支

git branch -d branch_name

查看所有分支

git branch

合并分支

git merge branch_name  // 将branch_name合并到当前分支
git pull origin branch_name // 将远程仓库的branch_name分支与本地仓库的当前分支合并

分支合并若合并过来的分支不是当前分支的子集,会产生冲突。这时,打开冲突文件,git会帮你把冲突的位置标注出来,我们只需要手动解决冲突位置,然后保存文件,就算合并完成。然后删除合并分支。

本地分支同步远程分支

git push --set-upstream origin branch_name // 设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name // 删除远程仓库的branch_name分支

当本地分支和远程分支关联后,再使用git pullgit push拉取和推送。