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

149 阅读9分钟

系列文章目录

Go语言入门指南:基础语法和常用特性解析 | 青训营

高质量编程与性能调优实战 | 青训营

下面是关于 "Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践" 的复习大纲:

@TOC


新手入门全流程


适合没有什么经验,但又想快速上手的同学。如果你自己在迭代开发的过程中,苦于没有好的办法保存自己每一个版本的代码,如果你暂时还不涉及多人协作开发,没有合并多个开发分支并处理冲突的必要。那么接下来的这些步骤将帮助你快速新建一个GitHub代码仓库,并设置免密登录。以下代码在Linux系统下,可以直接复制粘贴到终端中运行。

  1. 在Github或者Gitee上创建一个账号,在此账号下新建一个Public仓库。完成新建后,点击如下图的绿色按钮,复制代码仓库的https地址,用于下面的git clone命令

    git clone https://github.com/YOUR_NAME/YOUR_REPOSITORY.git

图片.png

  1. git clone下载下来的是个空的仓库,现在需要进入这个空仓库中,随便新创建一些文件

    cd YOUR_REPOSITORY/ YOUR_REPOSITORY是仓库名字,上面你自己新建的空仓库的名字

    touch test.txt 在当前路径新建一个待上传的测试文件

    cp ~/.bashrc . 把家目录里的环境变量配置文件复制到现在的位置

  2. 此时你的仓库中应该会有两个新文件,可以用

    git status 查看 git 有没有追踪到这两个新添加的文件,红色表示还没有修改还没有被加入

    git add . 将这两个新添加的文件加入到待上传的缓存中

    git commit -m "备注:针对这次上传做了哪些修改,说明理由和效果" 给这次仓库的修改,进行上传之前的备注,注意 -m 参数和 引号是英文输入法的双引号

  3. 这个时候可能还没有进行账号授权,会提示你

    If Author identity unknown

    Please tell me who you are

    你需要配置一下git的用户邮箱和用户名

    git config user.email "XXX@qq.com"

    git config user.name "XXX"

  4. 完成第四步git的用户邮箱和用户名的配置后,重复执行第3步,将修改添加到缓存中,并对修改添加备注

  5. 这个时候可以尝试推送本地修改到GitHub仓库了,根据提示,输入自己的用户名和密码(密码可以用token代替)

    git push

    Username for 'https://github.com': XXX

    Password for 'https://VidyaLee@github.com':ghp_XXX

  6. 如果是自己私人用的电脑,可以设置免密登陆

    git config credential.helper store 使用这个帮助程序会将你的密码存储在磁盘上,受文件系统权限保护。

    sudo git config --system --unset credential.helper 这个则是取消免密登陆的配置


前置知识

0.1 Git 的基础概念:理解 commit、branch、和 merge
0.2 基本的 Git 命令:如 git clone, git add, git commit, git push, 和 git pull
0.3 分支策略:了解如何创建和合并分支,以及何时使用它们
0.4 解决合并冲突:了解何时和如何解决合并中的冲突


Git 的基础概念:理解 commit、branch、和 merge

commit

  • 定义: 提交(commit)是 Git 中的一个基本概念,表示的是代码库中的一个特定状态。每次你提交更改,都会创建一个新的提交,这个提交包含了这次更改的所有内容。

  • 常用命令:

    • git commit -m "提交信息": 提交当前暂存区的更改,并附带一个描述信息。
    • git commit -a: 自动添加所有更改(不包括新文件)并提交。
    • git commit --amend: 修改最近的提交。

branch

  • 定义: 分支(branch)是指向提交的指针。主分支通常是 "master" 或 "main"。使用分支,你可以从开发主线中分离出来,进行试验或调整,然后再合并回主线。

  • 常用命令:

    • git branch: 列出所有的分支。
    • git branch 分支名: 创建一个新的分支。
    • git checkout 分支名: 切换到一个指定的分支。
    • git branch -d 分支名: 删除一个分支。

merge

  • 定义: 合并(merge)是 Git 中的一个操作,允许你将一个分支的更改合并到另一个分支。例如,你可能会在一个特性分支上工作,然后将这个特性分支合并回主分支。

  • 常用命令:

    • git merge 分支名: 合并指定的分支到当前分支。
    • git merge --abort: 如果合并过程中出现冲突,使用此命令可以中止合并操作。

基本的 Git 命令:如 git clone, git add, git commit, git push, 和 git pull

git clone

  • 定义: git clone 命令用于从远程存储库复制项目到本地。

  • 常用参数:

    • git clone <仓库URL>: 克隆远程仓库到当前目录。
    • git clone <仓库URL> <本地目录名>: 克隆远程仓库到指定的本地目录。

git add

  • 定义: git add 命令用于将更改的文件添加到暂存区,为下一次提交做好准备。

  • 常用参数:

    • git add <文件名>: 添加指定的文件或目录。
    • git add .: 添加当前目录的所有更改。
    • git add -A: 添加所有更改(包括新文件和删除的文件)。

git commit

  • 定义: 如前所述,git commit 命令将暂存区的更改提交到本地仓库。

  • 常用参数:

    • git commit -m "提交信息": 提交暂存区的更改,并附带一个描述信息。
    • git commit -a: 添加并提交所有更改。
    • git commit --amend: 修改最近的提交。

git push

  • 定义: git push 命令用于将本地的更改推送到远程仓库。

  • 常用参数:

    • git push: 推送当前分支到远程存储库。
    • git push -u origin <分支名>: 将指定的分支推送到远程存储库,并设置默认的上游仓库。
    • git push --all: 推送所有分支到远程存储库。

git pull

  • 定义: git pull 命令用于从远程存储库获取最新的更改并合并到当前分支。

  • 常用参数:

    • git pull: 获取远程存储库的最新更改并合并到当前分支。
    • git pull origin <分支名>: 从指定的分支获取最新更改并合并。

分支策略:了解如何创建和合并分支,以及何时使用它们

创建和合并分支是 Git 中非常重要的功能,它们允许多个开发者并行工作,同时确保代码的稳定性。🦌

创建分支

在 Git 中,分支本质上是指向提交的指针。当你创建一个新的分支时,你实际上是在创建一个新的指针来指向当前的提交。

常用命令:

  • git branch <分支名>: 创建一个新的分支,但不切换到这个分支。
  • git checkout -b <分支名>: 创建一个新的分支并立即切换到这个分支。
  • git branch: 查看所有的分支。

切换分支

切换到另一个分支意味着将 HEAD 指针移动到那个分支,并更新工作目录的文件为该分支的快照。

常用命令:

  • git checkout <分支名>: 切换到指定的分支。

合并分支

合并是将一个分支的更改应用到另一个分支的过程。通常在功能开发完成后,你会想要将这些更改合并回主分支。

常用命令:

  • git merge <分支名>: 将指定分支的更改合并到当前分支。这可能会产生一个合并提交,除非进行了快进合并。

何时使用分支

  1. 功能开发: 当你要开发一个新功能时,创建一个新分支。这样,你的更改不会影响主分支。
  2. 修复错误: 对于错误修复,也可以创建一个新分支,然后在修复完成后将其合并回主分支。
  3. 实验: 如果你想试验某些新的想法,你可以创建一个分支,然后如果实验成功,可以合并回主分支;如果实验失败,可以放弃这个分支。

总之,使用分支可以将开发工作隔离开来,直到它们准备好被合并到主线中。


解决 Git 合并冲突

合并冲突通常发生在两个分支中的同一文件的同一位置都有更改,并且 Git 无法确定使用哪个版本。当这种情况发生时,Git 会停止合并并等待用户解决冲突。

识别合并冲突

当尝试合并两个分支并遇到冲突时,Git 会显示如下信息:

Auto-merging [filename]
CONFLICT (content): Merge conflict in [filename]
Automatic merge failed; fix conflicts and then commit the result.

检查冲突的文件

可以使用 git status 命令查看哪些文件包含合并冲突。这些文件会被标记为 "both modified"。

手动解决冲突

打开包含合并冲突的文件,会看到以下形式的标记:

<<<<<<< HEAD
[Your changes]
=======
[Changes from the other branch]
>>>>>>> [commit hash from the other branch]

需要手动编辑这部分内容,选择要保留的更改,并删除不需要的更改和 Git 提供的特殊标记。

提交更改

解决所有冲突后,使用以下命令将解决后的文件添加到暂存区:

git add [filename]

然后,提交解决后的冲突:

git commit

注意:此时,Git 会为提供一个预先填写的提交消息,描述了已解决的合并冲突。

常用参数和命令

  • git mergetool: 如果已经配置了一个外部的合并工具(如 KDiff3、Meld、P4Merge 等),可以使用此命令来帮助解决合并冲突。
  • git log --merge: 查看仅与合并冲突相关的提交。
  • git diff: 查看尚未解决的合并冲突。

Git进阶

1.1 高级分支策略:例如 Git flow 和 GitHub flow
1.2 Git hooks:如何使用 Git hooks 自动化工作流程
1.3 子模块:了解 Git 子模块的概念和用途
1.4 与 CI/CD 集成:如何将 Git 集成到持续集成/持续部署流程中
1.5 使用 Git 进行大型项目管理:最佳实践和策略
1.6 安全性和权限:如何在团队中正确设置 Git 权限以确保代码安全
1.7 进阶 Git 命令和技巧:例如 git rebase, git cherry-pick, 和 git bisect
1.8 Git 与其他版本控制系统的比较:例如 SVN 和 Mercurial
1.9 Git 在大型团队中的最佳实践:了解如何最大限度地提高团队效率