github相关指令学习
正在廖雪峰官网学习关于git的相关知识,已经不是第一次来学习,但是忘得太快,索性这次边学边记录笔记,加深记忆,方便后期查看
1、找到一个合适的地方,鼠标右键 Git Bush Here ,新建文件夹,mkdir mygit(mygit为我所建的文件夹的名字)
2、进入到当前文件夹下 cd mygit
3、pwd 显示当前目录
4 、git init 把这个目录变成Git可以管理的仓库
此时git仓库已经建好,而且会告诉你这还少空的仓库,且在mygit文件夹下,会自动生成一个.git的目录,
这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
5、在mygit文件下编写一个readme.txt
文件,内容如下:
Git is a version control system. Git is free software.
在命令控制行输入 git add reame.txt ,告诉git把文件添加到仓库
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
6、git commit
告诉Git,把文件提交到仓库:
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
即前期步骤为:
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
-
第一步,使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; -
第二步,使用命令
git commit
,完成。
7、我们已经成功添加并提交了readme.txt文件,我们继续修改readme.txt文件,改成如下内容:
Git is a distributed version control system.
Git is free software.
8、输入
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
9、输入git diff,查看改变的详情
10、已经知道了改变了哪里,放心添加add
同样,没有任何提示
11、git commit
之前,我们再运行git status
看看当前仓库的状态:
git status
告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:
12、git commit -m 提交
13、提交后,我们再用git status
命令看看仓库的当前状态:
Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。
14、现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。
一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system. Git is free software distributed under the GPL.
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看:
git log
命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,
最早的一次是wrote a readme file
。 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是“add distributed”的那个版本,怎么做呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset
命令:
此时的readme.txt的内容已经回到add distributed版本
此时,我们再用git log看看日志
这个时候已经看不到append GPL版本了
此时,如果再想回到append GPL版本,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找,找到那个append GPL
的commit id
是2e2137...
,于是就可以指定回到未来的某个版本:
再看readme.txt 里的内容,
已经回到append GPL版本了
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^
回退到add distributed
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令:
小结:
15、工作区和暂存区
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
俗话说,实践出真知。现在,我们再练习一遍,先对readme.txt
做个修改,比如加上一行内容:
然后,在工作区新增一个LICENSE
文本文件(内容随便写)。
然后,git status
查看一下状态:
Git非常清楚地告诉我们,readme.txt
被修改了,而LICENSE
还从来没有被添加过,所以它的状态是Untracked
。
使用两次命令git add
,把readme.txt
和LICENSE
都添加后,用git status
再查看一下:
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的: