图像具有强大的威力git
那是我在作毕业设计的时候,使用IDEA做为开发工具,我对系统作了比较大的改动,而后系统又跑不起来了,当时在宿舍写代码的我只想扇我本身的脸,我就想到了能不能将系统回退到正常运行的版本呢,可是我又没有使用版本控制工具,不过还好IDEA自带了一个文件历史记录,我又回退正常版本了。我想这就是版本控制工具的第一个功能吧,版本回退。
除了版本控制以外,Git仍是一个团队协做工具,什么意思呢?在企业的开发过程当中,咱们都是不一样的人开发不一样的功能,可是这又是一个系统上面的东西,咱们不可能使用U盘这种初级的方式将本身开发完成的功能拷到主系统上去。咱们就可使用Git将开发完成的代码提交到正在开发的系统中。
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.程序员
Git是一个免费开源的分布式版本控制系统,被设计用来管理小型到大型的项目。
那可能有人就会问了,那个人代码提交到哪里呢? 只存在本地吗?github
既然是多人协做,咱们就须要指定一台服务器做为总仓库。每一个人将本身所作的提交到这个服务器上,天天从这个服务器上拉取别人的修改。算法
GitHub是一个代码托管网站。开发者将本身的代码放到GitHub上。
咱们想象一下,开发团队不使用版本控制工具或者没有版本控制工具会怎么样呢? bash
一个团队不一样的人开发的功能,该怎么整合在一块儿呢?好,你经过复制,而后开发人员如何获取最新的代码呢? 服务器
假定公司设定了这么一个岗位专门用来合并代码,咱们称之为代码合并官吧! 代码合并官天天早上把最新的代码经过邮件再发给各个开发者。而后开发者再把用邮件中的最新代码覆盖本身的。分布式
而后某天,CTO(首席技术官)改错了一个东西,想一想看最新的代码,而后想看看以前的是什么样的。代码合并官表示,不用担忧,你发的代码我都按天建文件夹,稍等一下,我给你找找。工具
上面的场景一想就很恐怖。程序员们不会让上面的场景出现,由于上面的工做是重复的,要知道复用但是咱们的追求。开发工具
版本控制工具能够作到,将开发者的代码聚集在一块儿,让开发者天天拉取到最新的代码。还能够记录文件历史,假如的误操做,把正确的代码改为错了,你就能够回退到正常的版本。又好比吧,项目经理决定兵分两路,一路接着开发新的功能,一路修复bug。你就能够作一个分支,在一个分支上开发新的功能,在另外一个分支上修复bug。修的差很少了,而后把两个分支合并在一块儿。测试
总结一下版本控制工具备啥用:
作分支(branch),分支大致上有下两个做用:
要想用,你须要首先要下载Git。下载安装不作介绍。网上有详细的教程。
在学怎么用以前,咱们首先介绍Git的一些基础概念。
在流程图中已经出现了一些Git的命令:
后文会将对这些命令进行详细的介绍.
设置邮箱、帐户名: 范围: --global use global config file (给整个计算机一次设置,给当前计算机上的全部用户) --system use system config file (经常使用,给当前用户一次性设置) --local use repository config file (给当前项目一次性设置) 从范围上看,global > system > local 可是小范围的会覆盖掉大范围的。
记录文件的提交历史,谁提交的,何时提交的。 咱们称之为日志。 注意只有将文件从暂存区推动本地仓库才会有日志。
git config --范围 user.name '你的用户名' git config --范围 user.email '你的邮箱'
例子:
git config --system user.name 'fish' git config --system user.email 'fish@qq.com'
local 范围 :
在.git 文件夹下的config文件中。
system
进入根目录下, 打开 git bash here 后, 执行cd ~命令. 下面会有一个.gitconfig 文件。 里面就记录了你设置的帐户和密码
这里我新建一个文件叫gitstudy,
git status: 查看工做区 暂存区的状态
工做区的文件有如下几种状态:
unstatge: 未归入版本控制,处于工做区 statge: 加入版本控制,进入暂存区 commited: 进入本地仓库
我在gitstudy下新建一个文件,不执行任何指令,那么该文件就处于unstatge。
例子:
staged: 归入版本控制 在 git bash here 中执行: git add 文件全名 表明把指定的文件加入版本控制中,也就是放入暂存区。 git add . 表明将全部的untracked的文件都加入暂存区。 平时用git bash here用习惯了,Git还提供了图形化界面,虽然很简陋。
执行git add d.txt 将文件推送至暂存区
执行git status 查看工做区、暂存区的状态
执行git add . 将全部不在暂存区处于工做区的文件推动暂存区
咱们用git status 查看工做区、暂存区的状态
咱们发现untracked files 就没有了。
进入暂存区的命令有两个:
将暂存区的文件推至工做区的命令也有两个:
将处于暂存区不在本地仓库的指定文件推动至本地仓库
将处于暂存区不在本地仓库的全部文件推动至本地仓库
最简单的命令就是: git log
这个命令列出全部的提交记录。
commit 5663dd0764d5ddd2f645737437f22c447ab772a7
commit 后的字符串是用加密算法(SHA1(不叫sha yi,叫sha one) 算法)产生的,用来标识每一次提交操做。
可能有人要问了,为何你不用第几回提交了标识呢?
软件开发过程当中你们是一块儿干活的, 倘若有两我的的某一次的提交次数是相同的,那远程仓库怎么标识这两个提交呢.
因此仍是用加密算法产生提交标识更为稳妥
那可能有人仍是要问了?
我只想看最近几回。我只想看最近三次该怎么办呢? git log -次数: 查看最新的三次提交
git log --graph
不要紧能够重写。
git commit --amend -m'注释信息' 覆盖最近一次的提交信息
例子:
如何将你的代码推给别人,或者推到服务器上呢?
你将修改的文件从暂存区推动至本地仓库。后 git push -u 就能够了。
你就须要设定推送的目的地。
执行下面的命令:
git remote add origin 远程仓库的地址
个人远程仓库地址是:
git@github.com:CXK6013/studyGit.git
因此我执行的是:
git remote add origin git@github.com:CXK6013/studyGit.git
origin 后面的就表明目的地,最后一块确定是项目名.git这种形式
一台计算机上的文件夹不是什么都不作就成为了远程仓库。
至于怎么使一台计算机上的文件夹成为远程仓库。那是后文讨论的问题了。
而后执行 git push 就能够将工做区的代码推送到远程仓库了。
假如我误提交了一个文件呢。 不要紧能够是删。
删除的两种方式:
直接调用操做系统的删除。
Changes not staged for commit,怎么理解这句话呢,not staged 没有暂存。 没暂存,也就是不在暂存区。还处于工做区。咱们须要将这个删除命令也进入到暂存区,本地仓库区.
changes to be commit: 删除操做没有到本地仓库区。
咱们commit一下,这个文件就被删除了。
Your branch is ahead of 'origin/master' by 1 commit. 这句话是说,我本地的分支不一致。我本地的比较新。
建议我执行git push。
调用git命令进行删除:
changes to be commited 也就是说命令已经到暂存区,尚未到工做区。
咱们在执行 git commit . -m'删除本地仓库的文件'。工做区、暂存区、本地仓库区就保持一致了。
那假如我误删了呢?
关系不是很大,操做系统上有撤销操做,版本控制工具上也有后悔药可吃.
那怎么吃这个后悔药呢?
reset: 调整; 从新设置; 从新安置; 将…恢复原位.
注意这个恢复原位
执行完 git reset head d.txt
Changes not staged for commit: 说明删除操做尚未到暂存区。你也能够认为是文件从暂存区到工做区了。
而后git认为你想作如下两件事情:
(use "git add/rm <file>..." to update what will be committed) 能够
(use "git checkout -- <file>..." to discard changes in working directory)