肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > 廖雪峰Git学习笔记2-时光机穿梭

廖雪峰Git学习笔记2-时光机穿梭

时间:2020-09-24 12:17:34

相关推荐

基本都是按照廖雪峰老师的重新敲打了一遍,增强记忆,中间穿插了一些自己的理解,新手可能有误,请看原版:

/wiki/896043488029600/896954074659008

时光机穿梭

上一张已经可以使用git add和git commite 添加文件到Git 仓库,这一章主要讲述如何使用git来管理仓库中的文件。

当使用 vi file1.txt 改动txt文件后,可使用git status命令来查看仓库的状态。

$ git statusOn branch masterChanges 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: file1.txtno changes added to commit (use "git add" and/or "git commit -a")

以上是git status命令返回的结果,可看到file1.txt文件被修改,但是没有被添加or提交。

可使用git diff <file1.txt>命令来查看具体修改了什么内容

$ git diff file1.txtdiff --git a/file1.txt b/file1.txtindex 7a5e08f..c595d7d 100644--- a/file1.txt+++ b/file1.txt@@ -1,3 +1,5 @@This is file 1Hello-Hello\ No newline at end of file+Hello+This hello is by Git vi command+what the matter?

以上可以看到file1.txt加了三行。知道了file1.txt修改了什么后就可以使用git add 和 git commit -m提交到仓库。使用insert键来更改txt文件,使用Esc键加:wq退出并保存

$ git add file1.txt$ git statusOn branch masterChanges to be committed:(use "git restore --staged <file>..." to unstage)modified: file1.txt上面使用git add提交file1.txt,从git status可看到将被提交的修改包括file1.txt$ git commit -m "add hello"[master 963b043] add hello1 file changed, 3 insertions(+), 1 deletion(-)$ git statusOn branch masternothing to commit, working tree clean重新提交仓库可看到一个文件被改变,增加了3行,删除了一行此时用git status查看状态可考到当前没有需要提交的修改,工作目录是working tree clean

小结:

使用git status命令随时掌握工作区状态如果git status显示被修改过,可使用git diff查看具体被修改的内容。

版本回退

不断对文件进行修改,又不断提交修改到版本库。每当你觉得文件修改到一定程度时,可以先使用commit提交一个版本,如果后面把代码改乱了,可以回退到最近commit的一个版本。

使用git log 命令查看版本历史记录。

$ git logcommit 963b043ca09db1ca1aadc0cdc758b0a189ef48b7 (HEAD -> master)Author: A <bbb@>Date: Wed Dec 23 15:02:18 +0800add hellocommit 1bf646e21317a16a83003b83bd0b752b23abacd1 (这一大串为提交的版本号,十六进制表示)Author: A <bbb@>Date: Tue Dec 22 16:42:14 +0800create 2 filescommit b2525be4ea024a526871b545b0f0d8db45592337Author: A <bbb@>Date: Tue Dec 22 16:28:45 +0800wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到三次提交。

如果觉得信息太多,不需要了解Author和Date,可以在原命令上加入 --pretty=oneline

git log --pretty=oneline

没提交一个新版本,Git会自动串成一个时间线,可使用可视化工具查看Git历史。

怎么回退到上一个版本?

以git log输出的三个版本为例,我们怎么回滚到 create 2 files版本?

Git必须知道当前版本是哪个版本?使用HEAD表示当前版本。上一个版本是HEAD^

上上个版本是HEAD^^

有多个版本回滚时可使用数字HEAD~100

使用git reset命令回退到某个版本。

git reset --hard HEAD^

现在使用git reset回到了create 2 files版本,现在若又想回到add hello的版本怎么办呢?可以使用以下代码:

git reset --hard 963b043(963b043是add hello的版本号前几位,Git会根据这个版本号自动查找)

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你使用git reset时,是将指针指向了其他的版本。如果跟上面一样,回退了某版本后后悔了又想恢复新版本怎么办?现在需要找到Commit id。

使用 git reflog来记录每一次命令。

总结:

HEAD指向的版本是当前版本。Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id穿梭前,用git log可以查看提交历史,以便确定要会回退到哪个版本要重返未来,使用git reflog查看命令历史,以便确定要回到未来哪个版本。

工作区和暂存区

工作区

工作区指的是在电脑中.git所在的目录,即这个git仓库正在监控的工作区(文件夹)

版本库

工作区中的.git目录是Git的版本库。.git中存储了很多东西,其中有个叫做stage(index)的暂存区,还有Git自动创建的第一个分支master,和指向master的一个指针HEAD

PS:在Git Hash 中可看到每句开头都是这样,都会指向一个master:

thx@ASUS-PC MINGW64 /d/Git (master)

把文件往Git版本库中提交时两个步骤:

①git add file1.txt

将file1.txt的文件添加进stage暂存区

②git commit -m “add hello”

将“add hello”的修改提交,即把暂存区的所有内容提交到当前master分支。

之前讲过可以使用git add命令多次添加,然后使用一个git commit命令提交。其实就是把所有文件都放在暂存区,再一次性提交所有更改。

【实操】

使用vi file1.txt增加一行内容。同时使用vi nexfile.txt新增一个txt文件,此时使用git status命令查看工作区状态

$ git statusOn branch masterChanges 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: file1.txt以上说明file1.txt被修改了,但是还没有从stage被提交Untracked files:(use "git add <file>..." to include in what will be committed)newfile.txt因为newfile.txt没被git add提交过,所以现在仍然处于Untracked的状态

使用git add重新提交上述两个文件,用git status查看一下

$ git statusOn branch masterChanges to be committed:(use "git restore --staged <file>..." to unstage)modified: file1.txtnew file: newfile.txt

暂存区的状态变为这样:

一旦提交后,如果没有对工作区做任何修改,则工作区就是working tree clean干净状态的。

此时版本库变成这样,暂存区被释放

管理修改

Git跟踪并管理的是修改,而不是文件。

当使用git add命令后,工作区的修改就被放入暂存区准备提交,若此时再对工作区进行二次修改,但并没有放入暂存区,使用git commit只会把在暂存区的文件提交。

可以使用git diff查看现有工作区和版本库已经被提交的最新版本的区别。

每次改动如果不用git add加入缓存区,就不会通过commit加入到版本库中。

撤销修改

使用git checkout – 来丢弃工作区的修改,有两种情况:

①file.txt修改后还没有放到暂存区,git checkout就回到和版本库一模一样的状态。

②file.txt的更改已经被添加到暂存区,git checkout就回到添加到暂存区后的状态。

总之,git checkout让文件回到最后一次git commit或者git add的状态。

注意撤销修改命令git checkout后的–很重要。

cat file1.txt可以在界面显示txt文件。

Q:若更改的内容已经到暂存区,怎么把暂存区的修改撤销掉(unstage)呢?

A:使用 **git reset HEAD **可以把暂存区的修改撤销掉,重新放回工作区。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当使用HEAD是,表示使用最新的版本。(因为HEAD是指针,永远指向最新版本)

删除文件

可以直接在文件管理器中把没用的文件删了,或者使用rm命令。

rm file1.txt

Git知道你删除了文件,工作区和版本库就不一致了。git status命令会立刻告诉你哪些文件被删除了。

①若要从版本库中删除该文件,则用命令 git rm,并且提交 git commit

git rm file1.txt

rm ‘test.txt’

git commit -m “remove test.txt”

②若删错了,版本库中还有,则使用checkout中把它恢复到最新版本。

git checkout --file1.txt

git checkout是用版本库中的版本替代工作区的版本,无论工作区是修改还是删除,都可以一键还原。

如果觉得《廖雪峰Git学习笔记2-时光机穿梭》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。