第六届字节跳动青训营第四课 | 青训营

32 阅读5分钟

Git概述

Git是一种比较优秀的分布式版本控制系统,它主要为了管理代码和协作开发,支持多人协同、文件跟踪、恢复代码版本。

基本应用

  1. 创建和使用Git仓库

在团队中协作之前,需要创建一个Git仓库。可以使用以下命令在本地创建一个新的Git仓库:

 

复制

创建一个新的Git仓库

git init

  1. 克隆已有的Git仓库

如果想要在本地拥有一个已有的Git仓库的副本,可以使用以下命令克隆仓库:

 

复制

克隆一个已有的Git仓库

git clone <repository_url>

  1. 添加和提交代码

在本地进行更改时,需要将这些更改添加到Git仓库中,并提交更改。以下是添加和提交代码的步骤:

 

复制

添加文件到Git仓库

git add

提交更改并添加提交信息

git commit -m "Commit message"

  1. 推送代码到远程仓库

当完成本地更改并提交后,可以将更改推送到远程仓库,以便其他团队成员可以获取最新的代码。以下是推送代码到远程仓库的步骤:

 

复制

将本地更改推送到远程仓库

git push origin <branch_name>

  1. 拉取远程仓库的更改

当其他团队成员将更改推送到远程仓库时,需要从远程仓库拉取最新的代码。以下是拉取远程仓库的步骤:

 

复制

从远程仓库拉取最新的代码

git pull origin <branch_name>

  1. 解决合并冲突

当多个团队成员在同一代码上进行更改时,可能会出现合并冲突。Git无法自动解决这些冲突,需要手动解决。以下是解决合并冲突的步骤:

 

复制

解决冲突并添加解决后的文件到Git仓库

git add conflict_file.txt

git commit -m "Resolved conflicts"

高级应用

Git除了基本操作以外,我们能够用它进行更高阶的操作。比如:合并分支、冲突解决等

 

  1. 冲突解决

当两个分支上的代码在同一位置进行修改时,Git无法自动解决冲突。在这种情况下,需要手动解决冲突。以下是解决冲突的步骤:

 

复制

切换到主分支

git checkout master

合并分支

git merge feature-branch

解决冲突

git add conflict_file.txt

提交解决后的冲突

git commit -m "Resolved conflicts"

  1. 策略性合并

可以使用策略性合并来保留特定分支上的更改。例如,可以使用ours策略保留主分支上的更改,使用theirs策略保留特性分支上的更改。以下是使用策略性合并的步骤:

 

复制

切换到主分支

git checkout master

保留主分支的更改

git merge feature-branch -X ours

保留特性分支的更改

git merge feature-branch -X theirs

  1. 交互式合并

交互式合并允许在合并过程中选择特定的更改。这在需要保留某些更改而不是整个提交时非常有用。以下是使用交互式合并的步骤:

 

复制

切换到主分支

git checkout master

交互式合并

git merge feature-branch --interactive

选择要保留的更改

git commit --amend

  1. 提交变基

提交变基是一种将多个提交合并到一个提交中的技术。这在清理历史记录或确保代码库的一致性时非常有用。以下是使用提交变基的步骤:

 

复制

切换到要变基的分支

git checkout feature-branch

提交变基

git rebase master

  1. 分支合并后的重置

有时,可能需要将分支与主分支保持同步,并将更改应用到特定分支上。这可以通过使用git reset命令实现。以下是使用git reset进行重置的步骤:

 

复制

切换到要重置的分支

git checkout feature-branch

重置到主分支的最新状态

git reset --hard master

团队协作和版本控制

使用Gitflow工作流程:

Gitflow是一种使用Git进行版本控制的工作流程,它定义了如何使用分支进行开发、发布和维护。它包括特性分支、发布分支和主分支等。以下是在Git中使用Gitflow工作流程的命令:

 

复制

创建新的特性分支

git checkout -b <feature_branch_name>

提交更改并添加提交信息

git commit -m "Commit message"

将特性分支上的更改合并到主分支

git checkout main

git merge <feature_branch_name>

创建新的发布分支

git checkout -b <release_branch_name>

在发布分支上进行必要的更改和测试

将发布分支上的更改合并到主分支

git checkout main

git merge <release_branch_name>

创建新的hotfix分支

git checkout -b <hotfix_branch_name>

在hotfix分支上进行必要的修复和测试

将hotfix分支上的更改合并到主分支

git checkout main

git merge <hotfix_branch_name>

使用Git钩子:

Git钩子是一种在特定事件发生时自动执行脚本的机制。例如,可以在提交之前运行代码质量检查脚本,或在推送之前验证代码。以下是在Git中创建和使用Git钩子的步骤:

 

复制

在Git仓库的hooks目录中找到需要创建钩子的文件(例如,post-commit)

创建一个新的Python脚本(例如,post-commit.py)

echo 'print("Post commit hook executed.")' > .git/hooks/post-commit.py

设置脚本执行权限

chmod +x .git/hooks/post-commit.py

使用Git子模块:

当一个项目依赖于其他项目时,可以使用Git子模块将其他项目作为一个子目录包含在当前项目中。这样,每个项目都可以独立地进行版本控制。以下是在Git中创建和使用Git子模块的步骤:

 

复制

在当前Git仓库中添加子模块

git submodule add <repository_url> <path/to/submodule>

初始化子模块

git submodule init

拉取子模块的更改

git submodule update --remote <path/to/submodule>