一、Git
html
Git是一个开源、敏杰高效的分布式版本控制工具。git
二、版本控制比较
macos
本地版本控制系统windows
1)本地版本控制系统
bash
2)如图:
服务器
集中化的版本控制系统分布式
1)集中式版本控制系统
工具
2)如图
ui
集中化的版本控制系统spa
1)分布式版本控制系统
2)如图
一、仓库的配置 git config
git config 命令专门用来配置或读取相应的工做环境变量
Git 有三种级别的环境变量,它们分别是: 系统 Git 配置、当前用户 Git 配置 和 当前项目 Git 配置
这些环境变量,决定了 Git 在各个环节的具体工做方式和行为。
各个环境配置文件及查看命令以下:
一、系统配置 `/etc/gitconfig` 文件
/etc/gitconfig 是对全部用户都广泛适用的配置
可使用如下命令来读写 /etc/gitconfig 文件
$ git config --system [...]
二、当前用户 `~/.gitconfig` 文件
~/.gitconfig 这个当前用户目录下的配置文件只适用于当前用户
可使用如下命令来读写 ~/.gitconfig 文件
$ git config --global [...]
三、当前项目 `.git/config ` 文件
是当前项目下的配置文件,只适用于当前项目有效
可使用如下命令来读写 .git/config 文件
$ git config --local [...]
环境变量级别优先级: 当前项目 > 当前用户 > 系统配置
复制代码
二、Git 对命令设置别名
根据跟人喜爱,将经常使用命令设置别名
$ git config --global alias.cg "config --global"
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
复制代码
使用 Git 平常开发的流程通常以下
# 初始化本地仓库
$ git init [--bare]
# 将远程仓库拉去到本地
$ git clone [--bare] originPah
复制代码
一、工做区与仓库保持一致
二、文件增删改,变为已修改状态
三、git add ,变为已暂存状态
$ git add --all # 当前项目下的全部更改
$ git add . # 当前目录下的全部更改
$ git add -u # 将工做空间被修改和被删除的文件添加到暂存区(不包含没有归入Git管理的新增文件)
$ git add a.js b.js # 添加某几个文件
复制代码
四、git commit 变为已提交状态
$ git commit -m "commit 描述" # 将已暂存文件,提交到本地仓库
# commit 其余的使用方法
# 0一、git commit -am
# 若是已修改文件以在暂存区中,修改文件后,能够省去 git add 命令
$ git commit -am "commit 描述"
# 0二、git commit --amend
# git commit --amend 做用以下:
# 1)、若是是未修改状态,能够修改最后一次 commit 的描述。
# 2)、若是文件修改了,并提交到了暂存区,能够将当前修改合并到上个commit中
$ git commit --amend
复制代码
五、git push,变为已推送状态
$ git push -u origin master # 第一次推送,须要将本地与远程进行关联
$ git push # 非第一次提交,不准知名推进的远程分支
复制代码
Git分支是将你开发工做从项目主线分离开来,以避免影响开发主线。
一、分离主线开发
二、并行开发
$ git branch dev
# or 建立游离分支
$ git checkout [commit-sha1]
复制代码
# 切换dev分支
$ git checkout dev
复制代码
$ git checkout -b dev
复制代码
# 删除本地分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin :[branch-name]
# or
$ git push origin --delete [branch-name]
复制代码
合并分支
merge合并
# 分支合并。git的合并是个三方合并。
$ git merge [--no-ff] dev
复制代码
三方合并
复制代码
三方合并是指,在执行merge命令后,将当前分支、被合并分支以及这两个分支的共同祖先进行合并。
merge合并冲突解决
复制代码
若是冲突时,会展现当前分支HEAD和被合并分支之间的不一样。若是想展现共同祖先的版本。参考:zhuanlan.zhihu.com/p/78505692 主要设置合并冲突的展现方式,命令以下。默认是 merge $ git config --global merge.conflictstye diff3
-ff与--no-ff区别:
- -ff不会出现要给新的合并。 --no-ff会出现一个新的commit
```
# 合并分支 dev 【默认开启 fast-forward模式】
$ git merge dev
# 禁用 fast-forward
$ git merge --no-ff dev
```
ff[fast-foward快进合并]
- 合并分支时Git默认会使用fast-forward模式
- 在这种模式下,删除分支会丢掉分支信息
- 合并时加上 --no-ff参数会禁用fast-forward。这样会多出一个commit id
`rebase合并`
复制代码
$ git rebase dev
rebase注意事项
- rebase过程也会出现冲突
- 解决冲突后,使用 git add 添加冲突文件,而后执行git rebase --continue
- 接下来Git会继续应用余下的补丁
- 任什么时候候均可以经过git rebase --abort,终止rebase,分支会恢复到rebase开始前的状态
`rebase与merge区别` [连接:merge 和 rebase 区别](http://igit.58corp.com/_fe/documents/tree/master/白皮书/规范/git)
- merge合并后提交记录有分叉,rebase合并后是一条直线
- merge不会修改提交历史,rebase会修改。
`rebase最佳实践`
- 不要对master分支执行rebase,不然会引发不少问题
- 通常来讲,执行rebase的分支都是本身本地的分支,没有推送到远程版本的分支
复制代码