Git 的正确使用姿势与最佳实践| 青训营

102 阅读2分钟

Git 的正确使用姿势与最佳实践| 青训营

Git 是目前广泛使用的版本控制系统,它提供了许多功能和命令来管理代码的版本历史、协作开发和发布过程。本篇笔记将介绍 Git 的正确使用姿势和最佳实践,帮助开发者更好地利用 Git 进行项目管理和团队协作。

1. 初始化 Git 仓库

在开始一个新项目时,使用 git init 命令初始化一个空的 Git 仓库。这将创建一个隐藏的 .git 目录,用于存储 Git 的版本信息和配置。

$ git init

2. 设置用户信息

Git 中,你可以设置用户信息,包括用户名和邮箱地址,这样每次提交代码时就会将这些信息记录下来。以下是设置用户信息的步骤:

  1. 设置全局用户信息(适用于整个系统): 运行以下命令,将你的用户名和邮箱地址替换成你自己的信息。

    $ git config --global user.name "Your Name"
    $ git config --global user.email "your.email@example.com"
    
  2. 设置仓库级别用户信息(只适用于当前仓库): 如果你想要在当前仓库中使用不同的用户名和邮箱地址,可以进入仓库目录,并运行以下命令:

    $ 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 分支的一些说明:

  1. 主分支(Master/Main):主分支通常是项目的主要分支,包含稳定的、可发布的代码。在此分支上进行的更改应经过严格的测试和审核。
  2. 开发分支(Develop):开发分支是主分支的衍生分支,在其上进行功能开发和日常工作。当功能开发完成、通过测试并准备发布时,将合并到主分支。
  3. 特性分支(Feature):特性分支用于开发单个功能或解决特定问题。每个特性分支都从开发分支分离,完成后会合并回开发分支。
  4. 修复分支(Hotfix):修复分支用于快速修复在主分支中发现的临时错误或漏洞。修复分支从主分支分离,修复后会合并回主分支和开发分支。
  5. 发布分支(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 中,提交代码是将当前的代码更改保存到本地版本库中的过程。下面是提交代码的一般步骤:

  1. 首先,确保你已经在工作目录中进行了所需的更改。
  2. 运行 git status 命令检查工作目录的状态。它会显示已修改但尚未暂存的文件、已暂存但尚未提交的文件,以及其他相关信息。
  3. 使用 git add 命令将要提交的更改添加到暂存区。可以指定具体的文件或目录,也可以使用 . 来添加所有修改。例如:git add file1.txtgit add .
  4. 运行 git commit 命令来提交代码。可以使用 -m 选项加上一条简短的提交消息来描述你的更改。例如:git commit -m "Add new feature"
  5. 如果你想要将提交推送到远程仓库,可以使用 git push 命令。这将把本地的提交推送到与当前分支关联的远程分支上。例如:git push origin master

5. 远程仓库操作

与团队协作时,通常会使用远程仓库来共享代码。以下是几个常用的 Git 远程仓库操作:

  1. git remote add [remote_name] [remote_url]:将一个新的远程仓库添加到本地仓库中。remote_name 是给远程仓库取的名称,remote_url 是远程仓库的 URL。
  2. git remote remove [remote_name]:从本地仓库中移除指定的远程仓库。
  3. git remote rename [old_name] [new_name]:将指定的远程仓库重命名为新的名称。
  4. git remote -v:查看所有远程仓库的详细信息,包括名称和 URL。
  5. git pull [remote_name] [branch_name]:从指定的远程仓库拉取最新的修改,并自动合并到当前分支。
  6. git push [remote_name] [branch_name]:将当前分支的提交推送到指定的远程仓库和分支。
  7. git fetch [remote_name]:从指定的远程仓库获取最新的提交历史,但并不自动合并到本地分支。这个命令可以让你查看远程仓库的更新情况。
  8. git clone [remote_url]:克隆远程仓库到本地,创建一个本地仓库的副本。

6. 版本回退

Git 提供了多种方法来进行版本回退。下面是几个常用的命令和方法:

  1. git log:使用该命令可以查看提交历史记录,包括每个提交对应的 commit ID。

  2. git checkout [commit]:通过指定 commit ID,可以将工作目录切换到该提交对应的版本,回退到指定的提交。例如:git checkout abc, 其中 abc 是要回退到的提交的 commit ID。

  3. git revert [commit]:使用该命令可以创建一个新的提交,来撤销指定的提交。它会保留历史记录,并生成一个新的提交,该提交撤销了指定提交的更改。例如:git revert abc,其中 abc 是要被撤销的提交的 commit ID。

  4. git reset [commit]:使用该命令可以将当前分支的 HEAD 指针移动到指定的提交,并丢弃指定提交之后的所有提交。请注意,使用该命令会改变提交历史,因此在协作开发中需谨慎使用。有三种方式可以使用 git reset 命令来回退版本:--soft--mixed--hard。其中:

    • --soft 选项会保留暂存区和工作目录的修改。
    • --mixed(默认选项)会重置暂存区,但保留工作目录的修改。
    • --hard 会重置暂存区和工作目录,丢弃所有修改。

7. 分享与协作

Git 是一个优秀的版本控制系统,它不仅可以用于个人项目的管理,还可以方便地进行代码分享和团队协作。关于分享与协作有以下几点:

  1. 代码托管平台:将你的代码存储在一个共享的代码托管平台上,如GitHub、GitLab 或 Bitbucket。这些平台提供了强大的协作功能,可以让团队成员轻松地共享代码、提出问题和进行代码审查。
  2. 分支管理:使用 Git 的分支功能,每个人可以在独立的分支上开发和测试功能,而不会影响主分支的稳定性。这样可以允许并行开发,减小冲突的可能性,并更好地管理项目的版本。
  3. Pull Request:在协作开发中,Pull Request 是一种常见的机制,它允许你将自己的修改提交给其他人进行审查和讨论。通过 Pull Request,团队成员可以对代码进行评论、提出建议,并进行必要的更改,最终合并到主分支中。
  4. 代码审查:通过代码审查,可以帮助改善代码质量、发现潜在的问题,并促进团队成员之间的交流和学习。团队成员可以审查他人的代码,并提出建设性的反馈和改进建议。
  5. 提交规范:在团队协作中,遵循统一的提交规范是很重要的。例如,使用良好的提交信息格式、关联问题和任务编号,可以方便地进行代码审查、跟踪和管理。项目中可以制定相应的提交规范,并向团队成员进行培训和指导。
  6. 解决冲突:在并行开发中,可能会出现冲突的情况。当多个人同时修改同一个文件或同一个代码块时,就会发生冲突。解决冲突需要仔细审查和合并代码的不同版本,可以使用 Git 提供的工具来辅助解决冲突。
  7. 定期更新:在团队协作中,定期更新你的本地代码库是很重要的。通过使用 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 进行项目管理和团队协作,提高开发效率和代码质量。