乐趣区

关于git:git-使用简易指南

层级关系

工作区(add) –> 暂存区(commit) –> 本地库(push) –> 近程库

1. 从近程库获取最新代码合并到本地

// 查问以后近程的版本
$ git remote -v
// 获取最新代码到本地(本地以后分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master  [示例 1:获取远端的 origin/master 分支]
$ git fetch origin dev [示例 2:获取远端的 origin/dev 分支]
// 查看版本差别
$ git log -p master..origin/master [示例 1:查看本地 master 与远端 origin/master 的版本差别]
$ git log -p dev..origin/dev   [示例 2:查看本地 dev 与远端 origin/dev 的版本差别]
// 合并最新代码到本地分支
$ git merge origin/master  [示例 1:合并远端分支 origin/master 到以后分支]
$ git merge origin/dev [示例 2:合并远端分支 origin/dev 到以后分支]

2. 本地创立分支,并同步近程分支的内容

$ git branch --track master origin/master [示例:本地建设 master 分支,并下载 / 关联近程 orgin/master]

3.Git 根底 – tag

每一个提交都有一个 commitID,然而每次记录commitID 都很简单,应用 git tag 能够在一些重要的版本和批改中退出一个标识,能够很疾速的找到咱们须要的版本。

tag 和 branch 的相互配合应用,有时候起到十分不便的成果,例如 曾经公布了 v1.0 v2.0 v3.0 三个版本,这个时候,我忽然想不改现有代码的前提下,在 v2.0 的根底上加个新性能,作为 v4.0 公布。就能够 检出 v2.0 的代码作为一个 branch,而后作为开发分支。

Git 根底 – 打标签

4. 合并多条 commit

  • 因为开发中各种批改,本地分支屡次 commit。最初提交 master 后,会看到乌七八糟的所有增量批改历史。
$ git rebase -i [startpoint] [endpoint]
- - i 的意思是 --interactive,即弹出交互式的界面让用户编辑实现合并操作。- [startpoint] [endpoint]则指定了一个合并的区间。- 如果不指定[endpoint],则该区间的起点默认是以后分支 HEAD 所指向的 commit。

示例:现须要合并三个 commit(first、second、third)

执行 git rebase -i f123956 进入交互界面。

依据咱们的需要,咱们将 commit 内容编辑如下:

pick 4d32374 first commit
s b10e9fc second commit
s 99a0294 third commit

下面的意思就是把第三次、第二次提交的 commit 合并到第一次的提交上。

wq 保留后,进入正文批改界面:

删除之前的 commit 正文,增加合并后的正文,最终编辑成果如下:

查看 log 曾经合并了

5.Git 命令行操作

5.1 本地库初始化

进入文件夹

git init
留神:生成的 .git 目录中寄存的是本地库相干文件,不要删除

5.2 设置签名

  • 我的项目 (仓库) 级别 仅在以后本地库无效

    git config user.name tom  #设置用户名 tom
    git config user.email liu@qq.com #设置用户邮箱
  • 零碎用户级别 仅在以后登录的操作系统用户无效

    git config --global user.name tom
    git config --global user.email liu@qq.com

仅仅加了一个 --global

优先级别:我的项目级别 > 零碎级别

信息保留地位: ~/.gitconfig 文件

5.3 基本操作

5.3.1 状态查看

git status   #查看工作区、暂存区状态

5.3.2 增加

git add fileName  #指定文件
git add . #所有
阐明:将工作区的文件增加到暂存区

5.3.3 提交

git commit -m 'commit message' fileName
阐明:将暂存区内容提交到本地库

5.3.4 查看历史记录

git log 
git reflog  #罕用
git log --greph #图形显示, 更直观
git log --pretty=oneline #丑陋一行显示
git log --oneline #简洁显示
阐明:HEAD@{挪动到以后版本须要多少步},HEAD 示意以后地位

5.3.5 后退后退

  • 基于索引值 举荐

    git reset --hard 指针地位
    例子:git reset --hard a6ace91 #回到这个状态
    阐明:通过 git relog 查看历史记录

5.3.6 reset 的三个参数比拟

soft: 
  - 仅本地库挪动 HEAD 指针
mixed:
  - 在本地库挪动 HEAD 指针
  - 重置暂存区
hard:
  - 在本地库挪动 HEAD 指针
  - 重置暂存区
  - 重置工作区

5.3.7 删除文件并找回

  • 相当于建设一个快照,尽管删除了,但只有增加到暂存区,就能找回
git reset --hard 指针地位

5.3.8 文件差别比拟

git diff 文件名
git diff 哈希值 文件名  #和历史中的一个版本比拟
git diff  #不带文件名,则比拟多个文件

5.4 分支治理

fix master feature/x feature/y

5.4.1 什么是分支治理

  • 在版本控制中,应用推动多个工作

5.4.2 分支的益处

  • 同时并行推动多个性能开发,进步开发效率
  • 某一分支开发失败,不会对其它分支有任何影响

5.4.3 分支操作

  • 创立分支
git branch 分支名
  • 查看分支
git branch
git branch -v 
  • 切换分支
git checkout 分支名
git checkout -b 分支名   #创立分支并间接切换到该分支
  • 合并分支 相当于把批改了的文件拉过来
git merge xxx
留神:合并分支的时候要明确谁谁合并
    我在 a 分支外面批改了。要合并到 master,就先切换到 master,而后合并 a 
  • 删除分支
git branch -d 分支名

5.4.4 解决抵触

  • 抵触的体现
  • 抵触的解决

    • 第一步:编辑,删除非凡标记<<< ===
    • 第二步:批改到称心地位,保留退出
    • 第三步:增加到缓存区 git add 文件名
    • 第四步:提交到本地库 git commit -m '日志信息' 留神:前面肯定不能带文件名

6.Git 联合 Github

别名 分支名

6.1 创立近程库地址别名

git remote -v  #查看近程地址别名
git remote add 别名 近程地址 
例子:git remote add origin https://xx

6.2 推送

开发批改完把本地库的文件推送到近程仓库 前提是提交到了本地库才能够推送

git push 别名 分支名
git push -u 别名 分支名    #- u 指定默认主机
例子:git push origin master

6.3 克隆

残缺的把近程库克隆到本地 克隆下来后不要在主分支外面做开发 clone 进行一次,从无到有的过程,更新用 pull

git clone  近程地址
例子:git clone https://xx

6.4 拉取

本地存在 clone 下来的文件 就用 pull 更新

pull = fetch + merge
    git fetch 别名 分支名
    git merge 别名 分支名
git pull 别名 分支名

6.5 解决抵触

留神:解决抵触后的提交是不能带文件名的

如果不是基于近程库最新版做的批改不能推送,必须先 pull 下来装置抵触方法解决

6.6 rebase

提交记录简洁不分叉 没学懂,感觉有点鸡肋 混眼生

git rebase -i 索引号
git rebase -i HEAD~3  #合并最近三条记录
阐明:在 vim 编辑外面改成 s 

6.7 beyond compare

用软件解决抵触

1. 装置:beyond compare 
2. 配置:git config --local merge.tool bc3  #合并名称
   git config --local mergetool.path '/usr/local/bin/bcomp' #软件门路
   git config --local mergetool.keepBackup false  #False 不必保留备份
3. 利用:git mergetool
阐明:--local 指只在以后操作系统无效

6.8 跨团队单干

代码 review 之后合并

  • 实用于集体

    邀请成员 :Settings –> Collaborators –> 填写用户名 –> 关上链接承受邀请

  • 企业 创立一个组织 方便管理
  • review

    组织做 review 通过 Pull request

  • 给开源社区共享代码

    点击他人仓库的 fork 到本人的仓库 — > 而后 clone 下来 批改后推送到近程库 –> 点击 Pull Request 申请 –> Create pull request 发消息

6.9 Tag 标签

为了清晰的版本治理,公司个别不会间接应用 commit 提交

git tag -a v1.0 -m '版本介绍'   #创立本地 tag 信息
git tag -d v1.0            #删除 tag
git push origin --tags   #将本地 tag 信息推送到近程库
git pull origin --tags    #拉取到本地

git checkout v.10    #切换 tag
git clone -b v0.1 地址   #指定 tag 下载代码

6.10 SSH 免密登录

  • 输出:ssh-keygen -t rsa -C GitHub 邮箱地址
  • 进入 .ssh 目录,复制 id_rsa.pub 文件内容
  • 登录 GitHub。Settings –> SSH and GPG keys –> New SSH Key
  • 回到 git 通过 ssh 地址创立。git remote add 别名 SSH 地址

7.Git 工作流

7.1 概念

在我的项目开发过程中应用 Git 的形式

7.2 分类

7.2.1 集中式工作流
像 SVN 一样,集中式工作流有一个地方仓库,所有的批改都提交到了 Master 分支上
7.2.2 GitFlow 工作流 *

骨干分支master 开发分支develop 修复分支hotfix 预公布分支release 性能分支feature

GitFlow 有独立的分支,让公布迭代过程更晦涩。
7.2.3 Forking 工作流
在 GitFlow 根底上,充分利用了 Git 的 Fork 和 pull request 的性能以达到代码审核的目标。安全可靠地治理大团队的开发者

退出移动版