mirror of
https://github.com/notfresh/git_faq.git
synced 2026-06-04 16:34:23 +08:00
慢慢修正
This commit is contained in:
BIN
Git和Github入门-简易版.pptx
Normal file
BIN
Git和Github入门-简易版.pptx
Normal file
Binary file not shown.
@@ -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)的。
|
||||
|
||||
|
||||
> 补充一下,
|
||||
|
||||
**总结一下:**
|
||||
|
||||
|
||||
41
Git考试.md
41
Git考试.md
@@ -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
10
gitignore.md
Normal file
@@ -0,0 +1,10 @@
|
||||
```
|
||||
*
|
||||
|
||||
!*.md
|
||||
!*.jpg
|
||||
!*.png
|
||||
|
||||
!*/ # 深层忽略,放到后面
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user