加州提子面包

git学习笔记✔️01

[TOC]

注意: 本文是根据 廖雪峰的官方网站的Git教程 的学习笔记

『第一节课』创建版本库

初始化一个Git仓库

  1. 找一个合适的地方
  2. 创建一个文件夹 mkdir learning-git
  3. 进入该文件夹 cd
  4. 通过git init命令把这个目录变成Git可以管理的仓库

    1
    2
    ☁ learning-git git init
    Initialized empty Git repository in /Users/MiG/Documents/Learning/Git/learning-git/.git/

    注意: 此时仓库就创建好了,文件夹下会多了一个名为 .git 的文件夹📂

  5. 添加一个 README.md 文件

  6. git add README.md 命令将 README.md 将该文件添加到仓库

    1
    2
    3
    4
    ☁ learning-git [master] ⚡ git commit -m "add README.md"
    [master (root-commit) a75f826] add README.md
    1 file changed, 2 insertions(+)
    create mode 100644 README.md

注意: -m 后面输入的是本次提交的说明

『第二节课』查看修改信息

可以通过 git status 命令查看仓库的状态:

当我们没有进行修改的时候 输入 git status 可以看到如下输出

1
2
3
☁ learning-git [master] git status
On branch master
nothing to commit, working tree clean

当我们进行一些修改之后:

1
2
3
4
5
6
☁ learning-git [master] ⚡ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.md

当此时输入 git diff README.md 会输出如下信息:

1
2
3
4
5
6
7
8
9
10
diff --git a/README.md b/README.md
index 6276f73..6abd600 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
Git is a version control system.
Git is free software.
-
+Git is awosome.
Git is create by Linus.

此时,输入 git status 命令查看仓库的状态:

会输出如下信息:

1
2
3
4
5
6
7
8
9
10
11
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md

提示信息没有提交

接下来,输入 git add README.md

没有提示

补充: git add 的作用是将提交的文件的信息添加到索引库中

然后, 输入 git status

输出信息如下:

1
2
3
4
5
6
☁ learning-git [master] ⚡ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.md

然后, 输入 git commit -m "modify README.md"

1
2
3
☁ learning-git [master] ⚡ git commit -m "modify README.md"
[master 48a04b0] modify README.md
1 file changed, 2 insertions(+)

最后,输入最后一次 git status

1
2
3
☁ learning-git [master] git status
On branch master
nothing to commit, working tree clean

本节课的补充:

  • git add 是将修改内容或者新文件添加到本地缓存区

  • 再用 git commit 将本地缓冲区的内容提交到本地仓库

  • git add 的各种区别:

    git add -A // 添加所有改动

    git add * // 添加新建文件和修改,但是不包括删除

    git add . // 添加新建文件和修改,但是不包括删除

    git add -u // 添加修改和删除,但是不包括新建文件

  • commit 前撤销 add:

    git reset <file> // 撤销提交单独文件

    git reset // unstage all due changes
    add/commit 前撤销对文件的修改:

    git checkout -- README.md // 注意, add添加后(同commit提交后)就无法通过这种方式撤销修改

『第三节课』版本退回

可以通过 git log 查看提交历史

1
2
3
4
5
6
7
8
9
10
11
commit 48a04b0f26cc80ed8ad000b9b64675142f6d9bcd
Author: GiHccTpD <yanrancanfei@163.com>
Date: Wed Apr 12 12:08:03 2017 +0800
modify README.md
commit a75f82682054606bdcec5c7f94590fff2d1de35c
Author: GiHccTpD <yanrancanfei@163.com>
Date: Wed Apr 12 11:18:59 2017 +0800
add README.md

还可以通过 git log --pretty=oneline 格式化输出提交信息:

1
2
48a04b0f26cc80ed8ad000b9b64675142f6d9bcd modify README.md
a75f82682054606bdcec5c7f94590fff2d1de35c add README.md

48a04b0f26cc80ed8ad000b9b64675142f6d9bcdcommit id 版本号,不同于 SVN 的数字版本号,SHA1 计算出来的一个非常大的数字,用十六进制表示。

可以通过 git reset --hard HEAD^ 命令退回上一个版本:

1
2
☁ learning-git [master] git reset --hard HEAD^
HEAD is now at a75f826 add README.md

此时,通过 git log --pretty=oneline 可以看到输出的是如下的信息: a75f82682054606bdcec5c7f94590fff2d1de35c add README.md

也可以通过 git reset --hard commit_id 来实现要退回的版本

命令 git reflog 用来记录你的每一次命令

1
2
3
4
a75f826 HEAD@{0}: reset: moving to HEAD^
48a04b0 HEAD@{1}: commit: modify README.md
a75f826 HEAD@{2}: commit (initial): add README.md
(END)

补充: Git在内部有个指向当前版本的 HEAD 指针,它指向的版本就是当前版本。

『第四节课』工作区与暂存区

文件夹📂 learning-git 就是一个工作区

版本库(Repository) 隐藏的文件夹📂 .git 就是一个版本库

如图所示:

Repository
图片来自: 廖雪峰的官方网站

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

  • 第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。

操作演示

Repository01

『第五节课』Git管理的是修改

注意: 因为Git跟踪并管理的是修改,而非文件。

『第六节课』撤销修改

当没有提交到缓冲区时

通过使用命令 git checkout -- README.mdREADME.md 文件在工作区的修改全部撤销

一种是README.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是README.md已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

操作演示:

checkout

git status 之前有一次修改。

当将修改的文件提交到缓冲区的时候

首先,修改下文件。

用命令 git reset HEAD README.md 可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

# 接下来,还要 使用命令 git checkout -- README.md 来丢弃工作区的修改

操作演示:

reset

然后通过 git checkout -- README.md 丢弃工作区修改

reset

『第七节课』删除文件

首先添加一个文件 vim test_del.md , 再随便添加点内容。

然后本地删除文件 rm -rf test_del.md 文件

输入 git status 可以查看现在的状态,在下面的操作演示图片里面

当你也要将版本库中的文件删除的时候,就可以输入 git rm test_del.md 将其删除啦

当你是操作失误的时候, 可以输入 git checkout --test_del.md 将版本库中的文件拉取出来,覆盖本地的版本

操作代码

del

------ 本文结束 ------