-[ ] Git中关于文件的几个相关概念html
[ ] 文件的四种状态git
[ ] 文件的三个区域正则表达式
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。还有一种不在Git中的状态,未跟踪(untracked)。数据库
已修改表示修改了某个文件,但尚未提交保存;express
已暂存表示把已修改的文件放在下次提交时要保存的清单中vim
已提交表示该文件已经被安全地保存在本地数据库中了segmentfault
文件在Git工做区中,可是未被添加到Git版本中。安全
git版本控制的项目中除了本地仓库目录之外的,你能操做的其余目录。ssh
暂存区是Git仓库中的一个概念位置编辑器
每一个项目都有一个 Git 目录;若是 git clone
出来的话,就是其中 .git
的目录;若是 git clone --bare
的话,新建的目录自己就是 Git 目录。
一个远程仓库一般只是一个裸仓库(bare repository)— 即一个没有当前工做目录的仓库。 由于该仓库仅仅做为合做媒介,不须要从磁碟检查快照;存放的只有 Git 的资料。 简单的说,裸仓库就是你工程目录内的 .git
子目录内容,不包含其余资料,远程仓库是一个独立的仓库。
一个本地git项目中的三个区域关系可用下图来表示。
https://git-scm.com/downloads)
GIT的配置信息存放于三个位置
`/etc/gitconfig
文件:系统中对全部用户都广泛适用的配置。若使用 git config
时用 --system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用 git config
时用 --global
选项,读写的就是这个文件。.git/config
文件):这里的配置仅仅针对当前项目有效。每个级别的配置都会覆盖上层的相同配置,因此 .git/config
里的配置会覆盖 /etc/gitconfig
中的同名变量。在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig
文件。主目录即 $HOME
变量指定的目录,通常都是 C:\Documents and Settings\$USER
。此外,Git 还会尝试找寻 /etc/gitconfig
文件,只不过看当初 Git 装在什么目录,就以此做为根目录来定位。
使用git config命令来配置或查看一些配置,包括全局配置和项目配置。
全局配置用户信息
git congit --global user.name “username”
git config --global user.email “email@email.com”
显示git的帮助信息;学会使用这个命令,基本上git就会了一半,全掌握的话还须要理解git的全部术语概念。
git命令均可以使用git help [COMMAND]的方式显示对应 COMMAND的用法信息
经常使用命令
git help help
显示git帮助信息主页
git help branch
显示init命令的帮助信息
如下经过经常使用的git命令来简单的说明下这些命令。
【添加用的】
git init
建立新的版本库或者从新初始化仓库
运行过上述命令后share目录中的.git已经再也不是一个目录而是下面这样一个文件了
git add 添加内容到暂存区
git add [<pathspec>]
git add -n [<pathspec>]
查看add的内容,不会将文件添加进暂存区
一些简单的匹配
Glob | 含义 |
---|---|
. |
当前目录 |
./src/*.js |
当前目录中的src子目录下的js扩展名文件 |
./src/**/*.js |
当前目录中的src子目录下的,以及嵌套目录中的js扩展名文件 |
!src |
不匹配src文件也不匹配src目录 |
<pathspec> 支持Glob匹配。
匹配模式有下面几种:
Glob(匹配模式)) 、正则表达式、Wildcard character(通配符)
通用的三个匹配符, *、?、[...]
通配符 | 描述 | 模式举例 | 匹配项 | 不匹配项 |
---|---|---|---|---|
* |
匹配任意数量的字符 | Law* |
Law , Laws or Lawyer |
GrokLaw , La or aw |
*Law* |
Law , GrokLaw or Lawyer . |
La or aw |
||
? |
匹配任意单个字符 | ?at |
Cat , cat , Bat or bat |
at |
[abc] |
匹配集合中的一个字符 | [CB]at |
Cat or Bat |
cat or bat |
[a-z] |
匹配区间内的一个字符 | a[0-9] |
a0 , a1 ... a9 |
ab , a or a10 |
给仓库中写入改变,或者说进行一次提交,给仓库中写入一条历史记录(历史中记录了改变的内容)。
git commit -m “message”
注意:commit命令默认须要添加提交日志,若是没有该命令使用-m
参数, 会进入咱们经过core.editor指定的编辑器中, 默认vim编辑器,这个编辑器可能你们不太熟悉,因此进入这个界面可能会有点不知所措,请参考下面文档,想使用Git?你不得不了解的vim编辑器
克隆一个版本库到一个新的目录。
git clone <repository> [path-to-dir]
克隆仓库到指定位置
git clone -b <branchname> <repository>
克隆仓库指定分支
git clone --recurse <repository>
克隆仓库及关联子项
注意: 这个仓库能够是本地的一个项目
<repository> 支持[GIT URLS](),有如下几种格式
远程
本地
【反悔用的】
重置当前HEAD到指定状态
git reset --hard HEAD
重置当前工做目录中未提交已暂存和已修改文件的内容
注意上述命令不会处理 untracked
状态的文件
扩展阅读
好比:
git checkout exist-branch-name
切换分支,HEAD就会指向切换后分支的最后一次提交
git reset --hard <commit-hash>
重置当前工做目录到commit-hash的状态,HEAD就会指向该提交
删除存在于仓库中的文件或者删除存在于暂存区和工做目录中的文件
要删除仅仅在工做目录中的文件须要使用 rm
命令
经常使用命令
git rm file
删除已经暂存的工做目录和暂存区中的文件
git rm --cached file
删除暂存区文件
移动或重命名一个文件,一个目录,或一个符号连接。
【查阅用的】
git status 查看版本库状态
git status
查看当前状态
git status -s -b
简短输出日志信息
image-20181010161819094.png
显示提交和提交之间的改动,提交和工做目录的改动等
经常使用命令
比较工做区与暂存区
git diff
不加参数即默认比较工做区与暂存区
比较暂存区与最新本地版本库(本地库中最近一次commit的内容
git diff --cached [<path>...]
比较工做区与最新本地版本库
git diff HEAD [<path>...]
若是HEAD指向的是master分支,那么HEAD还能够换成master
比较工做区与指定commit-id的差别
git diff commit-id [<path>...]
比较暂存区与指定commit-id的差别
git diff --cached [<commit-id>][...]
比较两个commit-id之间的差别
git diff [<commit-id>][<commit-id>]
使用git diff打补丁
git diff > patch
注意:patch的命名是随意的,不加其余参数时做用是当咱们但愿将咱们本仓库工做区的修改输出到patch文件中,适合修改的文件比较多,咱们能够在一个单独的文件中查看修改的内容
显示提交的日志
扩展阅读
git config --global alias.lg "log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'"
git lg
美化版输出
列出,建立和删除分支
经常使用命令
git branch <branchname>
建立一个新的分支
git branch --list
git branch
列出本地分支
git branch -a
列出所有分支包括远程分支
git branch -d <branchname>
删除分支
切换分支或者恢复工做目录文件
git checkout filename
放弃单个文件的修改
git checkout .
放弃当前目录下的修改
git checkout master
将分支切换到master
git checkout -b master
若是分支存在则只切换分支,若不存在则建立并切换到master分支
合并一个或者多个分支到你已经检出的分支中。 而后它将当前分支指针移动到合并结果上.
git merge <not-current-branch>
将非当前分支独有的内容合并到当前分支并生成一个新的合并提交,并HEAD指向当前分支的这个合并提交位置。
将本地分支的更新,推送到远程主机
git push origin dev
将dev分支推送到origin主机的dev分支
git push -u origin dev
同上,附加主机分支跟踪功能,下次推送,可使用git push
命令默认会推送到origin主机的dev分支
git push origin :dev
git push origin --delete dev 删除远程dev分支
从另外一仓库拉去代码并合并到本地分支中
git pull <远程主机名> <远程分支名>:<本地分支名>
从远程主机的远程分支拉去代码并合并到本地分支中
若是以前设置过跟踪分支,能够直接使用 git pull
场景须要代码演练,请参考
[ ] 添加提交
[ ] 撤销
[ ] 代码合并,
在实际开发中,咱们应该按照几个基本原则进行分支管理:
master
稳定性应该最高,用来发布新版,不在master分支开发;dev
稳定次于master
,用来合并功能,也不建议在该分支开发;我的分支
协做者本身我的分支,全部本身写的功能都在这个分支,常常须要和dev分支同步代码。因此,团队合做的分支看起来应该就像下图这样: