软件构造随笔2
2022/5/1 23:19:10
本文主要是介绍软件构造随笔2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为了防止个人小博客出现不可访问的状况,故在博客园亦留一份备份!
还请老师不要判为抄袭等,感谢!本人20级HIT学生,学号尾号230
随笔2
在本篇随笔中,我们主要介绍:
- Git火速上手
Git 火速上手
在本次实验中,由于要用到Git交作业,但在之前只是浅显地用过很小一部分git命令,于是准备重新系统性地入个门。本篇随笔可以视为廖雪峰Git入门教程的笔记。
一些概念
老师在上课的时候,已经对Git的核心原理做了一些解释,这里我们先回顾一下比较核心的概念:
::: tip Repository、本地的CMDB
.git directory(a repository storing all version control data)
Repository
即版本库,简单说来就是每个目录下的.git
文件夹。这个给文件夹我们也把它叫做本地的CMDB
,因为.git
文件夹里存放着你的所有的版本控制的数据。
CMDB
,是Configuration Management Database
的简称,我们把它叫做配置管理数据库
。不难理解为啥.git
文件夹是一个配置管理数据库。
:::
::: tip 工作目录
Working directory (local file system)
文件夹里头除了.git
的东西
:::
::: tip 暂存区
Staging area(in memory)
实际上暂存区是放在.git
文件夹里面的,用于隔离工作目录和git仓库。
:::
对于你的每个文件,都有三个状态:
::: tip 已修改
Modified
(the file in working directory is different from the one in git repository, but is not in staging area)
工作目录下的、和仓库里头当前所在分支不一样的、你还没把它丢到暂存区的文件。
:::
::: tip 已暂存
Staged
(the file is modified and has been added into the staging area)
改了,并且丢进了暂存区。
:::
::: tip 已提交
Committed
(the file keeps same in working directory and git directory)
工作目录和仓库里头的文件一样辽!
:::
设置自己的信息
鉴于Git是分布式管理系统,因而在进行某些操作的时候,Git有必要记录下来是谁干的这些事情。所以你需要向Git自报家门:
git config --global user.name "Geng" git config --global user.email "example@hello.world"
注意到我们这里使用了--global
参数,这就意味着对于每个Git仓库
,其都会使用这个配置。当然你也可以针对每个仓库进行不同的设置。
一些操作
创建版本库
git init
把文件添加到仓库
或者可以说放进了暂存区?
git add FILENAME
提交更改
或者可以说把暂存区里头的所有文件一口气都提交了。
git commit -m "我把bug给删了!"
查看当前状态
git status
会把你动的文件以及所处的状态(已修改?已暂存?已提交?)给标记出来。
比如某次执行这个命令,得到如下结果:
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Helloworld.txt no changes added to commit (use "git add" and/or "git commit -a")
看到了not staged
(第一行)与modified
(第二行),说明你改了Helloworld.txt,但是并没有放进暂存区。下面还贴心的提示你记得用git add
把东西放进暂存区,用git commit
提交。
如果我git add
一下,把东西丢进暂存区了呢?
On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Helloworld.txt
好的,可以看到已经放入暂存区,并且你这个文件是已修改的。这能不能说明已修改
和已暂存
两个状态可以共存呢?我想某种程度上好像还不行,接着往下看——
查看已修改文件和仓库现有文件的区别
git diff <FILENAME>
实测如果一个文件是modified
了的,如果还没通过git add
放进暂存区,此时你用git diff
,会把区别详细的给你说出来:
diff --git a/Helloworld.txt b/Helloworld.txt index 9305eb5..9e0acbb 100644 --- a/Helloworld.txt +++ b/Helloworld.txt @@ -1 +1,2 @@ -Hello 看我 你在害怕什么 \ No newline at end of file +Hello 看我 你在害怕什么 +a new line \ No newline at end of file D:\GitTest>git add Helloworld.txt D:\GitTest>git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Helloworld.txt
但你一旦放进暂存区,即便还没提交,git diff
也啥都不会显示了。
查看历次提交的记录
git log
会从近到远的输出你每一次commit的记录,比如:
PS D:\GitTest> git log commit 090ef56147016ce251c0b0086eb8a5faa66b520d (HEAD -> master) Author: 120L******** <120L********@xxx.edu.cn> Date: Fri Apr 29 20:13:23 2022 +0800 Change Helloworld.txt commit 34415d69ace23724d0f8f65c37875f2eaec27fc2 Author: 120L******** <120L********@xxx.edu.cn> Date: Fri Apr 29 19:56:28 2022 +0800 Touch Helloworld.txt
git回退
HEAD
指向当前指针,HEAD^
表示指向上一个版本,HEAD^^
表示指向上上个版本,HEAD~100
表示指向上一百个版本。
git reset --hard HEAD^
我还想回到刚才的版本?对不起,没有^HEAD
,如果你知道刚才那次commit的ID的前几个字母是啥(可以看刚刚说过的git log
命令的结果,里头有commit 090ef56147016ce251c0b0086eb8a5faa66b520d
),也行,那就
git reset --hard 090ef5
不知道?或许你说咱再用git log
看看?殊不知git log
的结果也会回退,那就:
查看本地仓库的所有commit日志
git reflog
嗨嗨,自动帮我记了每次commit的ID
PS D:\GitTest> git reflog 090ef56 (HEAD -> master) HEAD@{0}: commit: Change Helloworld.txt 34415d6 HEAD@{1}: commit (initial): Touch Helloworld.txt
谜之——Git管理的竟然是修改!?
上课的时候讲的是Git管理的是修改的文件,但廖雪峰网站上说的是存的是变化??
廖雪峰这边做了个实验:
先改了一个文件,丢进暂存区;
接着把刚刚动过的文件又改了,但没有再次丢进暂存区;
接着提交。
发现被提交的是丢进暂存区的东西。
但到这里发现,好像说存的是文件,也无可厚非啊,可以理解为,丢进暂存区的,只是一个你add时文件的副本罢了。
回退的几种情况
只是修改了工作区文件,还没丢到暂存区
此时会把文件回退到和仓库一毛一样的状态
git checkout -- FILENAME # OR git restore <file>
其中第二个是我当前再用的这个版本提示给我的,好像更人性化了一些
(use "git restore
..." to discard changes in working directory)
文件已经丢到暂存区,并且你已经又对文件进行了改动
- 恢复到你刚刚丢进暂存区的样子,并仍然保持在暂存区的样子
git checkout -- FILENAME # OR git restore <file>
- 单纯的把文件从暂存区移出来,且保留了你最后所做的修改
git reset HEAD <file> # OR git restore --staged <file>
显然每一种情况里头的第二句更人性化一些。
删除的几种情况
真的想删一些文件了
# 假设你已经从工作区把要删的文件都删完了 git rm/add <file>
手贱删错了,想恢复的和当前仓库里头一样
git checkout -- FILENAME # OR git restore <file>
这篇关于软件构造随笔2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03Springboot企业级开发资料入门教程
- 2025-01-03SpringBoot企业级开发资料入门教程
- 2025-01-03Springboot微服务资料入门教程
- 2025-01-03Springboot项目开发资料:新手入门教程
- 2025-01-03Springboot项目开发资料:新手入门指南
- 2025-01-03SpringCloud Alibaba资料入门教程
- 2025-01-03SpringCloud Alibaba资料详解与入门教程
- 2025-01-03SpringCloud微服务资料入门教程
- 2025-01-03单元化架构最佳实践指南!
- 2025-01-03SpringCloud项目开发资料入门教程