我看谁还敢说不懂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
工作区 --------------> 暂存区 --------------> 仓库

简单来说,我们在工作区中修改代码后,通过 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
    
  • Debian/Ubuntu

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

下载最新版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

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 [email protected]

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

$ 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=[email protected]
......

六、Git的高级操作

6.1、.gitignore文件的使用

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

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

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

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

# 忽略指定的文件
example.log

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

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

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

6.2、git diff的使用

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

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

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

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

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

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

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

其中 <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
    
  5. 在本地修改代码,并使用以下命令将更改提交到本地 Git 仓库:

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

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

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

    perlCopy code
    git push origin master
    

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/projim_tao/article/details/129225559