单人开发使用Git
首先需要创建一个工作区也就是一个文件夹,创建好了文件夹打开文件夹,进入到文件夹当中,进入之后鼠标右键打开Git的终端界面
打开之后呢,如果想使用Git管理工作区当中的代码,首先需要初始化Git,在终端当中输入如下命令
初始化版本库
git init
- 输入之后呢,他会自动的在工作区当中创建一个版本库,自动创建一个
.git
文件夹- 默认情况下你是看不到这个
.git
的文件夹的他是一个隐藏文件夹,所以你需要设置以下
初始化Git配置
首先可以使用如下命令查看Git配置列表
git config -l
我们需要在Git配置列表当中还需要加入一些配置,团队开发当中必须的,就是新增你叫什么名称,以什么方式可以联系到你,配置命令如下:
git config user.name "BNTang"
git config user.email "303158131@qq.com"
添加之后在输入查看Git配置命令查看一下是否配置成功,配置的目的是什么呢,因为只有做了这个配置之后,将来你通过Git管理代码我才知道那些文件是谁提交的,那些文件是谁修改的,那些代码出现问题我应该通过什么方式联系谁,在企业开发当中这个配置一定要做,如果没有配置那么你的项目经理就知道你肯定是个小白,但凡有工作经验的人他都知道一定要做这个配置,如果你不配,你的项目经理会让你配,他让你配和你自己配的性质的是完全不一样的,以上的步骤完毕之后就可以使用Git来管理我们的代码了
接下来我们就开始在工作区当中创建一个文件,只有创建了文件Git才可以进行管理嘛,这时我就创建了一个 index.js 在这个文件中我添加了一点内容,内容如下:
window.onload = function(){
console.log("Hello Git");
}
写完内容之后默认情况下,放在工作区当中的内容是不受Git管理的,要想让工作区当中的文件被Git管理,首先需要把需要管理的文件添加到版本库中的暂缓区当中,那么如何把文件添加到版本库当中的暂缓区中呢,好这时我们来看一个指令,是用来查看文件的状态的,我想看一下现在我的这个 index,js 有没有默认被Git管理指令如下:
查看文件状态
git status
如上图输出了一个红色的文件,如果你输入了上方的指令之后,他输出的是一些红色的文件就代表着没有被Git管理,居然没有被管理就让他来给我们管理一下,那么就是从工作区添加到版本库的暂缓区,指令如下:
将文件添加到版本库的暂缓区
git add index.js
除了上方的方式添加还有把 index,js 改为*
代表一次性添加全部文件,格式如下
git add *
输入了如上指令后就从工作区当中添加到了版本库的暂缓区了,在输入查看状态指令看一下即可,如果没有就是红色的,我们这时来看,是一个绿色的,绿色的就代表这个文件已经被Git管理了,存储到暂缓区之后还没完,我们前后说过除了添加到版本库中的暂缓区之后还需要添加到HEAD指针指向的那个分支当中,默认情况下你初始化了一个版本库之后他里面就有一个默认的分支也就是主分支(Master),默认情况下呢HEAD指针就指向了Master分支,所以说默认情况下我们就可以将暂缓区当中的文件添加到Master分支当中,那么怎么添加到Master分支当中呢,指令如下:
将版本库暂缓区中的文件添加到HEAD指针指向的分支中
也就是将代码添加到某一个分支版本当中,以下中的 -m 后面的内容就是添加备注就是说明你提交的内容,干了些什么详细说明
git commit -m "init project add index.js"
如果你执行了上方的指令它就会将版本库暂缓区当中所有的文件添加到HEAD指针指向的那个分支当中,这时只需要输入查看文件状态的指令验证即可,如果你看到的效果和我的截图效果一样就代表着你工作区中所有的文件都已经被Git管理了,这就是GIt的基本使用
单人流程
- ????准备工作(
只做一次
)
- 创建一个工作区
- 在工作区中打开Git终端
- 通过
git init
指令,初始化版本库- 通过
-
git config user.name "姓名"
-
git config user.email "邮箱"
- 设置用户名和邮箱(
不设置要挨骂
)- 通过
git config -l
查看设置情况
开发阶段
- 反复执行
- 编写代码
- 通过
git add 文件名称
,"git add ."
,将编写代码的文件添加到版本库的暂缓区中- 通过
git commit -m"说明"
,将暂缓区的文件添加到HEAD指针
指向的分支中,(默认只有一个分支,master分支,也称之为主分支)
注意点
- 不是写一句代码就 add commit 一次,应该是完成一个功能后再 add commit
- commit 时 -m 注释一定要认真编写,与当前提交内容保持一致,否则要挨骂
单人使用Git管理项目的好处
- 可以通过
git status
查看哪些文件没有被管理,修改了哪些文件,红色(代表没有被管理或者被修改了)、绿色(在版本库的暂缓区中)- 可以通过
git diff
查看具体修改了哪些代码- 可以通过
git log
,git reflog
查看项目演变历史- 可以通过
git reset --hard 版本号
,任意的在版本之间切换- 无需备份多个文件,每次 commit 提交 Git 会自动备份
总结
以下是对Git 指令的一些说明与解释
-
git help
:git指令帮助手册
- 查看其他指令的做法:git help 其他指令
-
git init
:仓库初始化(个人仓库)- 仓库文件目录
HEAD: 指向当前分支的一个提交
description: 项目的描述信息
config: 项目的配置信息
info/: 里面有一个exclude文件,指定本项目要忽略的文件
objects/: Git对象库(commit/tree/blob/tag)
refs/: 标识每个分支指向哪个提交
hooks/: 默认的hook脚本
- Git 设置配置信息
- 配置用户名:
git config user.name "用户名"
(用于跟踪修改记录)- 配置邮箱:
git config user.email "邮箱"
(用于多人开发间的沟通)-
git config -l
:查看配置信息-
git config -e
:编辑配置信息
-
git status
:查看文件的状态
- 查看某个文件的状态:
git status 文件名
- 查看当前路径所有文件的状态:
git status
-
git add
:将工作区的文件保存到暂缓区
- 保存某个文件到暂缓区:
git add 文件名
- 保存当前路径的所有文件到暂缓区:
git add .
(注意,最后是一个点.
)
-
git commit
:将暂缓区的文件提交到当前分支
- 提交某个文件到当前分支:
git commit -m ”注释” 文件名
- 保存当前路径的所有文件到当前分支:
git commit -m ”注释”
-
git log
:查看文件的修改日志
- 查看某个文件的修改日志:
git log 文件名
- 查看当前路径所有文件的修改日志:
git log
- 用一行的方式查看简单的日志信息:
git log ––pretty=oneline
- 查看最近的N次修改:
git log –N
(N是一个整数)-
git diff
:查看文件最新改动的地方
- 查看某个文件的最新改动的地方:
git diff 文件名
- 查看当前路径所有文件最新改动的地方:
git diff
-
git reflog
:查看分支引用记录(能够查看所有的版本号)-
git rm
:删除文件(删完之后要进行commit操作,才能同步到版本库)-
git reset
:版本回退(建议加上––hard
参数,git支持无限次后悔)
- 回退到上一个版本:
git reset ––hard HEAD^
- 回退到上上一个版本:
git reset ––hard HEAD^^
- 回退到上N个版本:
git reset ––hard HEAD~N(N是一个整数)
- 回退到任意一个版本:
git reset ––hard 版本号(版本号用7位即可)
- Git忽略提交规则
.gitignore配置
- 别看了, 你想要的都在这企业开发专用链接
# 表示此为注释,将被Git忽略
*.a 表示忽略所有 .a 结尾的文件
!lib.a 表示但lib.a除外
/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt 表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 表示忽略根目录下的bin文件
/*.c: 表示忽略cat.c,不忽略 build/cat.c
debug/*.obj: 表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo: 表示忽略/foo,a/foo,a/b/foo等
a/**/b: 表示忽略a/b, a/x/b,a/x/y/b等
!/bin/run.sh 表示不忽略bin目录下的run.sh文件
*.log: 表示忽略所有 .log 文件
config.php: 表示忽略当前路径的 config.php 文件
/mtk/ 表示过滤整个文件夹
*.zip 表示过滤所有.zip文件
/mtk/do.c 表示过滤某个具体文件
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:
!*.zip
!/mtk/one.txt
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::
/mtk/*
!/mtk/one.txt
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
----------------------------------------------------------------------------------
还有一些规则如下:
fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
/*
!.gitignore
!/fw/
/fw/*
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。