思考题
Thinking 0.1
-
Untracked.txt中保存了git status的输出,其中包含了master分支中未跟踪的文件,不止包含了创建的REANDME.txt,也有重定向目标Untracked.txt
-
修改了README文件后使用git add ./README.txt添加入暂存区供下次提交使用。执行git status 命令后Stage.txt中包含未跟踪的Stage.txt和Untracked.txt以及要提交的变更中新文件README.txt
-
git commit -m "20375061"
后显示如下,master分支的新commit中包含新加入的README.txt文件1 2 3 4
git@20375061:~/learnGit (master)$ git commit -m "20375061" [master e427c66] 20375061 1 file changed, 1 insertion(+) create mode 100644 README.txt
-
在执行
git add ./README.txt
后,README.txt文件从未跟踪的文件变为了要提交的变更 -
修改README.txt后,git status中显示其属于尚未暂存已被提交的变更。与add前未跟踪的文件不同,因为现在的README.txt是modified状态的文件,而之前是Untracked状态的。这对于git而言是不同的
Thinking 0.2
add the file 对应 git add
stage the file 同样对应git add
commit 对应git commit
Thinking 0.3
- 被错误删除后,如果仍然在暂存区中,可以使用
git checkout -- print.c
来恢复 - 执行
git rm print.c
后,暂存区中没有print.c,只能通过版本库中恢复。可以使用git checkout HEAD -- print.c
恢复工作区和暂存区中的文件。 - 使用
git rm hello.txt
Thinking 0.4
提交三次后,git log
输出如下
|
|
第三次提交的hash值为5daa5b747a3e246c7e538b99635ae23d827378da
执行git reset --hard HEAD^
后,回退到上一次提交,gitlog中只有第1,2次commit
找到提交说明为1的hash后,git reset --hard <hash>
将版本回退到版本库中对应hash值的提交,既只有第1次commit
使用第三次提交的hash执行上述命令,git log中有1,2,3次提交,回到最新版。
Thinking 0.5
操作输出如下
|
|
可以发现,echo可以直接输出其后的信息。>
会用重定向后覆写文件,>>
会在文件最后添加回车并续写文件。
Thinking 0.6
command bash脚本如下
|
|
使用bash test > result
后得到result文件内容
|
|
command文件中echo命令会在stdout中输出之后的各项文本,而这本身是一条bash语句,其中如果遇到>
,>>
,$
等会执行其中内容。如果使用单引号包裹可以按照其中的原始纯文本输入echo,如果用双引号则会正常解析变量。因此command中遇到$
时用单引号包裹。
test 中设置输出"Shell Start ..."
和”set a = 1“
后设置a=1,b=2,bash得到a和b的值后设置c=a+b,故echo语句得到c的值后输出"c = 3"
。其后分别输出三个字符串并将c,b,a保存到file1,file2,file3,并将file1覆写到file4,file2、file3续写到file4末尾并输出一个字符串。截至此时,result中包含了重定向test输出的内容,最后通过cat file4>>result
将file4内容添加到result末尾,最后得到如上内容。
echo echo Shell Start 与 echo `echo Shell Start` 有区别,`中的内容会被执行,故前者输出echo Shell Start,后者输出Shell Start。同理,echo echo $c>file1 会把echo 变量c的值
输出到file1且无输出,而echo `echo $c>file1`会执行echo $c>file1,将变量c的值输出到file1且输出一个回车。
难点分析
一方面,难点在于bash命令的理解,特别是设计单引号,双引号,$符号等结合的时候。只需要注意$用来取值,取值运算需要套$[]就可以大概使用。
另一方面,难点在于对于各种命令的使用,这里需要结合菜鸟教程和man命令并配合联系来一步步熟练。
最后,git的概念理解也比较困难,特别是对于存储库和暂存区的区别的理解需要特别注意。
实验体会
经过本次实验,我感受到linux操作的迷雾被初步拉开。结合课程组的大量练习,我已经能够编写一些基本的脚本完成所需的操作了。但是,我同样感受到课程组指导书中内容的不完全,其中很多命令十分有用,需要进一步的学习才能够进一步掌握,这需要我们在linux系统中进一步联系。