Git 学习笔记

# git 结构

![git 结构](_v_images/20200131131547268_15507.png)

# git 工作流程

![git 协作方式](_v_images/20200131130528873_23625.png)

# git 使用

## git 初始化

    git init

## git 设置签名

### 项目级别

* git config user.name tom_pro

* git config user.email [email protected]

### 系统级别

* git config --global user.name tom_glb

* git config --global [email protected]

### 级别优先级

* 就近原则

* 二者必须有一个

#### 本地仓库信息保存位置

*.git/config*

![](_v_images/20200131134158475_1994.png)

#### 全局配置信息保存位置

~/.gitconfig

![](_v_images/20200131134118988_19762.png)

## 命令小结

* 查看

    *git status*

* 添加

  *git add [file name]*

* 提交

  *git commit -m "commit message" [file name]*

* 查看历史记录操作

    * git log

    ![](_v_images/20200131140816037_30655.png)

    * git log --oneline

    *  git log -- pretty=online

    ![](_v_images/20200131140833680_31255.png)

    * git reflog

    ![](_v_images/20200131140847702_10264.png)

    * 多屏显示控制方式: 空格向下翻页

* 上次文件并找回

    * 基于索引值前进后退

        * git reset --hard [局部索引值] 移动指针位置

        * git reset --hard HEAD^ 一个^代表后退一步,那个^代表后退N步

        * git reset --hard HEAD~3 后退3步

    * reset 三个参数对比

        * soft 仅仅在本地库移动HEAD指针

        * mixed 本地库移动HEAD指,重置缓存区

        * hard 本地库移动HEAD指针,重置缓存区,重置工作区

* 删除文件找回

    * 前提: 删除前, 文件存在时的状态提交到了本地文件夹

    * 操作: git reset --hard[指针位置]

        * 删除操作已经提交到本地库,指针指向。。。

* 比较文件差异

    * 指令

        * git diff [filename]

            * 工作区文件和暂存区文件进行比较

        * git diff [本地库中历史版本] [filename]

            * 将工作区中的文件和本地库历史记录比较

            * 不带文件名和工作区所有文件对比

* 命令帮助

* 创建分支

    * git branch [分支名称]

* 查看分支

    * git branch -v

  * 切换分支

      * git checkout [分支名]

  * 合并分支

      * 切换到被合并的分支上

          * git checkout[分支名]

      * 执行 merge 命令

          * git merge [有新内容的分支]

  * 冲突解决

      * 编辑文件,删除特殊符号

      * 把文件修改到满意的程度,保存退出

      * git add [文件名]

      * git commit -m "日志信息"

          * 注意: 此时 commit 一定不能带文件名

  * 本地库与远程库交互

      * 查看远程库

          * git remote -v

      * 添加远程库地址

          * git remote add origin [远程库地址]

      * 推送本地库到远程库

          * git push origin [远程库分支名]

        * 克隆远程库

            * git clone [远程库地址]

  * 克隆

      * 命令

          * git origin [远程地址]

      * 效果

          * 完整的把远程库下载到本地

          * 创建origin 远程地址别名

          * 初始化本地库

* git 拉取

    * pull = fetch + merge

    * git fetch [远程库地址别名][远程库分支]

    * git merge [远程库地址别名/远程库分支]

  * 解决冲突

      * 要点

          * 如果不是基于github远程最新库的修改,不能推送,必须先拉取

          * 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。

* 跨团队协作

    *

# 常见问题

* 如何去解决fatal: refusing to merge unrelated histories

    * git pull origin master --allow-unrelated-histories

你可能感兴趣的:(Git 学习笔记)