Git 使用教程
Git
Git 是一种分布式版本控制系统,用于管理软件项目的源代码,现在已经成为了现代软件开发领域中最流行的版本控制系统之一。
使用 Git 可以追踪代码的历史修改记录,方便团队协作、代码共享和代码重构。Git 的基本工作流程如下:
- 在开始编写代码之前,首先需要创建一个 Git 仓库(repository),用于存储代码和版本历史记录。
- 在编写代码时,可以通过
git add命令将更改的文件添加到 Git 的暂存区(staging area)中。 - 通过
git commit命令将暂存区中的更改提交到 Git 仓库中,并生成一个新的版本号(commit hash)。 - 如果需要撤销某个提交,可以使用
git revert命令来创建一个新的提交,该提交将会抵消先前的提交效果。 - 如果需要合并不同分支的代码,可以使用
git merge命令进行合并。 - 如果需要查看代码的历史提交记录,可以使用
git log命令来获取详细信息。 - 如果需要将代码推送到远程仓库,可以使用
git push命令将本地代码推送到远程仓库。 - 如果需要从远程仓库中获取代码,可以使用
git pull命令将远程代码拉取到本地。
几个概念:
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
常规操作
Git 配置
安装完 Git 之后,要做的第一件事就是设置用户名和邮件地址。因为每一个 Git 提交都会用的这些信息:
1 | git config # 固定命令,设置 git 相关配置 |
1 | git config --global user.name <用户名> |
配置后,可以运行如下命令查看是否成功:
1 | git config --list |
创建版本库
首先,打开终端或命令行界面,进入要创建版本库的目录下。
接着,使用以下命令初始化一个空的 Git 仓库:
1 | git init |
然后,将需要管理的文件添加到暂存区:
1 | git add <file> |
也可以使用以下命令一次性将所有变更添加到暂存区:
1 | git add . |
接下来,提交暂存区中的变更到本地仓库,并添加一个描述信息:
1 | git commit -m "Initial commit" |
此时,我们就成功创建了一个版本库。可以使用其他 Git 命令来管理它,例如:
git status:查看当前工作区和暂存区的状态。git log:查看提交记录。git branch:管理分支。git remote:管理远程仓库。
版本回退
要将 Git 存储库版本回退,请使用 git reset
命令。如果想要撤销上次提交并返回到上一个提交,则可以使用以下命令:
1 | git reset HEAD~1 |
这将会使 HEAD 指向上一个提交,但不会删除最新的更改。如果希望完全返回到以前的提交并放弃所有更改,则可以添加 --hard 选项:
1 | git reset --hard HEAD~1 |
注意:此操作将会永久删除最新的更改,请谨慎使用。如果您已经将更改推送到远程存储库,则在执行此操作之前应先备份这些更改。
理解工作区与暂存区的区别
Git 有三个主要的工作区域:工作区(working directory)、暂存区(staging area)和版本库(repository)。
工作区是指您电脑文件系统上用于修改文件的目录。在这里,您可以创建、编译和删除文件。
暂存区是一个中间状态,它充当了您提交更改的缓冲区。在 Git 中,您必须明确地将文件添加到暂存区,然后才能将其提交到版本库中。这样做的好处是,您可以对每个更改进行精细控制,并确保只提交需要保存的更改。
版本库包含 Git 存储库的所有历史记录和元数据。它是 Git 存储库的核心组成部分,是由 Git 自动维护的。
简而言之,工作区是正在处理的实际文件,暂存区是下一次提交所需更改的文件列表。它们之间的区别在于,您可以对工作区中的任何文件进行修改,但只有将它们添加到暂存区并将其提交到版本库中,它们才会成为 Git 追踪的部分。
Git 撤销修改和删除文件操作
要撤销对文件的修改,可以使用 git checkout 命令:
1 | git checkout -- <filename> |
此命令将覆盖工作树中指定文件的更改,还原为最近提交或上次检出的状态。
要删除文件并将此更改提交到 Git 存储库中,可以使用 git rm
命令:
1 | git rm <filename> |
这将从工作树和版本历史记录中删除指定的文件。如果只是想从 Git
版本库中删除文件但保留在工作树中,则可以使用 git rm 命令的
-- cached 选项:
1 | git rm --cached <filename> |
这将从版本历史记录中删除指定的文件,但保留在工作树中。
远程仓库
配置SSH公钥
首先,使用 ssh-keygen -t rsa ,连续回车。
cat ~/.ssh/id_rsa.pub,将内容全部复制,找到网页中SSH公钥,全部粘贴。
ssh -T git@gitee.com或ssh -T git@github.com确定配置成功
如何添加远程仓库
要将本地代码库连接到远程仓库,可以使用以下 git 命令:
- 首先,将本地代码库初始化为 Git 仓库(如果尚未完成):
1 | git init |
- 添加远程仓库的 URL,其中
是自定义名称, 是远程仓库的 URL:
1 | git remote add <remote-name> <remote-url> |
- 可以使用以下命令确认远程仓库是否已成功添加:
1 | git remote -v |
此后,就可以使用 git push 命令将代码推送到远程仓库,使用
git pull 命令从远程仓库拉取代码。
如何从远程仓库克隆
要从远程仓库克隆代码到本地,可以使用以下 git 命令:
1 | git clone <remote-url> |
其中,
1 | git clone <remote-url> <directory-name> |
创建与合并分支
创建一个分支可以使用以下命令:
1 | git branch <branch_name> |
这将在当前所在的提交上创建一个名为
要切换到新创建的分支,可以使用以下命令:
1 | git checkout <branch_name> |
创建并立即切换到该分支,可以使用以下命令:
1 | git checkout -b <branch_name> |
合并分支可以使用以下命令:
1 | git merge <branch_name> |
这样,
处理冲突
当两个分支上的代码修改了同一部分,并且尝试将这两个分支合并时,就会发生代码冲突。Git 提供了以下步骤来解决代码冲突:
- 运行
git status命令查看哪些文件包含冲突。 - 编辑有冲突的文件,手动解决文件中的冲突。
- 对编辑后的文件进行
git add,标记为已解决冲突的文件。 - 使用
git commit提交更改,Git 会生成一个合并提交,其中包含各自分支中的更改。
注意:在解决冲突前,最好先备份当前的代码状态,以免不小心破坏代码库。另外,在处理冲突之前,可以通过运行
git diff
命令来查看冲突的源代码,以便更好地理解要解决的问题。
分支管理策略
在 Git 中,常见的分支管理策略包括一下几个方面:
- 主分支:主分支通常是最稳定的分支,用于发布生产版本。在 Git 中,主分支通常是 master 分支或者 main 分支。
- 开发分支:开发分支通常从主分支派生而来,在其上进行新功能或修复错误的开发。在 Git 中,通常使用 develop 分支作为开发分支。
- 特性分支:特性分支是为了开发单独的功能而创建的分支。这些分支通常从开发分支派生而来,并在实现目标后被合并回开发分支。在 Git 中,通常使用 feature/ 分支命名约定来表示特性分支。
- 发布分支:发布分支是用于准备发布版本的本质,通常从主分支派生而来。这些分支应该包含与发布相关的所有更改,并且应该经过全面测试和审核后再合并回主分支。在 Git 中,通常使用 release/ 分支命名约定来表示发布分支。
- 热修复分支:热修复分支通常用于快速修复紧急问题,例如安全漏洞或崩溃。这些分支通常从主分支派生而来,并且只包含必要的更改。在 Git 中,通常使用 hotfix/ 分支命名约定来表示热修复分支。
bug 分支
在 Git 中,通常使用 bug 分支用于修复代码中的错误或缺陷。当发现 bug 时,可以从当前开发分支(如 develop 分支)创建一个 bug 分支,在该分支上进行错误修复。修复完成后,可以将更改提交到 bug 分支,并将其合并回开发分支和主分支。
以下是一个典型的使用 Git bug 分支的流程:
- 从当前开发分支(如 develop 分支)创建一个新的 bug 分支:
1 | git checkout -b bug/fix-xxx |
- 在 bug 分支上进行错误修复,包括必要的测试和代码审查。
- 提交更改并推送到远程仓库:
1 | git add . |
- 将 bug 分支合并回开发分支(如 develop 分支)
1 | git checkout develop |
- 测试修复是否正确,如果一切正常,则将开发分支合并回主分支(如 master 分支)
1 | git checkout master |
多人协作
Git 是一个优秀的多人协作工具,以下是 Git 多人协作的一些最佳实践:
- 使用分支:使用分支可以帮助团队成员在不影响主分支的情况下进行开发和测试,避免代码冲突和错误。建议采用主分支、开发分支、特性分支、发布分支、热修复分支等分支管理策略。
- 提交规范:每次提交代码时应该附加有意义的提交信息,描述本次提交的更改内容和目的。建议采用语义化版本号和提交信息模版等规范,以便更好地记录和追踪代码变更历史。
- 定期合并:团队成员应该定期将自己的分支合并回主分支或者开发分支。这可以避免较大的代码冲突和错误,并且保持代码库的整洁和可维护性。
- 代码审查:通过代码审查可以确保代码的质量和一致性,并且可以识别和纠正潜在的问题和错误。建议采用 pull request 和 code view 等工具和流程,以便团队成员对彼此的代码进行审查和反馈。
- 团队协作:团队成员之间应该保持及时和有效的沟通,贡献技术和经验,并尽可能避免个人行为偏见对项目和团队产生不良影响。
推送分支
在 Git 中,推送分支指将本地的分支提交到远程仓库中,使得其他团队成员可以访问和获取该代码的分支。以下是在 Git 中推送分支的一些常用命令:
- 推送当前分支到远程仓库,并与远程仓库关联:
1 | git push -u origin <branch-name> |
- 推送当前分支到远程仓库,并与远程仓库合并:
1 | git push origin <branch-name> |
- 强制推送当前分支到远程仓库:
1 | git push -f origin <branch-name> |
- 删除远程分支:
1 | git push origin :<branch-name> |
在推送分支时,通常会遇到冲突等问题。如果发生冲突,需要先解决冲突,然后再进行推送。
抓取分支
在 Git 中,抓取分支指从远程仓库拉取最新的代码和分支信息,并在本地创建相应的分支。以下是在 Git 中抓取分支的一些常用命令:
- 拉取所有远程分支并更新本地分支:
1 | git fetch --all |
- 拉取一个特性的远程分支到本地:
1 | git fetch origin <branch-name> |
- 在本地创建基于远程分支的新分支:
1 | git checkout -b <new-branch-anem> origin/<remote-branch-name> |
- 拉取远程分支并自动与本地分支关联:
1 | git checkout --track origin/<remote-branch-name> |
抓取分支时,需要注意避免覆盖当前分支中未提交的更改。如果本地分支和远程分支存在冲突,需要解决冲突后才能将更改合并到本地分支中。
通过抓取分支可以使得开发者获取最新的代码和分支信息,在本地进行代码修改和测试,并将更改推送回远程仓库以进行协作开发。