当前位置:   article > 正文

我看谁还敢说不懂git_暂存区是工作区到仓库区的缓冲

暂存区是工作区到仓库区的缓冲

公众号:MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。

一、Git介绍

1.1、Git的作用

Git 是一个开源的分布式版本控制系统,用于管理一个或多个文件的整个历史记录。它有助于跟踪文件的变化,同时让多个开发者对同一个文件做出更改,并帮助开发者们在不同时间点进行历史查阅和版本比较。

1.2、Git的理念

Git 拥有一个独特的理念,即分布式版本控制系统。它采用客户端-服务器模式,将文件、数据和代码以分布式仓库的形式保存在不同的服务器上,以便用户进行版本控制、代码管理和共享。 Git 的分布式版本控制系统可以更快地处理版本控制任务,比传统的集中式版本控制系统更安全、更可靠、更高效。

1.3、Git的特点
  1. 分布式:每个开发者都拥有完整的代码库,可以离线工作,不需要依赖中央服务器。
  2. 非线性开发:可以创建多个分支,并行开发多个功能,通过合并分支进行代码整合。
  3. 高效性:Git 的设计可以快速地进行代码比较和合并,使得开发者可以快速迭代。
  4. 安全性:Git 使用 SHA-1 散列值来保证代码的完整性,具有防篡改的能力。
  5. 易于学习和使用:Git 的命令行操作简单,且有大量的可视化工具和第三方工具支持。
  6. 开放源代码:Git 是自由软件,任何人都可以自由地使用、修改和分发它。
  7. 大规模协作:Git 可以支持上千人同时协作开发同一项目,通过不同分支的合并和冲突解决保证项目的稳定性和质量。
1.4、Git对比SVN

Git 和 SVN 都是版本控制系统,用来管理软件开发过程中的源代码。它们具有一些相似的功能,但是也有一些显著的不同。

Git 是分布式版本控制系统,每个人都可以拥有 Git 仓库的完整拷贝,可以将代码更改推送给其他人,而不用依赖中央服务器。这使得 Git 具有更强大的灵活性,尤其是对于跨越多个组织的团队来说,它可以更快地提交和合并代码。

Git 具有更快的性能,因为它包含一个高效的文件夹索引系统,只跟踪文件本身的变化,而不是整个文件夹。Git 还支持分支,可以轻松地创建许多不同的分支,并利用它们来实现快速发布和实验。

SVN 是集中式版本控制系统,它的工作流程需要一个中央服务器来存储所有的文件及其更改。这使得 SVN 在管理大型团队的源代码时比较方便,因为它提供了一个共享的仓库,每个人都可以从中获取最新的代码。SVN 的另一个优点是,它支持自动合并所有变更,这样可以很容易地将多个开发者的更改合并到一起,而不会出现冲突。另外,SVN 可以跨多个操作系统使用,可以管理任何文件类型。

总的来说,Git 和 SVN 都是强大的版本控制系统,但各有优势。Git 更适合多个组织的团队,以及需要快速发布和实验的项目,而 SVN 则更适合大型团队,并且可以跨多个操作系统使用。

目前从应用和发展的广度来说,Git已经渐渐地在取代SVN的市场份额,所以可以说Git是必学的。

二、Git的概念

2.1、Git基础概念

想要使用Git需要先掌握Git的一些基础概念,更好地理解Git。

  1. 仓库(Repository):仓库是 Git 中最重要的概念之一,它是用来存储项目代码的地方。所有的修改记录都保存在仓库中,包括提交的代码历史、分支信息、标签等。当我们将修改记录提交到仓库后,它们就会成为代码的一部分。
  2. 提交(Commit):Git 中的提交是指将文件或代码变更记录下来,并且提交一个说明(commit message)。
  3. 分支(Branch):Git 中的分支是指代码版本的不同分支。可以创建新的分支来尝试新的代码,而不会影响到主分支。
  4. 合并(Merge):Git 中的合并是指将一个分支中的代码合并到另一个分支中。
  5. 拉取(Pull):Git 中的拉取是指将远程仓库中的代码更新到本地仓库中。
  6. 推送(Push):Git 中的推送是指将本地仓库中的代码更新到远程仓库中。
  7. 标签(Tag):Git 中的标签是指给某一个特定的提交打上一个标签,用于区分这个提交与其他提交的不同。
  8. 工作区(Working Directory):工作区是指项目代码所在的目录,也就是我们平时编辑和修改代码的地方,在工作区中,我们可以创建、修改和删除文件等。
  9. 暂存区(Staging Area):暂存区是介于工作区和仓库之间的一个缓冲区域。在提交代码之前,我们需要将修改过的文件添加到暂存区中。暂存区中保存了待提交的修改记录,包括哪些文件被修改了,修改了哪些部分,但还没有真正提交到仓库。

可以用下面的图来更好地理解这三个概念之间的关系:

         git add              git commit
工作区 --------------> 暂存区 --------------> 仓库
  • 1
  • 2

简单来说,我们在工作区中修改代码后,通过 git add 命令将修改的文件添加到暂存区,然后通过 git commit 命令将暂存区中的修改记录提交到仓库中。在提交之前,我们可以通过 git status 命令来查看工作区和暂存区的状态,以及哪些文件被修改过、添加到了暂存区等信息。

三、Git的基本操作

3.1、使用Git管理一个代码仓库的流程
  1. 初始化仓库:使用 git init 命令在本地创建一个新的 Git 仓库。
  2. 添加文件:将项目文件添加到仓库中,使用 git add 命令将修改后的文件添加到 Git 的暂存区中。
  3. 提交代码:使用 git commit 命令提交修改记录到 Git 仓库中。每次提交需要添加一条注释,简要描述修改了哪些内容。
  4. 创建分支:使用 git branch 命令创建一个新的分支,并切换到该分支。这个分支可以用于开发新的功能或修复错误,不会影响主分支(通常为 master)的代码。
  5. 合并分支:在开发新功能或修复错误后,需要将分支合并到主分支上,使用 git merge 命令将分支合并到主分支上。
  6. 拉取代码:在多人协作开发中,需要将远程仓库中的代码拉取到本地进行开发。使用 git pull 命令将远程仓库中的代码更新到本地仓库中。
  7. 推送代码:在完成开发并且测试通过后,需要将修改的代码推送到远程仓库中。使用 git push 命令将本地仓库中的代码更新到远程仓库中。
  8. 标记版本:当完成一个里程碑或者发布一个版本时,可以使用 git tag 命令创建一个新的标签,用于标记当前的版本号。
3.2、Git常用命令介绍

Git 是一个强大的版本控制工具,提供了众多命令来管理代码仓库,以下是一些常用的 Git 命令介绍:

  1. git init:初始化一个新的 Git 仓库。
  2. git add:将文件或目录添加到 Git 的暂存区中。
  3. git commit:将暂存区的修改记录提交到 Git 仓库中。
  4. git clone:从远程 Git 仓库中克隆一个副本到本地。
  5. git status:查看当前 Git 仓库的状态,包括哪些文件被修改过、添加到了暂存区等信息。
  6. git log:查看 Git 仓库中的提交历史记录,包括每个提交的作者、时间、注释等信息。
  7. git branch:查看 Git 仓库中的分支信息,并可以创建、删除、重命名等操作。
  8. git merge:将一个分支的修改合并到当前分支中。
  9. git pull:从远程 Git 仓库中拉取最新的代码到本地仓库中。
  10. git push:将本地 Git 仓库中的修改推送到远程 Git 仓库中。
  11. git checkout:切换到指定分支或提交。
  12. git tag:为当前的提交打上一个标签,用于标识当前版本。
  13. git remote:管理与远程仓库的连接,可以添加、删除、重命名等操作。
  14. git diff:查看当前修改和之前提交的版本之间的差异。

这些命令只是 Git 提供的众多命令中的一部分,可以根据具体需求进行选择和使用。同时,可以通过 git --help 命令查看 Git 的帮助文档,以获得更多的信息和帮助。

四、Git状态的变化

在Git中,有三个主要的概念:工作区、暂存区和仓库。它们分别代表了不同的状态,可以通过Git命令进行变化。

  1. 工作区(Working Directory):指的是你在本地电脑上实际修改的文件。当你修改了文件,但没有执行Git命令时,这些文件的状态就是“未跟踪”或“已修改”。
  2. 暂存区(Staging Area):也称为索引(Index),是一个临时的存储区域,用于存储即将被提交到Git仓库的文件。当你执行git add命令时,修改的文件会被添加到暂存区,此时这些文件的状态为“已暂存”。
  3. 仓库(Repository):也称为版本库,是Git用来存储历史提交记录的地方。当你执行git commit命令时,暂存区中的文件会被提交到仓库中,此时这些文件的状态为“已提交”。

下面是这些状态如何相互转换的说明:

  • 将修改的文件添加到暂存区:git add <file>,此时文件的状态由“未跟踪”或“已修改”变为“已暂存”;
  • 将暂存区的文件提交到仓库:git commit -m "commit message",此时文件的状态由“已暂存”变为“已提交”;
  • 查看文件状态:git status,此命令可以查看工作区、暂存区和仓库中文件的状态;
  • 撤销暂存区的修改:git reset <file>,此命令可以将暂存区的文件恢复为未暂存的状态;
  • 撤销工作区的修改:git checkout -- <file>,此命令可以将工作区的文件恢复到上次提交的状态;
  • 恢复仓库中的文件:git checkout <commit> <file>,此命令可以将指定提交中的文件恢复到当前分支上。

需要注意的是,上述命令在执行时需要指定对应的文件或提交。同时,这些命令还有更多的选项和参数可以使用,可以通过git help命令来查看Git的文档。

五、Git安装和配置

5.1、Git的安装

Windows和Mac下都有直接图形界面的安装方式,非常简单,不再赘述,主要讲讲Linux下的安装方式。

在Linux下安装Git需要先安装必要的依赖:

  • Centos/RedHat

    $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    
    • 1
  • Debian/Ubuntu

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
  • 1

下载最新版Git进行安装

$ tar -zxf git-2.39.2.tar.gz
$ cd git-2.39.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
  • 1
  • 2
  • 3
  • 4
5.2、Git的配置

git提供了git config命令用于配置或读取相应的工作环境变量,其主要配置文件分为三层,从上到下分别是:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • .git/config文件:仅针对当前项目有效,.git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

最重要的配置就是配置用户名和电子邮件,使用以下命令即可:

$ git config --global user.name "lucas"
$ git config --global user.email lucas@foxmail.com
  • 1
  • 2

如果想要查看已有配置信息,可以使用以下命令:

$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/install/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.name=lucas
user.email=lucas@foxmail.com
......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

六、Git的高级操作

6.1、.gitignore文件的使用

在使用 Git 管理代码仓库时,有些文件或目录不应该被 Git 进行版本控制,例如编译输出文件、日志文件等。这时可以使用 .gitignore 文件来告诉 Git 忽略这些文件或目录。

.gitignore 文件是一个文本文件,列出了 Git 应该忽略的文件或目录的规则。每一行规则都是一个模式,可以包含通配符、反斜线等符号,表示需要忽略的文件或目录的名称或路径。例如:

# 忽略所有 .txt 文件
*.txt

# 忽略 build 目录及其下的所有内容
/build/

# 忽略指定的文件
example.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上述例子中,第一行规则使用了通配符 * 来匹配所有 .txt 结尾的文件;第二行规则使用了反斜线 / 来指定需要忽略的目录 build,并在末尾加上了斜线 / 来表示忽略该目录下的所有内容;第三行规则指定了需要忽略的文件名 example.log

.gitignore 文件可以放置在代码仓库的任何级别上,从仓库根目录到任意子目录都可以。一般建议将其放置在代码仓库的根目录下,以便更方便地管理和维护。

需要注意的是,如果在 .gitignore 文件中忽略了某个文件或目录,那么 Git 将不会对其进行版本控制,也不会将其包含在提交中,因此需要确保 .gitignore 文件中的规则正确地列出了需要忽略的文件或目录。

6.2、git diff的使用

git diff 是一个常用的 Git 命令,用于比较 Git 仓库中的不同版本之间的差异。它可以用于比较两个提交之间的差异,或比较工作目录中的文件与暂存区或最新提交之间的差异。

下面是 git diff 命令的一些常见用法:

  1. 比较工作目录中的文件与最新提交之间的差异:
git diff
  • 1
  1. 比较工作目录中的文件与暂存区之间的差异:
git diff --cached
  • 1
  1. 比较两个提交之间的差异:
git diff <commit1> <commit2>
  • 1

其中 <commit1><commit2> 分别是要比较的两个提交的 SHA-1 标识符,可以使用提交的短标识符或分支名代替。

  1. 比较指定文件或目录的差异:
git diff <commit1> <commit2> <file>
  • 1

其中 <file> 可以是文件或目录的路径,可以只比较某个文件或目录的差异。

  1. 比较两个分支之间的差异:
git diff <branch1>..<branch2>
  • 1

其中 <branch1><branch2> 分别是要比较的两个分支的名称,可以使用分支的短名称或完整名称代替。

以上是 git diff 命令的一些常见用法,使用这些命令可以帮助开发者比较不同版本之间的差异,从而更好地管理代码仓库。

6.3、git如何处理代码冲突

在多人协作开发时,经常会出现代码冲突的情况。当两个或多个开发者同时修改同一个文件的同一部分时,就会发生冲突。Git 提供了一些命令和工具来帮助开发者处理代码冲突,下面是处理代码冲突的一般步骤:

6.3.1、更新本地代码库

在处理代码冲突之前,需要先更新本地代码库。使用 git pull 命令从远程仓库获取最新的代码。

6.3.2、查找冲突

在更新代码库之后,如果有冲突,使用 git status 命令查看冲突文件的状态,冲突文件的状态为 both modified

6.3.3、手动解决冲突

手动编辑冲突文件,将冲突部分保留下来,删除其他部分。可以使用编辑器或其他工具来帮助解决冲突。

6.3.4、添加解决后的文件

在解决冲突之后,使用 git add 命令将解决后的文件添加到暂存区。

6.3.5、提交解决后的文件

在将解决后的文件添加到暂存区后,使用 git commit 命令提交修改。

如果在解决冲突的过程中遇到问题或错误,可以使用 git merge --abort 命令取消合并操作,返回到合并前的状态。

需要注意的是,在多人协作开发时,最好避免同时修改同一个文件的同一部分,可以通过拆分任务、分工协作等方式来避免冲突的发生。此外,在处理冲突时,需要保持沟通和协作,及时解决问题。

6.4、git merge合并代码

Git merge是将两个或多个分支的代码合并到一个分支中的操作。在合并过程中,Git会自动尝试将两个分支的代码进行比较和合并,以生成一个新的合并提交。

以下是使用Git merge合并代码的一些步骤:

  1. 确保你已经切换到需要合并到的目标分支,例如master分支:git checkout master
  2. 运行merge命令来将目标分支与要合并的分支进行合并:git merge <branch-name>
  3. Git会尝试自动合并分支的代码。如果Git遇到了冲突,它会提示你手动解决冲突。你需要手动编辑有冲突的文件,以解决冲突。
  4. 如果合并成功,Git会生成一个新的合并提交。在这个提交消息中,Git会包含有关合并的信息,如何合并的分支等等。
  5. 最后,使用git push命令将合并的代码推送到远程仓库。

注意:在进行合并操作之前,建议先从远程仓库获取最新的代码并将其合并到本地分支。这样可以避免不必要的冲突和合并问题。

6.5、git 代码回退

在Git中,可以使用多种方法回退代码,包括撤销工作区的修改、恢复指定版本的代码等。下面介绍一些常用的回退代码的方法:

  1. 撤销工作区的修改:git checkout -- <file>,此命令可以将工作区的文件恢复到上次提交的状态。如果你已经使用git add将修改的文件添加到暂存区,但还没有提交,可以使用git reset HEAD <file>来撤销暂存区的修改。
  2. 恢复指定版本的代码:git checkout <commit> <file>,此命令可以将指定提交中的文件恢复到当前分支上。你可以使用git log命令来查看提交历史记录,并选择需要恢复的版本。如果你想恢复到某个历史提交的状态,可以使用git checkout <commit>命令,这将使得HEAD指向这个提交,并将工作区和暂存区都恢复到这个提交的状态。
  3. 回退提交:git revert <commit>,此命令可以创建一个新的提交,用于撤销指定提交的更改。该命令将会生成一个新的提交,包含了回退操作的更改,但是不会删除原始提交。如果你需要完全删除某个提交,可以使用git reset命令,但是需要注意,这将会删除该提交及其之后的提交,因此需要谨慎使用。

需要注意的是,在使用Git回退代码时,需要注意不要将未提交的修改丢失,并且需要保留历史提交记录。如果你不确定该如何回退代码,可以先创建一个新的分支,进行实验,确保不会对主分支造成不可逆的影响。

七、Git的GUI工具

Git GUI工具是一种可以通过图形界面操作Git的工具,它可以帮助用户更轻松地管理Git仓库、提交代码、查看历史记录等操作。下面是一些常用的Git GUI工具:

  1. GitKraken:这是一款跨平台的Git GUI工具,支持Windows、Mac和Linux系统。它提供了一套直观的图形界面,可以帮助用户更方便地管理Git仓库。GitKraken还支持一些高级功能,如分支管理、代码审核等。

  2. Sourcetree:这是一款免费的Git GUI工具,支持Windows和Mac系统。Sourcetree提供了一套简洁的界面,可以帮助用户更轻松地管理Git仓库。它还支持一些高级功能,如Git-flow工作流、Submodule管理等。

  3. GitHub Desktop:这是一款免费的Git GUI工具,支持Windows和Mac系统。GitHub Desktop提供了一套直观的界面,可以帮助用户更方便地管理Git仓库、提交代码等操作。它还支持GitHub网站的集成,可以更轻松地进行Pull Request等操作。

  4. Git Cola:这是一款开源的Git GUI工具,支持Windows、Mac和Linux系统。Git Cola提供了一套简洁的界面,可以帮助用户更轻松地管理Git仓库、提交代码等操作。它还支持一些高级功能,如分支管理、Submodule管理等。

  5. Git GUI:这是Git自带的GUI工具,可以在Windows、Mac和Linux系统中使用。Git GUI提供了一套简单的图形界面,可以帮助用户更轻松地进行Git操作。它支持大多数Git操作,如提交代码、查看历史记录等。

以上是一些常用的Git GUI工具,它们都提供了一套直观的图形界面,可以帮助用户更方便地管理Git仓库、提交代码等操作。不同的Git GUI工具有不同的特点和优缺点,用户可以根据自己的需要选择合适的工具。

八、如何使用Git在Github上贡献代码

  1. 在 GitHub 上创建一个账户并登录。

  2. 找到要贡献代码的项目,并在项目主页上点击 “Fork” 按钮,将项目复制到自己的账户下。

  3. 在自己的电脑上安装 Git 工具。

  4. 使用 Git 将项目克隆到本地计算机中。可以通过在命令行终端中使用以下命令来克隆项目:

    bashCopy code
    git clone https://github.com/你的用户名/项目名.git
    
    • 1
    • 2
  5. 在本地修改代码,并使用以下命令将更改提交到本地 Git 仓库:

    sqlCopy codegit add .
    git commit -m "提交信息"
    
    • 1
    • 2

    其中,git add . 命令将所有修改添加到暂存区,git commit 命令将提交更改,并在提交信息中描述更改。

  6. 将本地更改推送到自己的 GitHub 账户中:

    perlCopy code
    git push origin master
    
    • 1
    • 2

    这将把本地的更改推送到 GitHub 上。

  7. 在自己的 GitHub 账户上打开一个 Pull Request (PR) 请求,请求将更改合并到原始项目中。在 GitHub 上点击 “New pull request” 按钮,填写 PR 请求的标题和描述,并选择要合并的分支。

  8. 等待原始项目的维护者审核并接受你的 PR 请求。如果需要进一步修改,原始项目的维护者可以在 PR 请求中提出评论和建议。

  9. 当 PR 请求被接受并合并到原始项目后,你的代码贡献就完成了。

以上是在 GitHub 上贡献代码的基本步骤。在此过程中,你需要注意遵循项目的代码风格和贡献规范,避免与其他贡献者冲突,以便顺利地将你的代码贡献到项目中。

掌握以上知识,一般的Git操作完全不在话下!还等啥,行动吧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/589121
推荐阅读
相关标签
  

闽ICP备14008679号