Git 全面梳理

92 阅读9分钟

Git 是团队开发项目时必不可少的工具,故在此梳理记录 Git 的常用知识点,以便学习查阅。

一、Git 是什么

Git 是一种分布式版本控制系统,用于跟踪计算机文件的变化并协作多人开发项目。

二、Github 是什么

Github 是一个基于 Web 的 Git 仓库托管服务,为开发者提供了一个平台,使他们能够在云端存储和管理 Git 仓库。此外,类似的代码托管平台还有 GitLab、Gitee 等。

  • 版本控制: GitHub 基于 Git,提供了强大的版本控制功能。开发者可以跟踪项目的变化、管理不同版本的代码,并轻松地回滚到先前的状态。

  • 协作开发: GitHub 允许多个开发者协同工作。通过分支和合并请求,团队成员可以并行地开发不同的功能或修复bug,然后将这些更改合并到主分支中。

  • 代码审查: 合并请求(Pull Requests)是GitHub 中的一个关键概念。开发者可以创建合并请求,邀请其他人对代码进行审查,确保代码质量、可读性和符合项目标准。

  • 开源项目托管: GitHub 为开源项目提供了一个中心化的平台,使得开发者可以分享他们的代码、贡献代码、报告问题,从而推动开源社区的发展。

  • 问题跟踪: GitHub 的问题跟踪系统使团队能够报告、分配和解决问题。这对于跟踪 bug、讨论新功能和管理项目进度非常有帮助。

  • 持续集成和部署: GitHub Actions 允许开发者设置自动化流程,例如在代码提交后运行测试、构建项目或部署应用程序。这有助于确保每个更改都经过了自动化测试,并且可以顺利地集成到项目中。

  • 社交互动: 用户可以关注其他用户、星标仓库以及参与讨论,使 GitHub 成为一个社交平台。许多课程、教程和教学资源都托管在 GitHub 上,使学生和教师能够方便地共享代码和学习材料。

三、Git 如何使用

(1)Git 工作原理

cac548384b795b60d0bf87052ab543a5_0.jpg

初始化本地 Git 仓库之后,会生成一个 .git 的隐藏文件夹,用来存储 Git 仓库的所有信息。

  • 工作区(Working Directory):

    工作区是在计算机上看到的目录,包含项目的实际文件,不包括隐藏文件夹 .git。

a7f3774ab121df9dccbff3572a86dbc0_af51dee8a65d4fa18501b8471d3e644e.png

  • 暂存区(Staging Area):

    暂存区是一个中间区域,用于存放已经修改过的文件。在提交到本地仓库之前,需要通过 git add 命令将文件的更改添加到暂存区。这样可以选择性地将文件的更改纳入下一次的提交中。也叫 index,在隐藏文件夹 .git 中。

98e44261734bbdb62805634f3b81e95c_fa2553f0bfa24ca785229c8df784ec0d.png

  • 本地仓库(Local Repository):

    本地仓库是存储在计算机上的 Git 仓库。它包含了完整的项目历史记录,包括所有的分支、提交、标签等。当运行 git commit 命令时,将会把暂存区的更改保存到本地仓库。.git 文件夹存储 Git 仓库的所有信息。

658781fe69e149d075fbb19b96303b89_31c777063fdc40a38c477921f887c549.png

  • 远程仓库(Remote Repository):

    远程仓库是托管在网络上的 Git 仓库,如 GitHub、GitLab 或 Bitbucket 等。远程仓库可以是个人的,也可以是团队共享的。可以通过 git push 将本地仓库的更改推送到远程仓库,并通过 git pull 拉取远程仓库的更改。

GL3F`}T7P3OC5H%H7ZUA5G0.png

  • 分支(Branch):

    分支(Branch)是指指向某个特定提交的指针,它允许你在项目中的不同版本之间切换。每个分支都是一个独立的开发线,你可以在不影响主干(通常是master分支)的情况下进行开发、测试和实验。分支的使用使得多人协作和并行开发变得更为灵活。

(2)基本命令

  • 初始化仓库:

    git init: 在当前目录初始化一个新的 Git 仓库。

  • 克隆仓库:

    git clone <仓库URL>: 克隆远程仓库到本地。

  • 配置用户信息:

    git config --global user.name "Your Name": 配置用户姓名。

    git config --global user.email "you@example.com": 配置用户邮箱。

  • 添加文件到暂存区:

    git add <文件名>: 将文件的更改添加到暂存区。

    git add .: 将所有修改添加到暂存区。

  • 提交更改到本地仓库:

    git commit -m "Commit message": 将暂存区的更改提交到本地仓库。

  • 查看状态和差异:

    git status: 查看工作区、暂存区和本地仓库的状态。

    git diff: 查看工作区和暂存区的差异。

  • 查看提交历史:

    git log: 查看提交历史记录。

  • 创建分支:

    git branch <branch_name>: 创建一个新的分支。

    git checkout -b <branch_name>: 创建并切换到一个新的分支。

  • 切换分支:

    git checkout <branch_name>: 切换到指定分支。

  • 合并分支:

    git merge <branch_name>: 将指定分支的更改合并到当前分支。

  • 删除分支:

    git branch -d <branch_name>: 删除指定分支。

  • 远程操作:

    git remote -v: 查看远程仓库的信息。

    git remote add <remote_name> <remote_url>: 添加远程仓库地址,在推送和拉取时,可以使用短名称来引用远程仓库的地址

    git push origin <branch_name>: 推送本地分支到远程仓库。

    git pull origin <branch_name>: 拉取远程仓库的更改。

  • 撤销操作:

    git restore <文件名>: 将工作区中指定文件的更改还原为最近一次提交时的状态.

    git restore --staged <文件名>: 将暂存区中指定文件的更改还原到工作区,并保持工作区中的文件不变。

    git reset <commit>: 撤销到指定的提交。

    git revert <commit>: 撤销指定的提交,生成一个新的提交。

  • 其他:

    gitignore: 创建并配置.gitignore文件,用于忽略特定文件和目录。

    git fetch: 拉取远程仓库的变化,但不合并。

20231115233244.png

四. 基本工作流程:

  • 创建仓库,并连接本地 Git 与 GitHub

  1. 在GitHub上创建仓库:

    • 打开 GitHub,登录你的账户。
    • 在右上角,点击加号图标,选择 "New repository"。
    • 设置仓库的名称、描述、公开/私有等选项,并点击 "Create repository"。
  2. 在本地初始化Git仓库:

    • 打开命令行或终端。
    • 进入你的本地项目目录。
      git init
      
    • 运行 git init 命令,初始化本地 Git 仓库之后,会生成一个 .git 的隐藏文件夹,用来存储 Git 仓库的所有信息。
  3. 将本地仓库与远程仓库关联:

    • 在 GitHub 上的仓库页面中,复制远程仓库的URL。

    • 在本地项目目录中运行以下命令,将本地仓库与远程仓库关联:

      git remote add origin <远程仓库的URL>
      
    • 这里的 <远程仓库的URL> 应该替换为你实际的远程仓库 URL。

  4. 将本地分支与远程分支关联:

    • 在本地项目目录中运行以下命令,将本地分支与远程分支关联(通常是主分支):

      git branch -M main
      git push -u origin main
      
    • 这里的 main 应该替换为你实际的分支名。

  5. 推送本地代码到远程仓库:

    • 在本地项目目录中进行一些修改,然后使用以下命令将这些更改推送到 GitHub:

      git add . # 提交所有文件至暂存区
      git commit -m "Initial commit"  # 提交第一次修改
      git push -u origin main #远程仓库的main分支
      
    • 把本地的更改推送到在 GitHub 上创建的仓库中。

现在,本地 Git 仓库就与 GitHub 远程仓库连接起来了。以后可以使用 git push 将本地更改推送到 GitHub,使用 git pull 拉取 GitHub 上的更改。

  • 克隆他人或团队的仓库,并进行提交

  1. Fork GitHub 仓库:

    • 打开 GitHub 上的原始项目页面。
    • 点击页面右上角的 "Fork" 按钮,这将创建一个独立的仓库,并将原始项目的代码库复制到你的 GitHub 账户下。
  2. 在本地选择克隆位置:

    • 在本地决定克隆仓库的位置。在命令行中使用 cd 命令切换到你想要放置仓库的目录。
  3. 执行克隆命令:

    • 获取仓库URL:

      image.png

      git clone <仓库URL>
      
    • 或者如果你想要在克隆的同时指定一个本地目录的名称:

        git clone <仓库URL> <本地目录名称>
      
  4. 输入凭据信息(如果需要):

    • 如果远程仓库是私有的,你可能需要输入你的用户名和密码,或者使用SSH密钥进行身份验证。
  5. 等待克隆完成:

    • Git 会下载远程仓库的所有文件和版本历史,并在本地创建一个与远程仓库相同的仓库。
  6. 修改、提交和拉取:

    • 克隆完成后,你就可以在本地对仓库进行修改、提交和拉取等操作。
    • 分割多个 Commit 可以使版本控制历史更加清晰,每个 Commit 只关注一个特定的功能或修改。通常会进行多次 Commit,然后创建一个 Pull Request 将这一系列的 Commits 合并到原始仓库。
    • 通过 git pull 命令,可以随时获取远程仓库的最新更改。
  7. Pull Request:

    • 通知 GitHub 源仓库(原始项目)你已经在你的 forked 仓库中做了一些更改,请求将这些更改合并到源仓库的操作。

image.png

  • 解决冲突

代码冲突(Merge Conflict)通常发生在多个开发者或团队成员同时修改同一文件的同一部分,而这些修改无法被自动合并时。

  1. 检测冲突: 尝试合并分支或拉取远程更改时,如果发生冲突,Git 会将冲突的文件标记为冲突状态。可以使用以下命令检查冲突:

    git status
    
  2. 打开冲突文件: 在文件中,Git 会用特殊标记标识冲突的部分。标记通常是这样的:

    <<<<<<< HEAD
    // 你的修改
    =======
    // 对方的修改
    >>>>>>> branch-name
    
  3. 解决冲突: 手动编辑文件以解决冲突。你需要决定保留哪个修改,或者可能将两者结合在一起。删除特殊标记并保留你需要的修改。编辑完成后,文件应该不再包含特殊标记。

  4. 标记为已解决: 使用以下命令将文件标记为已解决冲突:

    git add <冲突文件>
    
  5. 完成合并: 如果有多个冲突文件,解决完所有冲突后,使用 git commit 完成合并提交。

    git commit -m "解决冲突"
    
  6. 继续合并或推送: 如果你是在合并分支,你可能需要继续合并操作。如果你是在拉取远程更改,可以继续尝试 git pullgit push

五. GitHub 的基本功能

  • 新建仓库: 设置名称,公有私有,readme 等。

3_PF{2J84WT6$9BC_1_Q_2L.png

  • PR: 请求将更改合并到源仓库,可以审查所有历史提交和代码。

%`VIN(@SDFWIV))F3168_75.png

  • Issues: 一个“issue”通常代表项目中的一个具体任务、bug、新功能请求或其他需要讨论和解决的事项。每个问题都有一个独一无二的编号,可以分配给特定的团队成员,并分配一个标签以表示其类型(如bug、enhancement等)。

B(YQ~F7~((FJ(5EDUXB0C`B.png

六. IDEA 中的 Git

许多 IDE 集成了 Git,可以直接使用图形化方式进行 Git 操作,而无需使用 Git 命令。

  • 查看每行代码的作者:

    • 右键点击Annotate

MP6W$S7O8IX2PE_QKH{A$`D.png

  • 提交修改:

    1. 在暂存区选择要提交的修改

    image.png

    MKK4JXRQEGWD{EE7YR6X1.png

    1. 提交commit

    YF99A)OSY_RZ{9R(PA991J.png

    1. push 推送

P{MMT1RD{J_ZRYG0_NM1TE.png