通俗易懂的 Git入门
安装
以macOS为例,git官方已经提供了各种方式友好的安装方案,只需要选择其一进行安装即可。
使用
基本使用
确认安装无误
安装git
以后,打开终端工具,输入以下指令,查看所安装git
的版本,以检查安装正常
git --version
上述命令会输出类似如下的内容则为正常
git version 2.18.0
配置用户信息
确认好git
正常安装后我们开始使用的第一步是配置git
的用户信息。
因为git
也是一款普通的软件,只不过它是一款版本控制软件
,一般面向软件开发者。开发者使用git
做版本控制,版本控制的内容可能是代码、文档或其他,在每一次内容发生变更的时候,git
需要知道变更者的用户信息,因为这也是变更
信息中的一部分。
比如,Wilson
在2021-08-16 23:12:48
新增了一个README.md
文件,这就是一条合理的git
历史记录。
git
不仅支持在本地对内容进行版本管理
,还支持联网
使用,也就是你可以把你的文件发到网上,这些文件的历史记录
可以与其他git
用户共享。
假如我和另一个人共同维护README.md
这个文件,如果TA认识我的git名称
——Wilson,那么可以方便地通过某种方式找到我。但如果我和TA是素未谋面的网友,这时候git
用户信息中增加邮箱
信息便显得非常有必要。
所以在使用git
前,用户名
+邮箱
是必须的两项基本配置,我们可以在终端内输入以下两行指令来设置我们的git用户信息
。
git config --global user.name=Wilson
git config --global user.email=scorpioaoe@gmail.com
初始化git仓库
在完成用户信息
配置后,我们可以开始使用git
对我们的文件进行版本管理
,那么git
的管理范围是如何圈定的呢,这就涉及到仓库
的概念。
我们都知道任何操作系统都有文件系统
,macOS/Linux/Windows都有各自的文件系统,其中目录
(或称文件夹)一般可以作为一个用于被git
进行管理的仓库。当我们在某个目录内使用如下命令时,git
会在当前所在目录创建一个.git
目录,用于存储git
对于该目录的所有控制信息。
git init .
上面的.
表示当前目录,当然这个值也可以是其他合理的目录名称,那么git
将会在指定的目录创建.git
目录。
一般文件系统中以.
为前缀的目录或文件会默认隐藏,如果看不到.git
目录可通过执行ls -a
查看(包含隐藏文件的)所有文件(或者在Windows的设置中选择查看隐藏文件)
查看git仓库状态
当某个目录成为git
仓库后,我们便可以开始使用一系列git
常用命令,其中最为常用的则是查看仓库状态
命令,使用如下
git status
例如,在一个空目录中会展示以下内容
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
这三行输出信息的意思分别是“当前在master分支”、“还没有提交记录”和“没有可以提交的内容(创建或复制文件并使用git add来进行跟踪)”
这三行信息包含了git
的核心常用功能,那么就让我们一同进入到常用功能小节
常用功能
分支
分支是一个有趣的概念,有点像时间线的意思。表面上来看,不同的git分支
像是一份份拷贝,但其实它的实现更为精妙,我们将在后续的高级篇章中探究。
你可以先理解为,分支就是一份份拷贝。只不过这个拷贝不单单是对于文件的拷贝,而且是包含文件所有历史记录的拷贝。
比如,我们现在在默认的master
分支(也可能是main分支)。我们可以使用如下命令来创建一个新分支,新分支的内容便是这一刻对于当前分支的拷贝。
git checkout -b dev
在执行上述命令后,控制台会输出
Switched to a new branch 'dev'
这表示我们创建了一个新的名为dev
的分支并切换到了dev
分支上。这一刻的dev
分支内容与原先的master
分支除了名称完全一样,即它们拥有相同的文件,拥有相同的历史记录。
那么你可能会想,那我们要分支作何用呢?分支的作用其实有很多,比如不同用户对于同一个目录的文件做修改,可以在各自创建的分支内进行修改和记录,这样可以互不干扰。对于分支的使用,我们会在后续继续讨论。
提交记录
到现在为止,我们还没有对文件进行过修改,所以自然也就没有产生文件的修改记录。让我们随便做些事情,比如在目录中创建一个README.md
文件,内容可以为空。
git
对于管辖范围内的一举一动都尽在掌握之中,因此我们刚刚创建的README.md
文件已经被git
所发觉。那我们要怎么知道git
对于当前文件变化的感知呢,可以使用如下命令进行查看
git status
上面命令的输出会是
status输出
On branch dev
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
这个命令的作用是查看git
对于仓库内当前所有文件状态的感知,status
即是状态
的意思。
我们来逐行解析一下上面的输出信息所传达的含义:
当前在`dev`分支
尚无提交记录
未进行跟踪的文件:
(使用 “git add 文件名” 来将想要提交的内容纳入)
README.md
没有纳入任何内容可以被用来提交,只有未被跟踪的文件展示如上(使用 git add 命令来跟踪文件)
这里反复提到另外一个重要的命令git add
,那么就让我们实践一下它。
跟踪
git add
命令可以将该命令中所指定的文件或目录纳入到git
的跟踪(track)范围。那么跟踪是什么意思呢?可以理解为仓库
内的文件或目录都在git
的管辖范围,但只有纳入跟踪的内容才会产生历史记录
,而其他文件如果未被纳入跟踪,则会一直”漂浮“在仓库里,仅此而已。
我们的仓库内现在只有一个README.md
文件,那让我们使用git add
将其纳入git
的跟踪范围,如下
git add README.md
输出上述命令后不会有任何提示,但是仓库的文件状态其实发生了变化,我们需要使用git status
来查看这一刻的仓库内状态。
git status
输出如下信息
On branch dev
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
前两行信息同前面status输出一样,但这次中间的核心内容发生了改变,解释如下
发生如下变更等待提交:
(使用 ”git rm --cache 文件名“ 来脱离跟踪)
新建文件: README.md
看到了吗,我们在文件系统中操作的一举一动其实都被git
观察到了,包括新建一个文件。git
对于这类操作有着自己的定义,比如新建文件就对应new file
。
当我们使用git add 文件名
来告诉git
跟踪某个文件后,git
就会跟踪这个文件的一举一动,包括新增/删除/修改
等操作。而这一系列动作的每一次举动,对于git
来说都是一条记录。
那么如何显式地告诉git
记下一条记录,即我们对文件的某次一系列操作想被记录下来,那么就要使用到另外一个命令git commit
来实现了。
提交记录
当我们使用git commit
,git
会将上一次git commit
至目前范围内,所有被跟踪文件
(git只会对跟踪范围内的文件做有效记录)的变动进行一次记录,记录的内容会是这些文件的所有变动,包括新增/删除/修改
,其中最为常用的就是文件的修改
,可能是文件名的重新命名,或是文件里的内容修改。
我们试着在命令行输入git commit
进行一次提交,首先会像如下进行vi
编辑器
1
2 # Please enter the commit message for your changes. Lines starting
3 # with '#' will be ignored, and an empty message aborts the commit.
4 #
5 # On branch dev
6 #
7 # Initial commit
8 #
9 # Changes to be committed:
10 # new file: README.md
11 #
你可以按下i
键进入输入模式
,输入对于这次提交的描述信息
,比如我们这次就只是新建了一个名为README.md
的文件,这里可以就输入add readme
。
然后按下Esc
键退出输入模式
,接着按下:
键(注意使用英文输入法),调出命令输入板,并输入wq
以表示保存并退出
。
随即,控制台会显示出如下内容
[dev (root-commit) ff44b28] add readme
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
这就表明我们成功提交了一条git
记录,记录id前缀为ff44b28
,这个值每个人的每次提交都会不一样,用来唯一标识一次提交记录。
这时再来使用git status
查看仓库的状态,显示如下
On branch dev
nothing to commit, working tree clean
在dev分支
没有什么可被提交的内容,工作树干净
这就说明我们当前的仓库内,文件的变更已经被git
记录下来,并且截至目前,没有新的文件变化出现,整个仓库干净整洁。
总结
到这里,我们完成了git
在一个基本生命周期内的所负责的各项事务,我们来梳理一下用过的命令:
git --version
git config
git init
git checkout
git status
git add
git commit
其中第一个用于确认git
的版本信息,也是一种检查git
是否正常安装的方式。
第二个用于在初次使用git
时进行用户信息
的配置。
第三个用于将某个目录(文件夹)作为git
可以管辖的仓库,进行初始化操作。其中init
就是initial(初始化)
的意思,其结果为产生一个.git
目录,里面存放关于当下git
仓库的全部信息(包括分支信息、提交记录等)。
最后四个是一组git
基本操作的常用命令,分别为切换分支
、查看仓库状态
、将文件纳入git跟踪范围
和提交记录
。
掌握以上内容,你可以算是对于git
完成了一个初步的入门学习,但如果想利用git
帮助你完成更多高效有用的事情,还需要继续学习git
的其他高级命令。如果你对git
的使用有兴趣的话,就继续关注后续的git
内容讲解吧,或者也通过网上其他git
学习资料进行学习。
转载自:https://juejin.cn/post/6997072680247787527