后续会持续更新java
在任何一个系统之中都会存在有多个开发者(多人协做开发),而在 GIT 之中,对于每个开发者(电脑),都须要 开发者本身定义本身的名字与 email 地址,以便进行方便的联系,此时须要配置全局信息。git
配置全局用户名及 email 地址缓存
git config --global user.name 'wzy' git config --global user.email '449245884@.com'
设置完成以后若是成功不会任何提示信息,能够经过以下命令查看全局配置信息:工具
git config -l
能够发现除了以前配置的用户名和 email 地址以外,还存在有其它的内容。学习
若是要开发项目,那么首先必须有一个仓库(能够简单的理解为是一个磁盘上的文件夹)。编码
mkdir myrpo
此时 mypro 文件夹是一个空的文件夹,没有任何的内容,只是一个纯粹的目录。spa
将 mypro 文件夹定义为仓库, 进入文件夹, 初始化仓库(将此目录变为能够被GIT管理的仓库) 3d
并且此时会提示,在 mypro 文件夹之中建立了一个“.git”的目录,这个目录就是仓库信息,死都不能改。版本控制
如今仓库建立完成以后,下面就要进行文件的基本管理了。首先在编写以前有一个说明:全部的文件必定要使用 UTF-8 编码,不然有可能会出现问题。指针
创建一个 Hello.js文件
btn.onclick = function() { console.log('每一次新增!'); }
察看当前仓库的状态
git status
在 "git status" 状态查询操做上能够发展有以下的几个提示信息:
添加文件到仓库
将文件加入到暂存库之中
git add hello.js
继续查询状态
此时有了一个最重要的信息:
如今的文件并无真正的提交到主分支上(主分支就是咱们真正要运行的程序的全部的代码)。
注意:全部修改的代码都会被 GIT 自动的监测到,全部的代码在使用 commit 提交以前必定要先使用 add 增长进来,不然不会有任何的提交。
若是如今不但愿分两步进行则能够在运行如下程序时增长一个“-a”的参数,表示先 add 然后 commit(git commit -a -m "注释")。
提交文件信息
git commit -m "New Js file - Hello.js Create"
在进行每次更新提交的时候通常都会为其增长上一些注释数据,因此使用“-m”参数来进行注释的编写。
此时这个“Hello.js”文件就被真正的提交到了主分支上,也就是意味着程序发布成功了。
查询状态
此时的状态会提示:没有任何的信息须要被提交,工做目录很干净。而在 git 工具下用户每一次进行的提交实际上都 会被日志纪录下来。
察看针对于“hello.js”文件的日志信息
首先会出现一个提交的信息号 “2e3e7018a965673a4154c84105b5d1a23f13167a”,能够理解为是每一次提交的 id 号。若是有屡次提交,那么这个日志信息也会愈来愈多。
上面代码已经能够成功的进行了发布,可是代码出现就是为了修改。因而如今来观察对于 git 工具如何去控制修改。
修改 hello.js 文件
btn.onclick = function() { console.log('每一次新增!'); console.log('第一次修改·!'); }
此时发现文件增长了一行的修改。
查询一下当前的仓库状态
如今 GIT 直接提示用户,文件没有保存到暂存区之中,并且提示有:要么你选择文件暂存,要么你直接进行文件的 恢复,同时给出了已经修改的文件“hello.js”。
察看文件的先后区别
git diff hello.js
如今能够发现全部增长的内容都会使用“+”表示,而被删除的信息都会使用“-”表示。
将修改后的代码加入到暂存区后进行提交
git commit -a -m "Update hello.js file. Add one lines"
察看修改日志
git log hello.js
经过以上的代码演示,如今能够清楚的发现,只要是修改的操做 GIT 均可以进行及时的跟踪。
工做区: 就是当前电脑的操做目录(包含 .git);
仓库:工做区有一个隐藏目录 .git,这个不算工做区,而是 git 的仓库,git 版本库里保存了不少东西,其中最重要的就是称为 stage 的暂存区,还有 git 为用户自动建立的主程序分支 master ,以及指向 master 的 head 指针。
概念解释:
修改 Hello.js
btn.onclick = function() { console.log('第二次修改·!'); }
增长一个 demo.js 文件
btn2.onclick = function() { console.log('demo click'); }
如今的工做区中的代码已经发生了变化。
用 status 跟踪
如今会提示有如下信息:
使用“git add”将代码添加到暂存区之中
git add .
本次操做使用了一个“.”,那么就表示所有加入。修改以后再次观察状态。
观察状态
数据保存在暂存区以后,下面就要进行代码的提交,将代码提交到主分支上。
当把暂存区的代码提交到主分支上以后,会自动的清空暂存区之中的内容。
提交修改代码
git commit -m 'add demo.js file'
那么此时再次查询状态。
那么会直接发现没有任何的文件修改的提示。
每当用户进行代码提交的时候都会自动的生成一个 commit id,而这个 commit id 就是进行代码回退的主要操做方式。
查询当前修改后的日志信息
git log --pretty=oneline
你们能够发现全部的 commit id 并非顺序的 一、二、3 编号,而是由系统生成一个十六进制数据,这一律念就跟 Session ID 相似,由 GIT 本身控制,主要是为了防止版本号的冲突。
在 master 分之上会有一个 HEAD 指针存在,而这个指针默认状况下永远指向最后一次提交的位置。
当使用回退以后发现 HEAD 指针出现了改变,若是回退一步,那么以前的操做不会被删除,可是全部的代码将回归到指定位置的状态。
**回退一步
git reset --hard HEAD~1
那么若是说如今还想恢复最新的状态呢?那么就必须找到回退的 commit id。
找到全部的已经删除的信息 commitid
git reflog
恢复最后一次提交
git reset --hard cc54c43
在有了暂存区和 master 主分支概念以后,就须要回避一个问题:只有保存在暂存区之中的内容才能够被真正的修改, 而不是针对于文件。
编写 hello.js 文件
btn.onclick = function() { console.log('个人小智'); }
以上是 =hello.js 文件的第一次修改。
将修改的文件增长到暂存区之中
git add.
此时并无提交,然后再次修改 hello.js 文件。
btn.onclick = function() { console.log('个人王大冶'); }
可是这个时候此文件并无使用 add 进行加入。
进行提交(提交的时候只提交暂存区的内容)
git commit -m "change print"
但是这个时候只是提交了第一次修改,而第二次修改并无提交。
查询状态
进行对比
git diff HEAD hello.js
HEAD 是指向最后一次提交的指针,如今的含义是将 HEAD 中的 Hello.java 文件与工做区的 Hello.java 文件进行对比。
总结:若是一个文件修改屡次了,那么就须要执行屡次的 add 后才能够提交,不然在 add 前的修改是不会被提交的。
状况一:在未增长(git add) 与提交前(git commit) 用户能够直接撤消对文件作出的修改操做。
状况二:在已增长(git add)与未提交前(git commit) 用户能够直接撤消对文件所作出的修改操做。
若是在工做区之中的代码并无增长到暂存区之中,那么若是要恢复到原始状态是很容易的。
如今假设修改了 hello.js
btn.onclick = function() { console.log('个人王大冶'); } 就是要改代码,不干走人了,老子不吃你这套
可是只要是文件一修改,那么 git 就能够当即跟踪到状态。
可是后来发现,此种修改实在是不该该进行,若是进行了,只能有一个结论:此人脑壳有问题。可是写代码的时候 可能不知道上一次修改状态。
恢复
git checkout -- hello.js
执行以后发现 Hello.java 文件就恢复到了一个原始的状态(上一次的提交状态)。
如今假设要修改的文件已经提交到了暂存区之中。
将 Hello.java 代码提交到暂存区中
git add.
当查询状态时:
在状态查询的时候已经给出了用户的提示,即:你能够根据 HEAD 指针来恢复文件。
从暂存区之中退出
git reset HEAD hello.js
因而再次查询状态
至关于如今已经由暂存区中保存的内容恢复到了工做区,那么既然在工做区了,就能够直接恢复原始状态。
恢复原始
git checkout -- hello.js
我的建议:养成良好的开发习惯,别像演示那样这么对待代码。
如今在仓库之中存在有 Demo.js 文件,可是假设这个文件今后以后再也不使用了呢?只有一个解决方案:删除。可是 在 GIT 里面对于删除文件这一功能严格来说也属于一个修改操做。
从磁盘上删除 Demo.js 文件
rm demo.js
当文件删除以后下面查询状态;
这个时候文件是从当前工做区的磁盘中删除了,同时也提示文件被删除。
提交更新
git commit -a -m "Delete Demo.java File"
可是若是说发现文件被删除错误了呢?则应该进行恢复。
恢复文件
git reset --hard bc8e842247b3d78
若是文件被删除,则只可以利用版本控制的方式进行恢复。
以上主要对总结于李兴华老师的课程,你们有兴趣能够去网易去上观看
你的点赞是我持续分享好东西的动力,欢迎点赞!
一个笨笨的码农,个人世界只能终身学习!
更多内容请关注公众号《大迁世界》!