2

图像具备强大的威力

引言

那是我在做毕业设计的时候,使用IDEA作为开发工具,我对系统做了比较大的改动,然后系统又跑不起来了,当时在宿舍写代码的我只想扇我自己的脸,我就想到了能不能将系统回退到正常运行的版本呢,但是我又没有使用版本控制工具,不过还好IDEA自带了一个文件历史记录,我又回退正常版本了。我想这就是版本控制工具的第一个功能吧,版本回退。

image.png

除了版本控制之外,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是一个免费开源的分布式版本控制系统,被设计用来管理小型到大型的项目。

分布式 VS 集中式

  • 集中式版本控制工具需要一个中央服务器。代码最终被提交这里。
  • 分布式版本控制系统没有"中央服务器的概念"。每个人电脑都有一个完整的版本库。

    那可能有人就会问了,那我的代码提交到哪里呢? 只存在本地吗?

既然是多人协作,我们就需要指定一台服务器作为总仓库。每个人将自己所做的提交到这个服务器上,每天从这个服务器上拉取别人的修改。

那GitHub是?

GitHub是一个代码托管网站。开发者将自己的代码放到GitHub上。

有啥用

  我们想象一下,开发团队不使用版本控制工具或者没有版本控制工具会怎么样呢?

  一个团队不同的人开发的功能,该怎么整合在一起呢?好,你通过复制,然后开发人员如何获取最新的代码呢?

   假定公司设定了这么一个岗位专门用来合并代码,我们称之为代码合并官吧! 代码合并官每天早上把最新的代码通过邮件再发给各个开发者。然后开发者再把用邮件中的最新代码覆盖自己的。

  然后某天,CTO(首席技术官)改错了一个东西,想想看最新的代码,然后想看看之前的是什么样的。代码合并官表示,不用担心,你发的代码我都按天建文件夹,稍等一下,我给你找找。

  上面的场景一想就很恐怖。程序员们不会让上面的场景出现,因为上面的工作是重复的,要知道复用可是我们的追求。

  版本控制工具可以做到,将开发者的代码汇集在一起,让开发者每天拉取到最新的代码。还可以记录文件历史,假如的误操作,把正确的代码改成错了,你就可以回退到正常的版本。又比如吧,项目经理决定兵分两路,一路接着开发新的功能,一路修复bug。你就可以做一个分支,在一个分支上开发新的功能,在另一个分支上修复bug。修的差不多了,然后把两个分支合并在一起。

总结一下版本控制工具有啥用: 
  • 整合代码(将各个开发者的代码汇集在一起),高级一点的名字叫团队协。
  • 记录文件历史(让你有后悔药可以吃)。版本控制
  • 做分支(branch),分支大体上有下两个作用:

    • 一路修bug,一路做新的功能。
    • 代码要区分为个人版、企业版。个人版和企业版相同功能做完之后,做一个分支出来,团队就被切分为两组,不同的团队在不同的分支上开发。

怎么用?

要想用,你需要首先要下载Git。下载安装不做介绍。网上有详细的教程。

git基础概念

在学怎么用之前,我们首先介绍Git的一些基础概念。

  • 工作区(workspace): 就是你存放代码的地方。(要执行Git init指令,产生.git文件夹之后)
  • 暂存区(index): 工作区未被Git所控制的文件,在被控制之后就转到暂存区
  • 本地仓库: 暂存区的文件,假定为a.txt,执行git commit a.txt -m'测试',就转入本地仓库
  • 远程仓库: 处于本地仓库的文件, 执行git push -u 推送到远程仓库

image.png

在流程图中已经出现了一些Git的命令:

  • git add
  • git commit
  • git checkOut
  • git pull
  • git push
  • git fetch/clone

后文会将对这些命令进行详细的介绍.

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 文件。
里面就记录了你设置的账户和密码

add commit

这里我新建一个文件叫gitstudy,

image.png
image.png

git status: 查看工作区 暂存区的状态

工作区的文件有以下几种状态:

 unstatge:  未纳入版本控制,处于工作区
 statge: 加入版本控制,进入暂存区
 commited: 进入本地仓库
 

我在gitstudy下新建一个文件,不执行任何指令,那么该文件就处于unstatge。

例子:

image.png


 staged: 纳入版本控制
    在 git bash here 中执行: git add 文件全名 
    代表把指定的文件加入版本控制中,也就是放入暂存区。
    git add . 代表将所有的untracked的文件都加入暂存区。
 
 平时用git bash here用习惯了,Git还提供了图形化界面,虽然很简陋。 
 

image.png
image.png

执行git add d.txt 将文件推送至暂存区

image.png

执行git status 查看工作区、暂存区的状态

image.png

执行git add . 将所有不在暂存区处于工作区的文件推进暂存区

image.png

我们用git status 查看工作区、暂存区的状态

image.png

我们发现untracked files 就没有了。

image.png

进入暂存区的命令有两个:

  • git add 文件全名 将处于工作区不在暂存区的指定文件加入到暂存区
  • git add . 将处于工作区不在暂存区的所有文件加入到暂存区

将暂存区的文件推至工作区的命令也有两个:

  • git commit 文件全名 -m'每次推本地仓库的注释'

       将处于暂存区不在本地仓库的指定文件推进至本地仓库

  • git commit . -m'每次推进本地仓库的注释'

       将处于暂存区不在本地仓库的所有文件推进至本地仓库

看日志

最简单的命令就是: git log
这个命令列出所有的提交记录。

image.png

image.png

commit 5663dd0764d5ddd2f645737437f22c447ab772a7

commit 后的字符串是用加密算法(SHA1(不叫sha yi,叫sha one) 算法)产生的,用来标识每一次提交操作。

可能有人要问了,为什么你不用第几次提交了标识呢?

软件开发过程中大家是一起干活的, 假若有两个人的某一次的提交次数是相同的,那远程仓库怎么标识这两个提交呢.
所以还是用加密算法产生提交标识更为稳妥

那可能有人还是要问了?

 我只想看最近几次。我只想看最近三次该怎么办呢?
 git log -次数: 查看最新的三次提交

image.png

git log --graph

image.png

  • 那我一不小心把注释打错了怎么办?

    没关系可以重写。

git commit --amend -m'注释信息' 覆盖最近一次的提交信息

例子:
image.png

push 推送

 如何将你的代码推给别人,或者推到服务器上呢?
  • 假如你是拉公司的代码,拉下来的代码中就有.git文件夹。该文件夹中就有远程服务器的信息。

    你将修改的文件从暂存区推进至本地仓库。后 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 就可以将工作区的代码推送到远程仓库了。

删除 回退

误提


假如我误提交了一个文件呢。 没关系可以是删。

删除的两种方式:


直接调用操作系统的删除。
    

image.png
image.png

Changes not staged for commit,怎么理解这句话呢,not staged 没有暂存。 没暂存,也就是不在暂存区。还处于工作区。我们需要将这个删除命令也进入到暂存区,本地仓库区.

image.png

changes to be commit: 删除操作没有到本地仓库区。

我们commit一下,这个文件就被删除了。

image.png

Your branch is ahead of 'origin/master' by 1 commit. 这句话是说,我本地的分支不一致。我本地的比较新。
建议我执行git push。


调用git命令进行删除:
    

image.png
image.png

changes to be commited 也就是说命令已经到暂存区,还没有到工作区。

我们在执行 git commit . -m'删除本地仓库的文件'。工作区、暂存区、本地仓库区就保持一致了。
image.png

误删

那假如我误删了呢?


关系不是很大,操作系统上有撤销操作,版本控制工具上也有后悔药可吃.    

那怎么吃这个后悔药呢?

image.png

reset: 调整; 重新设置; 重新安置; 将…恢复原位.

注意这个恢复原位

image.png

执行完 git reset head d.txt

Changes not staged for commit: 说明删除操作还没有到暂存区。你也可以认为是文件从暂存区到工作区了。
然后git认为你想做以下两件事情:

  • (use "git add/rm <file>..." to update what will be committed) 可以

    • 使用 git add 或者 git rm 将你的操作也在暂存区执行一份。
  • (use "git checkout -- <file>..." to discard changes in working directory)

    • 执行git checkout -- 文件全名。 就是你误删了某个文件,执行该命令后,丢弃删除操作,恢复该文件。

北冥有只鱼
147 声望35 粉丝