实验一 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.1、下载学习通上的gui,并安装成功。
1.2、设置Git 用户名和Git 邮箱, 确保 Git 输出内容带有颜色标记、对比显示原始状态
1.3、从头创建库
1.3.1、创建项目目录并使用命令git init 在当前目录下初始化生成一个空的git仓库。
1.3.2、克隆现有库
输入pwd确保终端的当前目录没有位于Git仓库中。
在克隆内容之前,确保命令行工具已定位于正确的目录下。
完整命令:git clone https://github.com/udacity/course-git-blog-project 。
1.3.3、找出并进入course-git-blog-project文件夹下,打开index.html文件,可见如下图blog网页
index文件的部分代码
1.3.4、判断仓库的状态
git status 是了解 Git 的核心所在。因此可利用 git status 命令来随时查看当前仓库的状态。运行结果如下图:
1.4、git log
1.4.1、git log
git log 命令用于显示仓库中所有 commit 的信息。
默认情况下,该命令会显示仓库中每个 commit 的:
-
SHA
-
作者
-
日期
-
消息
1.4.2、git log --oneline
用来更改美化仓库信息的显示形式
git clone --oneline 命令:
-
每行显示一个 commit
-
显示 commit 的 SHA 的前 7 个字符
-
显示 commit 的消息
1.4.3、git log --stat
git log --stat命令可以用来显示 commit 中更改的文件以及添加或删除的行数。
该命令的显示格式通常为:
(1)显示被修改的文件
(2)显示添加/删除的行数
(3)显示一个摘要,其中包含修改/删除的总文件数和总行数
1.4.4、git log -p
git log -p 显示对文件作出实际更改的选项
$ git log -p
-
此命令会向默认输出中添加以下信息:
-
显示被修改的文件
-
显示添加/删除的行所在的位置
-
显示做出的实际更改
1.4.5、git log -w
忽略空格的变化
1.5、git add& git commit&git diff----多种命令的使用
1.5.1先创建一个html文件添加代码,之后建立 js 和css 文件夹,并在文件下分别建立 app.js 和 app.css 文件。
1.5.2、使用git status检查git有没有跟踪这些文件。
1.5.3、执行git add index.html命令,然后执行继续执行git status,发现跟踪文件没有index.html,而处于暂存分类状态。
1.5.4、index.html 文件已暂存。再暂存另外两个文件。现在我们可以运行以下命令:
$ git add css/app.css js/app.js
1.5.5、再次执行git status,将文件放入暂存区中。
1.5.6、提交commit, 要在 git 中提交 commit,你需要使用 git commit 命令,在首行输入Initaial commit ,文本 "Initial commit"。
1.5.7、执行git commit 等命令完成提交。
1.5.8、第二个commit添加更改
将以下内容添加到 index.html 中的 body 标记中:
<header>
<h1>Expedition</h1>
</header>
1) 使用 git add 命令将文件移到暂存区,并使用 git status 验证文件是否位于暂存区。
2) 提交第二个 commit 吧!使用 git commit 命令提交 commit,并添加提交说明 Add header to blog
运行git status,添加标题后在进行提交。
1.5.9、git diff命令可以用来查看已被加入但是尚未提交的更改。
$ git diff
此命令会显示:
-
已经修改的文件
-
添加/删除的行所在的位置
-
执行的实际更改
1.5.10、可以使用名称特殊的文件 .gitignore
。将此文件添加到 new-git-project
项目根目录。你只需列出希望 git ignore(忽略,不跟踪)的文件名,git 将忽略这些文件。
1.6、标签、分支
1.6.1git tag标签:
使用 git tag 命令与仓库的标签进行交互,输入以下命令
git tag -a v1.0
打开编辑器
保存并退出编辑器,输入 git tag
,命令行会显示仓库中的所有标签
1.6.2、删除标签
1.6.3、git branch 分支:git 中的分支非常灵活,使你能够实现一些很强大的功能。
(1)创建分支:要创建分支,只需使用 git branch
并提供要创建的分支对应的名称。因此,如果你想创建一个叫做"sidebar"的分支,只需运行以下命令:
$ git branch sidebar
(2)切换分支:
注意,在进行 commit 时,该 commit 将添加到当前分支上。虽然我们创建了新的 sidebar
分支,但是没有向其添加新的 commit,因为我们尚未切换到该分支。如果我们现在进行 commit 的话,该 commit 将添加到 master
分支,而不是 sidebar
分支。我们已经在演示中看到这一情况,要在分支之间进行切换,我们需要使用 git 的 checkout
命令。
$ git checkout sidebar
日志输出如下:
(3)活跃分支:判断活跃分支的最快速方式是查看 git branch
命令的输出结果。活跃分支名称旁边会显示一个星号。
(4)删除分支:删除分支,可以使用 -d
选项。下面的命令包含 -d
选项,告诉 git 删掉给出的分支
注意,无法删除当前所在的分支。因此要删除 sidebar
分支,你需要切换到 master
分支,或者创建并切换到新的分支。
删除内容让人比较紧张。但是不用担心。
1)如果某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支。
2)如果你创建了 sidebar
分支,向其添加了 commit,然后尝试使用 git branch -d sidebar
删除该分支,git 不会让你删除该分支,因为你无法删除当前所在的分支。
3)如果你切换到 master
分支并尝试删除 sidebar
分支,git 也不会让你删除,因为 sidebar
分支上的新 commit 会丢失!要强制删除,你需要使用大写的 D 选项 - git branch -D sidebar
。
(5)高效分支:
执行以下操作:
1) 删除 前面建好的 siderbar 分支。
2)所有文件暂存并提交到仓库
3)切换到master分支
4)运行git status, 确认出现 working tree clean 或 working directory clearn
(6)分支实战:
-
在 master 分支上 - 向页面添加默认颜色
-
创建一个 sidebar 分支 - 为页面创建侧栏
-
在 master 分支上 - 更改页面的标题
-
在 sidebar 分支上 - 向侧栏中添加更多内容
-
创建一个 footer 分支 - 向脚注中添加社交链接、
更改 1 - 添加页面颜色
更改2 一 添加侧栏
我们向页面上添加一个侧栏。
更改3 一 更改master上的标题
切换到 master 分支并更新页面标题。使用 git checkout
命令切换到 master
分支。将页面的 <h1>
标题从"Expedition"改为"Adventure"。保存 index.html
文件并进行 commit 以将此更改添加到仓库中。( commit 消息"Improve site heading for SEO"),提交后用git log --oneline 检查。
(6)同时查看所有分支:
git log --oneline --graph --all
--graph
选项将条目和行添加到输出的最左侧。显示了实际的分支。--all
选项会显示仓库中的所有分支。
运行此命令将显示仓库中的所有分支和 commit:
1.7合并
主题分支(例如 sidebar
)的作用是让你做出不影响 master
分支的更改。当你在主题分支上做出更改后,如果觉得不想要该分支上的更改,则可以删掉该分支,或者你决定要保留更改,则可以将该分支上的更改与其他分支上的更改合并。
将分支组合到一起称为合并。
1.7.1、合并冲突
合并失败时,就称为合并冲突。大部分情况下,git 将能够成功地合并分支。但是,有时候 git 无法完全自动地进行合并。合并失败时,就称为合并冲突。
1.7.2、解决合并冲突:
git 使用合并冲突指示符来告诉你两个不同分支上的哪些行导致了合并冲突,以及原始行是什么。要解决合并冲突,需要:
(1)选择保留哪些行
(2)删掉所有带指示符的行
1.8、撤销更改
1.8.1、更改最后一个commit
1.8.2、还原git revert
创建了一个包含一些更改的 commit,可以使用 git revert 命令来还原它。
1.8.3、重置git reset:
$ git reset <reference-to-commit>
可以用来:
-
将 HEAD 和当前分支指针移到目标 commit
-
清除 commit
-
将 commit 的更改移到暂存区
-
取消暂存 commit 的更改
1.8.4备份分支:使用 git reset
命令将清除当前分支上的 commit。
因此,如果你想跟着操作接下来出现的所有重置操作,需要在当前 commit 上创建一个分支,以便用作备份。
实验后总结与体会:
(1)起初做实验时运行git log后出现end 之后不知道怎样返回输入命令行,后细看了内容后才知道按下英文状态下的q即可。
(2)在进入到new-git-project目录下建立完文件和文件夹后,运行git status总是出现错误的界面,之后删除ls-la的多余的文件,出现了正确的界面。
(3)一次在不小心的情况下叉掉了gui bash界面,之后才知道在相应的文件夹下,右键点击gui bash即可。
这次实验虽然结束了但是各种知识点也只是有所了解,希望自己通过课后的进一步巩固强化能够更好的吸收各个知识内容。
思考题
阅读维基百科和百度百科的Git词条,总结Git是分布式版本控制系统
答:Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。git更像一个文件系统,直接在本机上获取数据,不必连线到主机端获取数据。 每个开发者都可有全部开发历史的本地副本,changes从这种本地repository复制给其他开发者。这些changes作为新增的开发分支被导入,可以与本地开发分支合并。