慢慢修正

This commit is contained in:
notfreshmbp
2020-11-07 08:57:57 +08:00
parent 466cc6c13c
commit 7163637e3f
4 changed files with 85 additions and 52 deletions

Binary file not shown.

View File

@@ -1,29 +1,20 @@
# git 教程1--- git 初级主题和入门
# git 初级主题和入门
本教程面向初学者,没有接触过版本控制概念的读者也可以轻松入门
这篇文章的目的是教会初学者轻松掌握Git理解Git的设计理念
本教程的特点是边学边练一点也不觉得枯燥。而且你所学的Git命令是“充分且必要”的掌握了这些东西你就可以通过Git轻松地完成你的工作
这篇文章的目的是,教会**常用的、简单的、高频的**Git命令
同时,本教程的目标是快速教会你Git的基本操作,后续的高级操作和原理,会在后面的教程详细解释
学习本教程的方法是,跟着做,一边做一边思考和理解。光看不练只会转头就忘。
另外说明:本篇教程演绎自廖雪峰的 git教程我在此基础上增加了一些细节的东西并且会进一步深入的探究 git 的一些原理,这个系列教程会比廖雪峰的更加深入一些,可能会关于一些更有趣的内容,并且注重讲透某些命令的本质原理。
## 目录和知识点
- ssh和https
- git的权限管理
这篇文章的目的是,不仅理解Git的操作还能大概理解其背后的原理
学习这篇文章最好的方法是,跟着做,一边做一边思考和理解。
本篇教程演绎自廖雪峰的 git教程我在此基础上增加了一些细节的东西并且会进一步深入的探究 git 的一些原理,这个系列教程会比廖雪峰的更加深入一些,可能会关于一些更有趣的内容,并且注重讲透某些命令的本质原理。
## 为什么要用版本管理工具?
在进入本教程之前,首先说明一下为什么需要使用版本管理工具。
首先说明一下为什么需要使用版本管理工具。
如果只有一个文件,那么每次修改后保存一下就可以。
@@ -70,7 +61,7 @@ $ git init
Initialized empty Git repository in /Users/liaoxuefeng/learngit/.git/
```
瞬间Git就把仓库建好了而且告诉你是一个空的仓库empty Git repository细心的读者可以发现当前目录下多了一个`.git`的目录这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了就把Git仓库给破坏了
瞬间Git就把仓库建好了而且告诉你是一个空的仓库empty Git repository细心的读者可以发现当前目录下多了一个`.git`的目录这个目录是Git来跟踪管理版本库的不要手动修改这个目录里面的文件,我也从来不曾修改过里面的文件
如果你没有看到`.git`目录,那是因为这个目录默认是隐藏的,用`ls -ah`命令就可以看见。MacOS用户可以使用 `command + shift + . `在 finder 下查看隐藏文件)
@@ -78,11 +69,19 @@ Initialized empty Git repository in /Users/liaoxuefeng/learngit/.git/
当然,也可以在别人的仓库上修改,使用到 git clone 命令,我们后续会讲到。
## 把文件添加到版本库
首先这里再明确一下,所有的版本控制系统其实只能跟踪文本文件的改动比如TXT文件网页所有的程序代码等等Git也不例外。版本控制系统可以告诉你每次的改动比如在第5行加了一个单词“Linux”在第8行删了一个单词“Windows”。而图片、视频这些二进制文件虽然也能由版本控制系统管理但没法跟踪文件的变化只能把二进制文件每次改动串起来也就是只知道图片从100KB改成了120KB但到底改了啥版本控制系统不知道也没法知道。
首先这里再明确一下,现在的版本控制系统其实只能跟踪文本文件的改动比如TXT文件网页所有的程序代码等等Git也不例外。
如果要真正使用版本控制系统,就要以纯文本方式编写文件。比如记事本文件 *.txt或者markdown文本或者各种代码文件比如 *.c, *.java, *.py, *.html 。
版本控制系统可以告诉你每次的改动比如在第5行加了一个单词“Linux”在第8行删了一个单词“Windows”。
而图片、视频这些二进制文件虽然也能由版本控制系统管理但没法跟踪文件的变化只能把二进制文件每次改动串起来也就是只知道图片从100KB改成了120KB但到底改了啥版本控制系统不知道也没法知道。
原因是文本文件的基本单位是行Git可以清楚的看到一行的变化而二进制文件的格式则是不同的由产生这个文件的程序规定所以管理起来非常的麻烦和复杂。
所以,如果要使用版本控制系统,就要以纯文本方式编写文件。比如记事本文件 *.txt或者markdown文本或者各种代码文件比如 *.c, *.java, *.py, *.html 。
现在我们编写一个`readme.txt`文件,内容如下:
@@ -103,7 +102,11 @@ $ git add readme.txt
执行上面的命令没有任何显示这就对了Unix的哲学是“没有消息就是好消息”说明添加成功。
第二步,用命令`git commit`告诉Git把文件提交到仓库
> “没有消息就是好消息”并不是一个放之四海而皆准的道理,有的时候需要消息。
>
> 因为有的时候人们渴望看到提示和反馈比如你从自己的银行账户里存了一笔钱你肯定希望银行给你发个消息确认一下的对吧。不要迷信什么Unix哲学。这个哲学的前提是人们确信这是一个可靠的系统所以不需要提示提示了肯定是坏消息。
第二步,用命令 `git commit` 告诉Git把文件提交到仓库
```
$ git commit -m "wrote a readme file"
@@ -112,11 +115,17 @@ $ git commit -m "wrote a readme file"
create mode 100644 readme.txt
```
> 当你commit 的时候Git 会给我们提示因为它知道提示是必须的。可以让人确信自己的操作是对的。曾经有一个人总爱跟我强调没有消息就是好消息一昧的不给提示和模仿Unix的行为这是错误的
简单解释一下`git commit`命令,`-m`后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
`git commit`命令执行成功后会告诉你,`1 file changed`1个文件被改动我们新添加的readme.txt文件`2 insertions`插入了两行内容readme.txt有两行内容
为什么Git添加文件需要`add``commit`一共两步呢?因为`commit`可以一次提交很多文件,所以你可以多次`add`不同的文件,比如:
> 如何写一个好的消息呢?这个值得大书特书,现在先简单的提一下,这个消息应该是让人印象深刻,容易回忆起自己干了什么的。这个是最重要的原则,至于中文,英文,动宾结构,那都是次要的。
为什么Git添加文件需要`add``commit`一共两步呢?先这么记住,这确实有点烦,我们后面会解释。
因为`commit`可以一次提交很多文件,所以你可以多次`add`不同的文件,比如:
```
$ git add file1.txt
@@ -161,7 +170,38 @@ index 46d49bf..9247db6 100644
Git is free software.
```
`git diff`顾名思义就是查看difference显示的格式正是Unix通用的diff格式可以从上面的命令输出看到我们在第一行添加了一个`distributed`单词。
`git diff`顾名思义就是查看difference显示的格式正是Unix通用的diff格式可以从上面的命令输出看到我们在第一行添加了一个`distributed`单词。关于diff 命令的格式,我们简单介绍一下,它有一个漫长的发展史,有兴趣的可以查阅资料,但是我们现在直奔主题,来看看它到底是什么意思。
还记得我们上一次修改的文件是什么样子吗?
```
Git is a version control system.
Git is free software.
```
改成了
```
Git is a distributed version control system.
Git is free software.
```
所以, 我们来看看Git diff怎么阅读。
@@ -1,2 +1,2 @@
`-` 表示第一个文件,`+`表示第二个文件,`-1,2`表示下面展示的是第一个文件第1行开始连续2行的内容。
-表示第一个文件的内容,+表示第二个文件的内容,没有+、-的表示没有变动的内容。
```
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
```
知道了对`readme.txt`作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是`git add`
@@ -198,7 +238,7 @@ nothing to commit, working tree clean
Git告诉我们当前没有需要提交的修改而且工作目录是干净working tree clean的。
> 补充一下,
**总结一下:**

View File

@@ -1,49 +1,32 @@
# 简答题
# 入门版
1. 什么是Git?
2. Git的发明者是谁
3. Git和SVN有什么区别?
3. Git和Github有什么区别?
4. 在一个新电脑上使用Git的第一步是做什么
5. 一个合格的程序员应该使用图形化界面还是命令行界面的Git?
6. 请列举5到10个常用的Git命令
7. 如果你对Git不懂你应该去什么地方找答案或者阅读哪里的教程
# 进阶版
1. 什么是索引区?工作区?版本区?
2. git diff 命令如何使用?
3.
# Git应用场景考试
问题1. 假设一个仓库中很多次提交在某次提交中有加入a.txt这个文件后来在另一个提交中a.txt被改名为a2.txt并且从此保持不变。 如何查找a.txt第一次出现的提交请列出使用到的命令.
问题2. 如果有两个已经分叉的分支branchX和branchY, 如何查看branchX有而branchY没有的分支写出用到的命令
问题3: 如果branchX和branchY指向同一个提交, 现在工作目录有东西没有提交, 请问可以正常切换分支吗?
问题3.1 如果如果branchX和branchY没有指向同一个提交, 现在工作目录有东西没有提交, 请问可以正常切换分支吗?
问题3.1 如果如果branchX和branchY没有指向同一个提交, 现在工作目录有东西没有提交, 请问可以正常切换分支吗?
# 入门版
1. 什么是Git?
2. Git的发明者是谁
3. Git和SVN有什么区别
4. 在一个新电脑上使用Git的第一步是做什么
5. 一个合格的程序员应该使用图形化界面还是命令行界面的Git?
6. 请列举5到10个常用的Git命令
7. 如果你对Git不懂你应该去什么地方找答案或者阅读哪里的教程
# 进阶版
1. 什么是索引区?工作区?版本区?
# Git应用场景考试
1. 假设一个仓库中很多次提交在某次提交中有加入a.txt这个文件后来在另一个提交中a.txt被改名为a2.txt并且从此保持不变。
如何查找a.txt第一次出现的提交请列出使用到的命令。
2. 如果有两个已经分叉的分支branchX和branchY, 如何查看branchX有而branchY没有的分支写出用到的命令
git log branchY..branchX
note: 两个点不是三个点。

10
gitignore.md Normal file
View File

@@ -0,0 +1,10 @@
```
*
!*.md
!*.jpg
!*.png
!*/ # 深层忽略,放到后面
```