Git 的正确使用姿势与最佳实践| 青训营
Git 是目前广泛使用的版本控制系统,它提供了许多功能和命令来管理代码的版本历史、协作开发和发布过程。本篇笔记将介绍 Git 的正确使用姿势和最佳实践,帮助开发者更好地利用 Git 进行项目管理和团队协作。
1. 初始化 Git 仓库
在开始一个新项目时,使用 git init 命令初始化一个空的 Git 仓库。这将创建一个隐藏的 .git 目录,用于存储 Git 的版本信息和配置。
$ git init
2. 设置用户信息
Git 中,你可以设置用户信息,包括用户名和邮箱地址,这样每次提交代码时就会将这些信息记录下来。以下是设置用户信息的步骤:
-
设置全局用户信息(适用于整个系统): 运行以下命令,将你的用户名和邮箱地址替换成你自己的信息。
$ git config --global user.name "Your Name" $ git config --global user.email "your.email@example.com" -
设置仓库级别用户信息(只适用于当前仓库): 如果你想要在当前仓库中使用不同的用户名和邮箱地址,可以进入仓库目录,并运行以下命令:
$ git config user.name "Your Name" $ git config user.email "your.email@example.com"
你可以通过运行以下命令来查看当前的用户信息:
$ git config user.name
$ git config user.email
3. Git分支
Git 分支是用于并行开发和管理不同代码版本的重要工具。分支让团队成员可以在独立的开发路径上进行工作,而无需影响主代码库。
下面是关于 Git 分支的一些说明:
- 主分支(Master/Main):主分支通常是项目的主要分支,包含稳定的、可发布的代码。在此分支上进行的更改应经过严格的测试和审核。
- 开发分支(Develop):开发分支是主分支的衍生分支,在其上进行功能开发和日常工作。当功能开发完成、通过测试并准备发布时,将合并到主分支。
- 特性分支(Feature):特性分支用于开发单个功能或解决特定问题。每个特性分支都从开发分支分离,完成后会合并回开发分支。
- 修复分支(Hotfix):修复分支用于快速修复在主分支中发现的临时错误或漏洞。修复分支从主分支分离,修复后会合并回主分支和开发分支。
- 发布分支(Release):发布分支是准备发布新版本时创建的分支。在此分支上进行最终的测试、版本号更新和准备发布。
Git分支中常用指令:
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
4. 提交代码
在 Git 中,提交代码是将当前的代码更改保存到本地版本库中的过程。下面是提交代码的一般步骤:
- 首先,确保你已经在工作目录中进行了所需的更改。
- 运行
git status命令检查工作目录的状态。它会显示已修改但尚未暂存的文件、已暂存但尚未提交的文件,以及其他相关信息。 - 使用
git add命令将要提交的更改添加到暂存区。可以指定具体的文件或目录,也可以使用.来添加所有修改。例如:git add file1.txt或git add .。 - 运行
git commit命令来提交代码。可以使用-m选项加上一条简短的提交消息来描述你的更改。例如:git commit -m "Add new feature"。 - 如果你想要将提交推送到远程仓库,可以使用
git push命令。这将把本地的提交推送到与当前分支关联的远程分支上。例如:git push origin master。
5. 远程仓库操作
与团队协作时,通常会使用远程仓库来共享代码。以下是几个常用的 Git 远程仓库操作:
git remote add [remote_name] [remote_url]:将一个新的远程仓库添加到本地仓库中。remote_name是给远程仓库取的名称,remote_url是远程仓库的 URL。git remote remove [remote_name]:从本地仓库中移除指定的远程仓库。git remote rename [old_name] [new_name]:将指定的远程仓库重命名为新的名称。git remote -v:查看所有远程仓库的详细信息,包括名称和 URL。git pull [remote_name] [branch_name]:从指定的远程仓库拉取最新的修改,并自动合并到当前分支。git push [remote_name] [branch_name]:将当前分支的提交推送到指定的远程仓库和分支。git fetch [remote_name]:从指定的远程仓库获取最新的提交历史,但并不自动合并到本地分支。这个命令可以让你查看远程仓库的更新情况。git clone [remote_url]:克隆远程仓库到本地,创建一个本地仓库的副本。
6. 版本回退
Git 提供了多种方法来进行版本回退。下面是几个常用的命令和方法:
-
git log:使用该命令可以查看提交历史记录,包括每个提交对应的 commit ID。 -
git checkout [commit]:通过指定 commit ID,可以将工作目录切换到该提交对应的版本,回退到指定的提交。例如:git checkout abc, 其中abc是要回退到的提交的 commit ID。 -
git revert [commit]:使用该命令可以创建一个新的提交,来撤销指定的提交。它会保留历史记录,并生成一个新的提交,该提交撤销了指定提交的更改。例如:git revert abc,其中abc是要被撤销的提交的 commit ID。 -
git reset [commit]:使用该命令可以将当前分支的 HEAD 指针移动到指定的提交,并丢弃指定提交之后的所有提交。请注意,使用该命令会改变提交历史,因此在协作开发中需谨慎使用。有三种方式可以使用git reset命令来回退版本:--soft、--mixed和--hard。其中:--soft选项会保留暂存区和工作目录的修改。
--mixed(默认选项)会重置暂存区,但保留工作目录的修改。--hard会重置暂存区和工作目录,丢弃所有修改。
7. 分享与协作
Git 是一个优秀的版本控制系统,它不仅可以用于个人项目的管理,还可以方便地进行代码分享和团队协作。关于分享与协作有以下几点:
- 代码托管平台:将你的代码存储在一个共享的代码托管平台上,如GitHub、GitLab 或 Bitbucket。这些平台提供了强大的协作功能,可以让团队成员轻松地共享代码、提出问题和进行代码审查。
- 分支管理:使用 Git 的分支功能,每个人可以在独立的分支上开发和测试功能,而不会影响主分支的稳定性。这样可以允许并行开发,减小冲突的可能性,并更好地管理项目的版本。
- Pull Request:在协作开发中,Pull Request 是一种常见的机制,它允许你将自己的修改提交给其他人进行审查和讨论。通过 Pull Request,团队成员可以对代码进行评论、提出建议,并进行必要的更改,最终合并到主分支中。
- 代码审查:通过代码审查,可以帮助改善代码质量、发现潜在的问题,并促进团队成员之间的交流和学习。团队成员可以审查他人的代码,并提出建设性的反馈和改进建议。
- 提交规范:在团队协作中,遵循统一的提交规范是很重要的。例如,使用良好的提交信息格式、关联问题和任务编号,可以方便地进行代码审查、跟踪和管理。项目中可以制定相应的提交规范,并向团队成员进行培训和指导。
- 解决冲突:在并行开发中,可能会出现冲突的情况。当多个人同时修改同一个文件或同一个代码块时,就会发生冲突。解决冲突需要仔细审查和合并代码的不同版本,可以使用 Git 提供的工具来辅助解决冲突。
- 定期更新:在团队协作中,定期更新你的本地代码库是很重要的。通过使用
git pull命令从远程仓库拉取最新的修改,可以避免与他人的修改发生冲突,并及时了解到项目的最新状态。
# 克隆远程仓库到本地
$ git clone [repository]
# 从远程仓库拉取最新修改并合并到当前分支
$ git pull
# 将本地的提交推送到远程仓库
$ git push
# 查看分支列表
$ git branch
# 切换到指定分支
$ git checkout [branch]
# 将指定分支的更改合并到当前分支
$ git merge [branch]
# 从远程仓库获取最新提交历史
$ git fetch
# 管理远程仓库
git remote [add|remove|rename]
# 将文件添加到暂存区
$ git add [file]
# 提交暂存区的文件并添加提交信息
$ git commit -m "message"
# 查看提交历史记录
$ git log
# 查看文件的差异和变更内容
$ git diff
# 将当前修改保存为临时工作栈
$ git stash
# 选择某个提交并应用到当前分支上
$ git cherry-pick [commit]
# 将当前分支的提交移动到另一个分支上
$ git rebase
8. 忽略文件
在 Git 中可以使用 .gitignore 文件来指定不希望被版本控制的文件或目录。这对于排除临时文件、编译结果和敏感信息非常有用。
# 所有以.a 结尾的文件讲被忽略(递归)
*.a
# 不管其他规则怎样,强制不忽略 lib.a
!lib.a
# 只忽略 文件 TODO (注意这里是文件)
/TODO
# 忽略 build文件夹下所有内容(递归) 这里是文件夹
build/
# 忽略 doc 目录下以 *.txt 结尾的文件 (不递归)
doc/*.txt
# 忽略 doc 目录下以 *.pdf 结尾的文件 (递归)
doc/**/*.pdf
总结:
本篇笔记介绍了 Git 的正确使用姿势和最佳实践,包括初始化 Git 仓库、设置用户信息、分支管理、提交代码、远程仓库操作、版本回退、分享与协作、忽略文件等方面。通过掌握这些基本概念和操作,开发者可以更好地利用 Git 进行项目管理和团队协作,提高开发效率和代码质量。