GIT:基础指令

什么是Git

1、Git是一个分布式版本控制系统(Version Control System,VCS)

2、版本控制是一种在开发过程中用于对文件、目录、工程等内容的修改的管理和备份,以便查看历史记录和恢复以前版本的软件工程技术

3、Git是一种版本控制系统,是一个命令集,是一种命令,那么GitHub就是基于Git实现的在线代码仓库,它包含一个网站界面,向互联网开放,用于创建公共的仓库,如果用户想创建私有仓库则需要付费;GitLab也是基于Git实现的在线代码仓库,支持用户创建公共和私有的仓库,一般用于企业、学校等内部网络搭建Git私服

 

GIT中常用术语

1、仓库(repository):受版本控制的所有文件修订历史的共享数据库

2、工作空间(workspace):本地硬盘或UNIX用户账户上编辑的文件副本

3、工作树/区(working tree):工作区中包含了仓库的工作文件(在git管理下的正常目录都算是工作区,我们平时的编辑工作都是在工作区完成。感觉就是git init初始化的文件夹)

4、暂存区(staging area):暂存区就是提交更改(commit)前工作区用来暂存工作区的变化的区域(可以理解为一个临时区域,里面存放将要提交文件的快照)
    ⑴相信我们会经常用到git add这条命令,这条命令可以将工作区中的文件加入到暂存区,然后执行git commit就可以一次性把暂存区的所有修改提交到分支
    ⑵版本库:相信安装了git的你一定发现会多一个.git的目录,这个目录就是git的版本库,版本库中存了很多东西,其中就包含我们刚讲的暂存区,还有Git为我们自动创建的第一个分支master。当我们使用git commit时,就会将暂存区的所有内容提交至master分支,如果有多个分支,就将暂存区的所有内容提交至当前分支

5、历史区:commit后,记录的归档

6、索引(index):索引是暂存区的另一种术语

7、签入(checkin):指将新版本复制会仓库

8、签出(checkout):指从仓库中将文件的最新修订版复制到工作空间

9、提交(commit):对各自文件的工作副本做了更改,并将这些更改提交到仓库

10、冲突(conflict):多人对同一文件的工作副本进行了更改,并将这些更改提交到了仓库

11、合并(merge):将某分支上的更改连接到此主干或同为主干的另一个分支

12、分支(branch):从主线上分离出来的副本,默认分支叫master

13、锁(lock):获得修改文件的专有权限

14、头(headers):头是一个象征性的参考,常用以指向当前选择的分支

15、修订(revision):表示代码的一个版本状态。Git通过使用SHA1 hash算法表示不同的ID来标示不同的版本

16、标记(tags):标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态

 

Git与SVN区别点

1、集中式版本控制SVN和分布式版本控制Git

2、SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。而且集中式版本控制系统是必须联网才能工作

3、Git是分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上

注:
1、既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

2、在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已

 

 

GIT安装

在介绍GIT的各种基本指令前,我想先注明下GIT在提交文件时的基本步骤,可能这是在日常使用中使用到最多的:

⑴git pull:git更新指令,在上传文件前最好先更新下,保证文件时最新的
⑵git status:查看当前所在文件夹下所有文件的状态
⑶git add [file名]:将指定文件添加到暂存区
⑷git commit -m"备注":将暂存区的文件上传到本地仓库
⑸git push origin master:将本地仓库的修改上传到远程服务

注:
1、以下指令最好都进入到对应文件夹下执行,即比如需要将TEST文件夹下的text.txt文件夹上传到远程服务器,那么需要先进入到TEST文件夹下(cd TEST或在TEST文件夹下Git Bash Here)

2、origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的

 

1、下载、安装git

    ⑴下载地址:https://git-scm.com/downloads
    ⑵安装:点击下载得到的exe文件,一路next就可以了(一路默认安装)
    ⑶安装完成后,在"开始"菜单中找到"Git"->"Git Bash"命令,点击后会弹出类似命令行的窗口,说明安装成功


 

2、配置Git账户信息

在安装完Git后,做的第一件事应该就是设置用户名和邮件地址,因为每次Git的提交都会用到这些信息。设置命令如下

配置用户名:git config --global user.name '用户名'

配置邮件地址:git config --global user.email '邮箱地址'

检查配置:git config --list

 

创建版本库:获取Git仓库

1、什么是版本库?版本库又名仓库,英文名repository,可以简单的理解未一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、增加、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”

2、获取Git项目仓库有两种方式:第一种是在现有的项目或目录下导入所有文件到Git;第二种是从一个服务器克隆一个现有的Git仓库(一般我们遇到的都是第二种:克隆一个现有的仓库)

3、总结:创建本地仓库文件夹->使用git init初始化本地仓库文件夹->使用git clone克隆远程仓库文件到本地

 

㈠克隆现有的仓库

想要获取一份已经存在的Git仓库的复制品,那么就要用到git clone命令。克隆仓库的命令格式为:git clone [URL地址]

步骤1:创建文件夹
    ⑴首先通过手动创建一个文件夹来存放我们将要克隆下来的Git项目


步骤2:初始化git仓库
    ⑴先通过cd命令进入步骤1中创建的文件夹中,进入对应目录后执行git init命令。(其实也可以直接进入刚才创建的文件夹中,然后鼠标右键->选择git bash here。就是shift+鼠标右键在指定目录下打开shell命令窗口一样)
    ⑵通过命令git init把这个目录变成git可以管理的仓库:即通过这个命令就将该目录变成了一个Git仓库,可以使用GIT来对该目录进行管理
    ⑶执行文git init命令后会发现对应目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的。需要注意的是千万不要手动乱改这个目录里面的文件,否则会把git仓库给破坏了



步骤3:克隆现有仓库中的文件
1、通过使用git clone [url]命令就可以克隆该url下所有的文件到本地仓库

2、例如下图中的第一条指令:执行该指令后会在当前目录下创建一个名为API-test的目录,并在这个目录下初始化一个名为.git的文件夹,从远程仓库拉取下的所有数据都会放到这个.git文件夹下,然后从中读取最新版的文件的复制品出来

3、如果想在克隆远程仓库的时候自定义本地仓库文件夹的名字可以使用:git clone [url] 自定义文件夹名字(不过不建议这么做,保持原有的好区分)

4、这里使用的远程仓库是别人共有的

 

㈡在现有目录中初始化仓库

1、如果打算使用Git来对现有项目进行管理,只需要进入该项目目录并输入git init命令即可

2、git init命令将会创建一个.git的子目录,这个目录含有初始化的Git仓库中所有必须的文件。注意,这个时候仅仅做了初始化操作,项目中的文件还没有被跟踪

3、这种情况我感觉几乎遇不到,一般情况下我们都是需要将远程仓库克隆到本地(第一种情况)

 

 

记录每次更新到仓库

1、工作目录下的每一个文件都不外乎两种状态:已跟踪和未跟踪
    ⑴已跟踪的文件是指那些被纳入版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改、已修改(已修改但未放入暂缓区的文件)或已放入暂存区
    ⑵工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区(在工作目录下新创建的一个文件初始状态处于未追踪状态。此时,此文件不受版本系统的控制)

2、初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

3、编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git将它们标记为已修改文件。 逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。所以使用Git时文件的生命周期如下:

 

㈠检查当前文件状态:git status

1、要查看工作区文件处于什么状态,可以使用git status命令

2、在查看文件夹中文件状态时,最好进入到(cd或Git Bash Here)对应文件内后再使用git status命令。如果所处文件夹位置错误,那么查询结果可能不是预期的

3、如果克隆完一个仓库后,不做任何修改,使用此命令,可以看到以下输出:
    ⑴下面输出表示现在的工作区(所在文件夹)相当干净,换句话说,所有已跟踪文件在上次提交后都未被更改过
    ⑵下面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则Git会在这里列出来
    ⑶另外,该命令还显示了当前所在分支(On branch master),并告诉你这个分支同远程服务器上对应的分支没有偏离。分支名是“master”,这是默认的分支名


 

㈡跟踪新文件:git add

1、现在,在项目下创建一个名为Demo的新文件。并在对应目录下使用git status命令

2、从下面的输出结果可以看到新建的Demo文件出现在Untracked files下面。未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件;Git不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”,这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来

3、用户可以使用git add命令来跟踪一个文件
    ⑴使用git add命令跟踪新文件后再查看文件状态,从输出结果中:Changes to be committed说明该文件处于已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中
    ⑵git add命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件(一般情况下都是文件名作为参数,需要由文件后缀名。反正把列出来的文件复制粘贴就好了)


注:
1、git add:不加参数默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除
2、git add -u:-u表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加入到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。
3、git add -A:-A表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区。

 

㈢提交新文件:git commit

1、使用git commit -m "message"命令来提交变更的文件:message表示本次提交的备注信息,说明本次提交了什么

2、git commitm命令的作用是将暂存区里的改动给提交到本地的版本库(需要注意的是,此时还没有将修改的提交到远程服务上)

3、将新创建的文件提交到本地版本库后,再次使用git status命令,可以看到当前工作目录是干净的,没有东西需要提交了

4、如果需要将提交到本地版本库中的修改继续提交到远程服务对应的分支上,则可以使用git push(git push origin master)

 

㈣修改文件

1、在上面新增了一个名为Demo的文件,并将其提交到了本地仓库中。现在修改这个Demo文件(在文件内加入任意内容),添加内容后再使用git status命令查看其状态。可以看到输出结果为存在已修改的文件(Changes not staged for commit)

第一次查看文件状态

 

2、使用git add命令将已修改的文件添加到暂存区。然后查看其状态信息

第二次查看文件状态

 

3、使用git commit命令将暂存区的文件提交到本地仓库

第三次查看文件状态

 

4、再次修改Demo文件,然后使用git commit -a命令跳过暂存区,直接提交到本地仓库
    ⑴这里只是说明下git commit -a命令的作用,实际操作中还是原来的步骤好:已修改的文件->git add ->git commit
    ⑵在上面说过:git commit只是将修改的文件提交到本地仓库,还没有提交到远程仓库,因此可以使用 git push origin master命令将修改的提交到远程仓库(这里使用的是别人的远程仓库,我不能提交,因此只是一个示例)


 

 

提交更改至远程仓库:Git push

1、在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了
2、git push的一般形式为git push <远程主机名> <本地分支名> <远程分支名> ,例如git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin是远程主机名。第一个master是本地分支名,第二个master是远程分支名
    ⑴git push origin master:如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
    ⑵git push origin:refs/for/master:如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master
    ⑶git push origin:如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
    ⑷git push:如果当前分支只有一个远程分支,那么主机名都可以省略,形如git push,可以使用git branch -r ,查看远程的分支名

 

 

更新本地代码:git pull

1. 本地代码未修改,只有master分支,直接更新
    ⑴git pull:前提必须是本地的代码没更改过。比如,你提交了代码到github后,随后别人也提交代码到github,然后你需要更新别人提交的代码到你本地,就可以直接使用该命令。
    ⑵假如你提交代码后再修改过你本地的代码,就会产生冲突,直接使用该命令会失败的。此时可以先使用git checkout [File名]命令:先放弃自己本地的修改,然后再使用git pull进行更新

2. 本地代码有修改,多分支

//切换到master分支
git chekout master

//更新master分支
git pull

//切换到自己的分支isso
git checkout isso

//把master分支合并到自己分支
git merger master

3. 本地代码有修改,只有master分支,直接覆盖本地代码

//重置索引和工作目录
git reset --hard

//更新代码
git pull

 

 

丢弃工作区变更:git checkout

1、有时可能会遇到:修改了文件,但是修改错了,因此需要放弃此次的所有修改。此时就可以使用git checkout [File名]命令来清除此次的所有更改

2、自己试了下:这个指令会清除所有未提交到暂存区的修改,已经提交到暂存区的修改是不会被清除的

3、这个指令感觉可以用来清除本地仓库与远程仓库的冲突:本地修改了文件后,更新仓库时更新下来的文件不会覆盖已经修改了的文件,因此需要先清除本地的修改然后再更新,才能更新到最新的文件。跟SVN的chear UP、revert差不多

4、例:现在修改Demo文件(增加了一段话),这些修改还没有被添加到暂存区,此时使用git checkout [File名]指令来清除这些修改


 

 

丢弃暂存区修改:git reset HEAD

1、修改了文件并将这些修改通过git add命令提交到了暂存区,如果此时想要退回到未提交到暂存区之前(回退编辑)。那么就可以使用git reset HEAD [File名]指令来回退

2、例:现在修改Demo文件(增加了一段话),并将这些修改添加到暂存区,此时使用git reset HEAD [File名]指令来清除暂存区中的修改(该指令会清除掉暂存区中所有的修改)


 

 

丢弃本地仓库更改:git reset

1、如果修改了文件,还提交到了本地仓库。此时如果想要回退的话,就可以使用git log指令来查看仓库的提交历史信息,然后根据历史信息记录来选择需要回退到的版本号

2、简单的来说就是:先使用git log指令来查看本地仓库历史版本信息,然后根据历史信息来选择需要回退到的版本号。回退指令为:git reset --版本号

3、git log命令显示从最近到最远的提交日志

4、提交日志信息中,类似于'21fd15bca9f1f81cecd77375657af684ca4f6544'的一长串数字表示的是commit id(版本号):上一个版本使用HEAD^来表示,HEAD^^表示上上个版本...当然往上50个版本时需要写50个^是不现实的。所以后面的可以写成HEAD~50

5、如果需要撤销回退,就需要使用到commit id了
    ⑴回退到上一个版本:git reset --hard HEAD^        
    ⑵回退到上上次版本:git reset --hard HEAD^^
    ⑶回退到指定commitid的版本:git reset --hard  commit_id

 

 

删除文件

在前面的例子中创建了一个名为Demo的TXT文件,并将其提交到了本地版本库中。如果现在不需要该文件了,需要将其删除。即:本地删除、本地仓库删除、远程仓库删除

步骤1:本地删除
本地删除就极其简单了:选中文件->鼠标右键->删除。删除文件后   


步骤2:现在可能有两个选择

第一种:是删错了。这种情况下由于版本库中还有该文件,因此可以使用git checkout [file名]指令来将其找回(删除也是一种修改)


第二种:确实想从版本库中删除该文件,可以使用以下指令
    ⑴使用git rm [file名]来删除文件
    ⑵使用git commit -a -m"备注信息"来提交删除文件

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕猫的耗子A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值