了解Git之前,首先我们要明白Git的作用是什么?

Git和Github的关系

工作区(Working Directory)

  • 定义:工作区就是你在电脑上看到的项目文件夹,即你实际进行文件修改、编辑等操作的地方。例如,你创建了一个名为“my_project”的项目文件夹,在这个文件夹里对文件进行的任何操作,都是在工作区中进行的。
  • 作用:提供一个直观的环境,让开发者能够像处理普通文件一样对项目文件进行操作,为开发者与版本控制系统之间提供了一个交互界面。

暂存区(Index/Stage)

  • 定义:暂存区是一个临时区域,位于工作区和版本库之间。可以把它想象成一个中间过渡地带。当你在工作区修改了文件后,若想将这些修改提交到版本库,首先需要把文件添加到暂存区。例如,使用 git add 命令将文件添加到暂存区。
  • 作用:通过暂存区,开发者可以灵活地将不同的修改组合成有意义的提交,使得版本历史更加清晰和有条理,方便对每次提交的内容进行精准控制。

版本库(Repository)

  • 定义:版本库是Git用来存储项目历史记录和元数据的地方,它包含了项目的所有版本信息。版本库中最重要的部分是对象数据库(Object Database),它以一种高效的方式存储文件的不同版本以及相关的元数据。当你初始化一个新的Git仓库(使用 git init 命令)时,就会在项目目录下创建一个隐藏的 .git 文件夹,这个文件夹就是版本库。
  • 作用:保存项目的完整历史,方便回溯到项目的任何一个历史状态,同时支持多人协作开发时的版本同步和合并。

提交(Commit)

  • 定义:提交是将暂存区的内容作为一个新的版本记录到版本库中的操作。每次提交都有一个唯一的哈希值(类似于 6f4922fbee793a8805c420c97311e799a8117994)来标识,并且可以附带一条提交信息,用于描述本次提交所做的更改。使用 git commit 命令来创建提交。
  • 作用:标志着项目的一个稳定状态,为项目的发展记录下重要的里程碑,方便后续查看和追溯项目的变更历史。

分支(Branch)

  • 定义:分支是一条独立的开发线路,它基于某个提交创建,拥有自己独立的历史记录。在Git中,默认的分支名为 master(在Git 2.28及更高版本中,默认分支名可能是 main)。你可以创建新的分支,例如开发新功能时,为了不影响主分支的稳定性,可以创建一个新的功能分支进行开发。使用 git branch 命令来创建、查看和管理分支。
  • 作用:允许开发者在不影响主代码库的前提下,并行地进行不同功能的开发、试验新想法或修复问题,提高开发效率,降低风险,方便团队协作开发。

HEAD指针

  • 定义:HEAD指针指向当前所在的分支的最新提交,表示当前的工作目录处于该提交的状态。它就像是一个书签,标记着你在版本历史中的当前位置。例如,当你切换分支时,HEAD指针也会相应地移动到新分支的最新提交上。
  • 作用:明确当前工作目录所处的版本位置,使得Git能够知道基于哪个版本进行后续的操作,如继续提交新的更改、切换分支等。

这些是 Git 的常用命令及其用途的简要说明。Git 是一个分布式版本控制系统,广泛用于跟踪代码的变化和协作开发。以下是这些命令的详细解释:

1. Start a Working Area

  • clone: 克隆一个远程仓库到本地,创建一个新的目录并将仓库的所有内容复制到该目录中。
    • 示例:git clone https://github.com/user/repo.git
  • init: 在当前目录初始化一个新的 Git 仓库,或者重新初始化一个已存在的仓库。
    • 示例:git init

2. Work on the Current Change

  • add: 将文件内容添加到暂存区(index),准备提交。
    • 示例:git add file.txt
  • mv: 移动或重命名文件、目录或符号链接。
    • 示例:git mv oldfile.txt newfile.txt
  • restore: 恢复工作区中的文件到某个状态(例如,撤销修改)。
    • 示例:git restore file.txt
  • rm: 从工作区和暂存区中删除文件。
    • 示例:git rm file.txt

3. Examine the History and State

  • bisect: 使用二分查找来定位引入 bug 的提交。
    • 示例:git bisect start
  • diff: 显示不同提交之间、提交与工作区之间的差异。
    • 示例:git diff
  • grep: 在工作区中搜索匹配指定模式的行。
    • 示例:git grep "TODO"
  • log: 显示提交历史。
    • 示例:git log
  • show: 显示某次提交的详细信息。
    • 示例:git show commit_hash
  • status: 显示工作区的状态(例如,哪些文件被修改、暂存等)。
    • 示例:git status

4. Grow, Mark and Tweak Your Common History

  • branch: 列出、创建或删除分支。
    • 示例:git branch new-branch
  • commit: 将暂存区的更改提交到仓库。
    • 示例:git commit -m "Commit message"
  • merge: 将两个或多个开发历史合并到一起。
    • 示例:git merge branch-name
  • rebase: 将当前分支的提交重新应用到另一个分支的顶部。
    • 示例:git rebase main
  • reset: 将当前分支的 HEAD 重置到指定的状态。
    • 示例:git reset --hard commit_hash
  • switch: 切换到另一个分支。
    • 示例:git switch branch-name
  • tag: 创建、列出、删除或验证一个 GPG 签名的标签。
    • 示例:git tag v1.0

5. Collaborate

  • fetch: 从远程仓库下载对象和引用。
    • 示例:git fetch origin
  • pull: 从远程仓库获取并合并到当前分支。
    • 示例:git pull origin main
  • push: 将本地分支的更新推送到远程仓库。
    • 示例:git push origin branch-name

6. Additional Help

  • git help -a: 列出所有可用的 Git 子命令。
  • git help -g: 列出一些常用的 Git 概念指南。

这些命令是 Git 的核心功能,掌握它们可以帮助你有效地管理代码版本和协作开发。如果你需要更详细的帮助,可以使用 git help <command> 来查看特定命令的详细文档。