• 实验一 GIT 代码版本管理


    实验目的:

    1)了解分布式分布式版本控制系统的核心机理;

    2)   熟练掌握git的基本指令和分支管理指令;

    实验内容:

    1)安装git

    2)初始配置git ,git init git status指令

    3)掌握git log ,git add ,git diff 指令

    4) 掌握git tag git branch,git commit 指令

    5)掌握git revert 指令

    实验记录:

    1)实验内容步骤及结果的截图

    初次配置GIT:

    Git 与代码编辑器:

    创建项目目录:

      从默认路径C盘cd到D盘后,在我的D盘下创建 se2020-git-course 文件目录,在该目录中再创建另一个 new-git-project 文件目录里,然后 cd 到 new-git-project 目录下

    创建仓库:

    使用 git init 命令来完成仓库的创建

    克隆现有仓库:
    在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL)。首先需要验证终端位置,确保终端的当前工作目录没有位于 Git 仓库中。输入命令 git clone,然后输入要克隆的 Git 仓库的路径。该实验使用以下 URL :https://github.com/udacity/course-git-blog-project 

    进入course-git-blog-project文件夹

    在浏览器中打开 index.html 文件,可用看见已经克隆的blog网页

     

    判断仓库的状态:

    git status 是了解 Git 的核心。它告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。我们应该习惯于运行任何其他命令之后,都运行下git status

    git status 显示的信息具体取决于你文件状态、工作目录和仓库。上图中的new-git-project为空目录,所以运行结果显示:No commits yet。现在cd到已经具有 commit 的仓库course-git-blog-project中运行 git status,结果如下

    git log

    git log 命令用于显示仓库中所有 commit 的信息

    默认情况下,该命令会显示仓库中每个 commit 的:

    • SHA

    • 作者

    • 日期

    • 消息

    仍然在course-git-blog-project项目目录下进行,输入git log,部分结果如下:

    按q退出git log

    git log --oneline

    可以使用 git log --oneline 命令以不同的格式风格来代替 git log 的输出,相比较而言 git log --oneline的输出结果更为简短并且可以节省大量空间。

     

    git clone --oneline 命令:

    • 每行显示一个 commit

    • 显示 commit 的 SHA 的前 7 个字符

    • 显示 commit 的消息

    git log --stat

    The git log 命令有一个选项可以用来显示 commit 中更改的文件以及添加或删除的行数。该选项为 --stat(stat 是“统计信息 statistics”的简称):

    运行 git log --stat

    git log --stat命令的显示格式通常为:

    • 显示被修改的文件

    • 显示添加/删除的行数

    • 显示一个摘要,其中包含修改/删除的总文件数和总行数

    q退出git log --stat

    git log -p

    git log -p 命令是一个可用来显示对文件作出实际更改的命令。( -p 是 --patch 的简写)。

    git log -p 命令通常会向默认的输出中添加以下信息:

    • 显示被修改的文件

    • 显示添加/删除的行所在的位置

    • 显示做出的实际更改

    处理太多滚动操作 git show

    通过以上的各个命令的实验过程会发现,上面的命令在执行结束之后需要在补丁(修改)输出中不断向下滚动,以便找到正确的 commit 并查看其信息。能够显示特定 commit 的详情,而不用关心仓库中的所有其他内容。git show 命令通常将 SHA 作为最后一个参数提供给命令。(例如:git log -p fdf5493)git show 命令的输出和 git log -p 命令的完全一样。因此默认情况下,git show 也会显示commit、作者、日期、commit 消息、补丁信息。

     

    git show 命令将仅显示一个 commit。因此,如果你看不到任何其他 commit,不要惊慌。它只显示一个 commit。git show 命令的输出和 git log -p 命令的完全一样。因此默认情况下,git show 会显示:

    • commit

    • 作者

    • 日期

    • commit 消息

    • 补丁信息       

     git show 可以与我们了解过的大部分其他选项一-起使用:

    ●--stat显示更改了多少文件,以及添加/删除的行数

    -p或-显示默认补丁信息,但是如果使用了--stat, 将不显示补丁信息,因此传入-p以再次添加该信息

    ●|-W忽略空格变化

    git add& git commit&git diff

    准备工作

      首先在new-git-project目录下创建一个叫做 index.html 的文件,文件内容不可为空,并添加一些起始代码之后分别建立 js 和css 文件夹,并在文件下分别建立 app.js 和 app.css 文件,文件内容可为空。准备工作完成之后回到上级目录,利用 git status 命令查看状态。

    git add

    将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区。使用 git add 命令将这三个文件移到暂存区。利用git add 命令将 index.html 添加到暂存区中,然后再利用git status查看状态,代码如下:

    与添加index.html相同,我们将目录下app.css和app.js也用git add 放入到暂存区中。同样完成之后利用 git status 命令查看当前仓库状态。

    提交 git commit

    使用 git commit 命令将暂存区中的文件进行提交,运行git commit命令将会打开在第一节课配置的代码编辑器。

    完成提交

     提交了第一个 commit

    完成代码的提交之后利用 git status 命令再次查看仓库状态,结果如下:

    第二个 commit - 添加更改

    将以下内容添加到 index.html 中的 body 标记中:

    <header>

       <h1>Expedition</h1>

    </header>

    然后运行 git status

    做以下操作   

    1 使用 git add 命令将文件移到暂存区,并使用 git status 验证文件是否位于暂存区。

    2使用 git commit 命令提交第二个 commit,并添加提交说明 Add header to blog。

     

    git diff

    在 index.html 中,将标题从"Expedition"改为"Adventure"。保存文件,然后在终端上运行 git diff。结果如下:

    git diff 命令用来查看那些已被加入但是尚未提交的更改。该命令的显示格式通常为:

    已经修改的文件

    添加/删除的行所在的位置

    执行的实际更改

    git ignore

    向项目所在目录添加一个project.doxc文件,但是不希望将该文件添加到仓库中。git 会看到这个新文件,所以在运行 git status 时,它将显示在文件列表中。

    将某个文件保留在项目的目录结构中,但是确保它不会意外地提交到项目中,可以使用名称特殊的文件 .gitignore。将 .gitignore文件添加到 new-git-project项目根目录。编辑。gitignore,将需要忽略的文件名编辑到.gitignore中,git 将忽略这些文件。

    标签、分支

    git  tag

    从宏观层面了解下 git 标签在仓库中的作用。首先查看项目使用 git log 的效果,结果如下:

    使用 git tag 命令与仓库的标签进行交互。在终端输入:git tag -a v1.0。该条命令将打开代码编辑器,并等待用户为标签输入信息。我们输入"Ready for content"作为tag。如下图:

    验证标签:保存并退出编辑器后,终端界面上什么也不会显示。我们只需要往项目中输入 git tag 命令就可以知道我们添加了的所有标签。

    查看标签:使用 git log 命令查看标签位于仓库的哪个位置。下图中的输出结果显示的 tag: v1.0 这就是标签。标签与 commit 相绑定。因此,该标签与 commit 的 SHA 位于同一行。

    删除标签:如果我们将标签消息中的某个字打错了或标签名称打错了(输入 v0.1,而不是 v1.0)最简单的方法是删除这个标签并重新创建。可以通过输入 git tag -d 命令来删除 这个错误的标签名(例如:git tag -d v1.0)。

     

    向以前的 commit 添加标签

    git tag -a 命令给一般直接向最近的 commit 添加标签,但如果用户提供了 SHA,命令则向具体的 commit 添加标签。先查询历史SHA git log --oneline,查找已经commit  的SHA,以8396ef5为例:

     

    在弹出代码编辑器以便让你提供标签消息之后,此命令将向 SHA 为 8396ef5的 commit 添加标签 v1.0。借助这一技巧,可以为整个 git 仓库中的任何 commit 添加标签,并且只需在已经知道的 git 标签命令中加上 commit 的 SHA 即可.

    综上,该命令将:

    • 向最近的 commit 添加标签

    • 如果提供了 SHA,则向具体的 commit 添加标签

    git branch 分支

    git 中的分支非常灵活,能够实现一些很强大的功能。而git branch 命令则是用来与 git 的分支进行交互的。通常包括:列出仓库中的所有分支名称、创建新的分支、删除分支。如果我们只输入 git branch 命令,终端将列出仓库中的所有分支。

    终端显示了git branch命令的输出结果,并显示了master分支。

    创建分支:使用 git branch 并提供要创建的分支对应的名称,假如我要创建一个叫做"sidebar"的分支,如下图:

    虽然我创建了 sidebar 分支,但是它还不是当前分支,目前提示符显示的是当前分支master。要使用该sidebar分支,需要切换到该分支,使用git checkout命令。

    git checkout

    工作方式:运行该命令执行时首先:从工作目录中删除 git 跟踪的所有文件和目录(git 跟踪的文件存储在仓库中,因此什么也不会丢失)。之后:再转到仓库中并提取分支指向的 commit 所对应的所有文件和目录。由于命令的执行方式,因此此命令将删除 master 分支中的 commit 引用的所有文件,它会将这些文件替换为 sidebar 分支中的 commit 引用的文件。

    仔细的观察可以发现当执行完 git checkout 命令之后提示符会开始显示 sidebar。我们可以使用 git log --oneline 命令来清晰的观察提示符中的有关分支的有用信息。特殊指示符"HEAD"具有一个指向 sidebar 分支的箭头。它指向 sidebar 是因为 sidebar 分支是当前分支,现在提交的任何 commit 将添加到 sidebar 分支。如下图:

     

    活跃分支:提示符通常显示活跃分支。但这是我们对提示符进行的特殊自定义,如果你使用的是不同的计算机,我们可以通过最快速的 git branch 命令的方式来判断活跃分支。(活跃分支名称旁边会显示一个星号)代码及运行结果如下图:

    删除分支:如果我们不再需要某个分支时我们可以使用 git branch -d 命令来完成。但时 git 中对分支的删除有很严格的限制,只有满足了这些限制删除操作才能完成。如果某个

    • 将要删除的分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是将要被删除的分支所独有的),git 不会删除该分支。
    • 如果我们创建了 sidebar 分支并向其添加了 commit 然后尝试使用 git branch -d 命令删除该分支。git 不会让你删除该分支,因为我们无法删除当前所在的分支。
    • 如果我们切换到 master 分支并尝试删除 sidebar 分支,git 也不会让你删除,因为 sidebar 分支上的新 commit 会丢失!如果要强制删除则需要使用大写的 -D ,即 git branch -D 。结果如下图:

     git branch命令用来:

    • 列出本地分支

    • 创建新的分支

    • 删除分支

    高效分支

    在 new-git-project 项目中进行操作。该项目具有以下文件:

    为开始后面实验,执行以下操作:

    1) 删除 前面建好的 siderbar 分支。

    2)所有文件暂存并提交到仓库

    3)切换到master分支

    4)运行git status, 确认出现  working tree clean 或 working directory clearn 

    操作结果如下图:

    分支实战

    使用分支完成以下更改:

    1. 在 master 分支上 - 向页面添加默认颜色

    2. 创建一个 sidebar 分支 - 为页面创建侧栏

    3. 在 master 分支上 - 更改页面的标题

    4. 在 sidebar 分支上 - 向侧栏中添加更多内容

    5. 创建一个 footer 分支 - 向脚注中添加社交链接、

     1.

     2.

     3.

    4.

    使用新的 --graph 和 --all 选项,

    --graph 选项将条目和行添加到输出的最左侧。显示了实际的分支。--all 选项会显示仓库中的所有分支。

    运行此命令将显示仓库中的所有分支和 commit,如下图:

    合并

    将分支组合到一起称为合并。

    commit 合并冲突

    大部分情况下,git 将能够成功地合并分支。但是,有时候 git 无法完全自动地进行合并。合并失败时,就称为合并冲突。结果如下图:

    撤销更改

    更改最后一个 commit:git commit --amend命令

    如果已经使用 git commit 命令提交了大量的 commit。现在,借助 --amend 选项,可以更改最近的 commit。如果工作目录没有内容(也就是仓库中没有任何未 commit 的更改),那么运行 git commit --amend 能够重新提供 commit 消息。代码编辑器将打开,并显示原始 commit 消息。只需纠正拼错的单词或重新表述即可!然后保存文件并关闭编辑器,以便采用新的 commit 消息。

    还原 commit: git revert

    重置 :git rese

    2)实验过程中发生的问题与解决

    1.在创建目录时,D盘中不出现.git文件,后来询问老师才知道文件隐藏了。

    2.添加和commit index.html等三个文件时,有一个course-git-blog-project一直干扰,后来发现它在new-git-project目录中,因为没有影响,我就没有引动它。

    3..gitignore不会使用,经过多次百度无果后我就去问老师了,还没等老师回答,我就灵光一现,知道了用法。

    实验总结与体会:

    总结:

    git init  初始化git

    git clone  克隆现有仓库

    git status 判断仓库的状态

    git log  用于显示仓库中所有 commit 的信息

    git log --oneline  git log --stat  简化显示commit的信息及修改情况

    git log -p 用来显示对文件作出实际更改的选项

    git show 仅显示一个 commit

    git add 添加到暂存区

     git commit  提交 commit

    git diff  在进行提交之前告诉我们已对文件进行了什么样的更改

    git branch 查看分支
    git branch <name> 创建分支
    git checkout <name> 切换分支
    git checkout -b <name> 创建+切换分支
    git merge <name> 合并某分支到当前分支
    git branch -d <name> 删除分支

    心得体会:不知道是不是因为第一次实验比较简单,我感觉这个实验需要记忆的命令比较少,比较好记。这是第一次通过 博客的方式提交实验报告,在此之前我们也提交过电子档的实验报告,所以对于实验报告并没有什么困难。对于实验本身来说,因为有内容略微有点多,又因为几乎全部都是自学,所以多多少少有一些困难。老师非常负责辛苦的一个个给我们解答困难,并且根据我们的截图就能知道我们的问题所在,也是很厉害了;还有各种搜索引擎可以帮助我们一起完成这个实验,总体来说,虽然在家里做的实验无论是环境装备还是心态都不如在学校里的好,但是又因为是第一次实验比较简单和老师耐心的指导,这次实验的情况还是比较好的。

    思考题:

       阅读维基百科和百度百科 的Git词条,总结分布式版本控制系统的核心机理

    答:不必服务器端软件支持,使源代码的发布和交流极其方便。

  • 相关阅读:
    mybatis中大于等于小于等于的写法
    RandomAccess接口
    ArrayList源码解析
    使用Docker搭建MySQL主从复制(一主一从)
    狂神Docker视频学习笔记(基础篇)
    【JQ】jQuery实现将div中滚动条滚动到指定位置的方法
    JAVA线程池的基本使用
    史上最全的Java技术体系思维导图,没有之一!
    springboot整合kafka
    spring cloud alibaba 分布式事务解决方案之seata-1.3.0
  • 原文地址:https://www.cnblogs.com/wendy980514/p/12403682.html
Copyright © 2020-2023  润新知