Git基础学习记录

第一部分:Git 基础

1、Git综述

一、Githtml

Git是一个开源、敏杰高效的分布式版本控制工具。git

二、版本控制比较macos

  • 本地版本控制系统windows

    1)本地版本控制系统bash

    • 用目录拷贝区别不一样的版本
    • 公共文件容易被覆盖
    • 成员沟通成本高,代码集成效率低下

    2)如图:服务器

  • 集中化的版本控制系统分布式

    1)集中式版本控制系统工具

    • 有集中的版本管理服务器
    • 具有文件版本管理和分支管理能力
    • 集成效率有明显的提升
    • 客户端必须时刻和服务器相连

    2)如图ui

  • 集中化的版本控制系统spa

    1)分布式版本控制系统

    • 服务端和客户端都有完整的版本库
    • 脱离服务端,客户端照样能够管理版本
    • 查看历史和版本比较等多数操做,都不需访问服务器,比集中式更能提升版本管理效率

    2)如图

2、Git 安装

windows步骤

Mac安装步骤

Linux安装步骤

3、Git配置

一、仓库的配置 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
复制代码

4、Git 工做流程

使用 Git 平常开发的流程通常以下

  1. 建立或克隆 Git 资源做为工做目录
  2. 在克隆的资源上添加或修改文件
  3. 若是其余人修改了,咱们能够更新资源
  4. 在提交前查看修改
  5. 提交修改到本地
  6. 提交修改到远程
  7. 在修改完成后,若是发现错误,能够撤回提交并再次修改并提交

5、初始化Git本地仓库

# 初始化本地仓库
$ git init [--bare]
# 将远程仓库拉去到本地
$ git clone [--bare] originPah
复制代码

6、四个区五种状态

四个区

  • 工做区
  • 暂存区
  • 本地仓库
  • 远程仓库

五种状态

  • 未修改(origin)
  • 已修改(Modified)&未追踪(Untracked)
  • 已暂存(Staged)
  • 已提交(Commited)
  • 已推送(Pushed)

顺序操做

  • 一、工做区与仓库保持一致

  • 二、文件增删改,变为已修改状态

  • 三、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 # 非第一次提交,不准知名推进的远程分支
    复制代码

操做图解

7、Git分支

  • Git分支简介

Git分支是将你开发工做从项目主线分离开来,以避免影响开发主线。

  • 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合并`

复制代码

rebase合并 dev

$ 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的分支都是本身本地的分支,没有推送到远程版本的分支
复制代码
相关文章
相关标签/搜索