Bootstrap

Git入门到精通

一.Git基础知识点

Git 是一种分布式版本控制系统,用于跟踪文件和代码的变化,并协调多个开发人员之间的工作。下面是 Git 的几个基本概念和使用方式:

  1. 代码仓库(Repository):Git 将代码保存在一个名为仓库的结构中。一个仓库可以包含多个文件和文件夹,用于存储项目的代码和文件。

  2. 分支(Branch):Git 允许在仓库中创建多个分支,每个分支都是独立的代码版本。开发人员可以在自己的分支上进行工作,并在需要时将更改合并到主分支(通常是master分支)上。

  3. 提交(Commit):提交是指对仓库的更改的保存。每个提交都有一个唯一的标识符,开发人员可以添加提交信息来描述所做的更改。

  4. 拉取(Pull)和推送(Push):拉取是指从远程仓库获取最新的更改,推送是指将本地仓库的更改推送到远程仓库。

  5. 合并(Merge):合并是将一个分支的更改合并到另一个分支的过程。当开发人员完成一个功能或修复一个 bug 时,通常会将其合并到主分支上。

  6. 克隆(Clone):克隆是指从远程仓库复制整个仓库到本地。使用克隆可以获取远程仓库的代码,并创建一个本地副本进行开发工作。

使用 Git 的方式包括以下几个步骤:

  1. 初始化仓库:通过命令 git init 在本地文件夹中创建一个新的 Git 仓库。

  2. 添加和提交更改:使用命令 git add 将要提交的文件添加到暂存区,然后使用 git commit 提交更改到仓库中。

  3. 创建和切换分支:使用命令 git branchgit checkout 可以创建新的分支并切换到该分支。

  4. 拉取和推送更改:使用命令 git pull 从远程仓库获取最新的更改,使用 git push 将本地仓库的更改推送到远程仓库。

  5. 合并分支:使用命令 git merge 将一个分支的更改合并到另一个分支。

  6. 克隆仓库:使用命令 git clone 克隆一个远程仓库到本地。

这些是 Git 的基本概念和使用方式,通过掌握这些知识,开发人员可以更好地协作和管理代码。

二.Git结构介绍

Git的基本结构主要包括四个部分:工作区(Working Directory)、暂存区(Staging Area)、本地仓库(Repository,也称为版本库)和远程仓库(Remote Repository) 

1. 工作区(Working Directory)

  • 工作区是用户平时编写代码的地方,包含了所有的项目文件。
  • 用户在工作区中对文件进行修改、新增或删除等操作。

2. 暂存区(Staging Area)

  • 暂存区是一个中间区域,用于暂存即将提交到本地仓库的文件。
  • 用户通过git add命令将工作区的修改或新增文件添加到暂存区。

3. 本地仓库(Repository,也称为版本库)

  • 本地仓库是Git用来保存历史修改记录的地方,包含了所有的项目文件及其变化的历史记录。
  • 本地仓库主要分为两个部分:索引(Index)和对象库(Object Database)。
  • 索引(Index):记录暂存区的内容,是分层的,用于构建提交到版本库的快照。
  • 对象库(Object Database):存储所有的文件和变化的历史记录,包括blob(文件内容)、tree(目录结构)、commit(提交记录)和tag(标签)四种类型的对象

4. 远程仓库(Remote Repository)

  • 远程仓库是一个服务器,用于存储用户的各种项目。常见的远程仓库平台有GitHub、GitLab、Gitee等。
  • 用户通过git push命令将本地仓库的修改推送到远程仓库,或通过git pull命令从远程仓库拉取最新的修改。

 三.Git和代码托管中心

1.团队内部协作流程

2.跨团队协作

 

四.Git命令行使用

1. 创建本地Git仓库

mkdir  cs   #创建目录

cd   cs      #进入cs

ll  -a         #查看隐藏的.git的文件

git  init     #初始化git仓库

ll  .git/      #查看.git下的文件列表

cat  .git/config    #查看.git/config文件内容

注意:.git目录是存放本地库相关的目录和文件,不要对其进行修改和操作

2.设置签名

2.1 签名介绍

  • 定义:Git签名本质上是一个用户名和电子邮件地址的组合,用于在Git提交中唯一标识一个用户。
  • 作用
    1. 区分身份:Git签名的主要作用是区分不同开发人员的身份,使得在查看Git提交历史时,能够清楚地知道每次提交是由谁完成的。
    2. 责任追踪:在代码审查或项目维护过程中,如果出现问题,可以通过Git签名快速定位到提交该代码的开发人员,从而进行责任追踪。
    3. 增强安全性:虽然Git签名本身并不直接提供安全性(如加密或验证提交者的身份),但它为后续的安全措施(如GPG签名)提供了基础,有助于增强Git仓库的安全性。
  • 配置文件:Git签名的配置信息会保存在不同的配置文件中,包括仓库级别的.git/config文件、用户级别的~/.gitconfig文件(或系统级别的全局配置文件,具体取决于操作系统和Git的安装方式)。
  • 优先级:如果同时设置了多个级别的签名(如仓库级别和全局级别),Git会按照就近原则选择使用。具体来说,仓库级别的签名优先级高于全局级别的签名。

 2.2 设置签名命令

项目级别(仓库):仅在当前本地库范围有效

git config user.name "zysheep"                          #设置用户名

git config user.email "[email protected]"         #设置邮箱

cat .git/config                                                      #查看git配置,是否有刚才设置的用户和邮箱

系统级别:登录当前操作系统的用户范围

git config --global user.name "zysheep"                     #设置用户名
git config --global user.email "[email protected]"    #设置邮箱

cd ~                                                                            #进入家目录

ls -a | grep "\.gitconfig"                                               #查看是否有.gitconfig的文件

cat .gitconfig                                                               #查看文件内容

在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。

3.常用命令

3.1 初始化仓库

  • git init:在当前目录下创建一个新的Git仓库,并生成.git目录。

3.2 添加文件到暂存区 

  • git add <文件名>:将指定文件添加到暂存区(stage/index),准备提交。
  • git add .:添加当前目录下所有修改过的文件到暂存区。

3.3 提交更改 

  • git commit -m "提交信息":将暂存区的更改提交到仓库中,并附上提交信息。
  • git commit -am "提交信息":将当前目录下的所有更改添加到暂存区并提交,附上提交信息。

3.4 查看状态 

  • git status:查看当前仓库的状态,包括哪些文件已被修改、哪些文件已添加到暂存区等。

3.5 分支管理 

  • git branch <分支名>:创建新分支,但不切换。
  • git checkout -b <分支名>:创建新分支并切换到该分支。
  • git switch <分支名>:切换到指定分支,与git checkout的分支切换功能相同,但更直观。
  • git merge <分支名>:将指定分支的更改合并到当前分支。
  • git branch -d <分支名>:删除已合并的分支。
  • git branch -D <分支名>:强制删除分支,无论是否已分支。

3.6 查看提交历史 

  • git log:查看提交历史记录。
  • git log --pretty=oneline:以一行的方式显示提交历史记录
  • git log --graph:以图形方式显示分支和合并历史。

3.7 远程仓库操作 

  • git clone <仓库地址>:克隆远程仓库到本地。
  • git remote add <远程仓库名> <仓库地址>:添加远程仓库。
  • git fetch <远程仓库名>:从远程仓库获取最新版本,但不自动合并。
  • git pull <远程仓库名> <分支名>:从远程仓库获取最新版本并自动合并到当前分支。
  • git push <远程仓库名> <仓库名>:将本地分支的更改推送到远程仓库

3.8 撤销操作

  • git checkout --<文件名>:撤销工作区的修改,使其与暂存区或HEAD相同。
  • git reset HEAD <文件名>:将暂存区的文件撤销到工作区,但不改变工作区的文件内容。
  • git reset --hard <commit_id>:将当前分支的HEAD指针和暂存区、工作区都回退到指定提交

3.9 其他常用命令 

  • git diff:查看工作区与暂存区、暂存区与HEAD之间的差异。
  • git show <commit_id>:查看指定提交的详细信息。
  • git stash:将当前工作区的更改保存到栈中,以便稍后恢复。
  • git cherry-pick <commit_id>:将制定提交的更改应用到当前分支。

4. 分支文件永久删除后找回

4.1 执行 git reflog 来查找删除操作前的提交哈希值。

git reflog

执行这个命令后,Git 会列出 HEAD 和分支引用的历史记录,包括最近的提交、合并、重置(reset)、检出(checkout)等操作。这个列表会按照时间顺序显示,最新的操作在列表的顶部。 

4.2  当找到正确的提交哈希值时,你可以使用 git checkout 来恢复文件。例如,如果删除文件的提交哈希值是 abcdef,并且你想要恢复的文件是 example.txt

git checkout abcdef -- example.txt 

5. 文件比较

5.1 使用git diff命令

git diff命令是Git中最常用的文件比较命令之一。它可以比较工作目录中的文件与暂存区(staging area)、暂存区与仓库中最新提交(HEAD)、两个不同提交之间、或者两个不同文件之间的差异。

  • 比较工作区与暂存区之间的差异git diff(不指定文件名则比较所有文件)
  • 比较暂存区与最新提交之间的差异git diff --cached 或 git diff --staged
  • 比较两个不同提交之间的差异git diff <commit1> <commit2>
  • 比较两个文件之间的差异git diff <file1> <file2>

通过git diff命令,用户可以看到文件之间的差异,包括哪些行被添加、删除或修改,并且这些差异会以特殊的符号(如+表示新增行,-表示删除行)标记出来。

 5.2 使用git difftool命令

如果用户更喜欢使用图形化界面来比较文件差异,可以使用git difftool命令。这个命令会打开一个外部的比较工具(如Beyond Compare、KDiff3、vimdiff等),并显示两个文件之间的差异。

  • 配置git difftool:首先,用户需要配置一个外部的比较工具。这可以通过git config命令来完成,例如git config --global diff.tool vimdiff
  • 使用git difftool:配置完成后,用户可以使用git difftool <file>git difftool <commit1> <commit2> -- <file>等命令来比较文件差异。

 5.3 使用git show命令

虽然git show命令主要用于显示提交的详细信息,但它也可以用来比较文件在特定提交中的差异。通过指定提交和文件路径,用户可以查看该提交中文件的更改。

  • 示例git show <commit>:<file>

5.4 使用图形化Git客户端 

除了命令行工具外,还有许多图形化的Git客户端(如SourceTree、GitKraken等)提供了文件比较的功能。这些工具通常具有更友好的用户界面和更多的功能,可以方便地比较、合并文件的差异。

5.5 小结

Git的文件比较功能通过git diffgit difftool等命令以及图形化Git客户端提供了多种灵活的方式来比较文件差异。用户可以根据自己的需求选择最适合的方法来查看和理解文件的差异。这些工具在版本控制、代码审查和调试过程中发挥着重要的作用。

五.总结 

在软件开发和版本控制领域,Git无疑是最受欢迎的工具之一。掌握Git不仅能够提高开发效率,还能促进团队协作。从初学者到精通者,对Git常用命令的掌握是一个循序渐进的过程。以上是对Git常用命令学习的总结。

;