系列文章目录
Go语言入门指南:基础语法和常用特性解析 | 青训营
高质量编程与性能调优实战 | 青训营
下面是关于 "Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践" 的复习大纲:
@TOC
新手入门全流程
适合没有什么经验,但又想快速上手的同学。如果你自己在迭代开发的过程中,苦于没有好的办法保存自己每一个版本的代码,如果你暂时还不涉及多人协作开发,没有合并多个开发分支并处理冲突的必要。那么接下来的这些步骤将帮助你快速新建一个GitHub代码仓库,并设置免密登录。以下代码在Linux系统下,可以直接复制粘贴到终端中运行。
-
在Github或者Gitee上创建一个账号,在此账号下新建一个Public仓库。完成新建后,点击如下图的绿色按钮,复制代码仓库的https地址,用于下面的
git clone命令git clone https://github.com/YOUR_NAME/YOUR_REPOSITORY.git
-
git clone下载下来的是个空的仓库,现在需要进入这个空仓库中,随便新创建一些文件cd YOUR_REPOSITORY/YOUR_REPOSITORY是仓库名字,上面你自己新建的空仓库的名字touch test.txt在当前路径新建一个待上传的测试文件cp ~/.bashrc .把家目录里的环境变量配置文件复制到现在的位置 -
此时你的仓库中应该会有两个新文件,可以用
git status查看 git 有没有追踪到这两个新添加的文件,红色表示还没有修改还没有被加入git add .将这两个新添加的文件加入到待上传的缓存中git commit -m "备注:针对这次上传做了哪些修改,说明理由和效果"给这次仓库的修改,进行上传之前的备注,注意 -m 参数和 引号是英文输入法的双引号 -
这个时候可能还没有进行账号授权,会提示你
If Author identity unknown
Please tell me who you are
你需要配置一下git的用户邮箱和用户名
git config user.email "XXX@qq.com"git config user.name "XXX" -
完成第四步git的用户邮箱和用户名的配置后,重复执行第3步,将修改添加到缓存中,并对修改添加备注
-
这个时候可以尝试推送本地修改到GitHub仓库了,根据提示,输入自己的用户名和密码(密码可以用token代替)
git pushUsername for 'https://github.com': XXXPassword for 'https://VidyaLee@github.com':ghp_XXX -
如果是自己私人用的电脑,可以设置免密登陆
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 <分支名>: 将指定分支的更改合并到当前分支。这可能会产生一个合并提交,除非进行了快进合并。
何时使用分支
- 功能开发: 当你要开发一个新功能时,创建一个新分支。这样,你的更改不会影响主分支。
- 修复错误: 对于错误修复,也可以创建一个新分支,然后在修复完成后将其合并回主分支。
- 实验: 如果你想试验某些新的想法,你可以创建一个分支,然后如果实验成功,可以合并回主分支;如果实验失败,可以放弃这个分支。
总之,使用分支可以将开发工作隔离开来,直到它们准备好被合并到主线中。
解决 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 在大型团队中的最佳实践:了解如何最大限度地提高团队效率