实验目的:
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
操作结果如下图:
分支实战
使用分支完成以下更改:
-
在 master 分支上 - 向页面添加默认颜色
-
创建一个 sidebar 分支 - 为页面创建侧栏
-
在 master 分支上 - 更改页面的标题
-
在 sidebar 分支上 - 向侧栏中添加更多内容
-
创建一个 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词条,总结分布式版本控制系统的核心机理
答:不必服务器端软件支持,使源代码的发布和交流极其方便。