乐趣区

关于git:Git学习

写在后面:最近看了一个对于 Git 的教程,对 Git 的各项操作有了较全面的理解,当然和理论工作还有差距,在此做一个小结义工之后温习。

Git 的介绍和装置就不在赘述。

Git 本地仓库的创立及配置

抉择一个文件门路进入命令行输出git init, 及实现了一个本地仓库的初始化。此时会生成一些暗藏文件夹,对象库和配置文件等都在其中。

而后进行一些根本信息的配置

git config --global user.name "输出姓名"
git config --global user.email“输出邮箱”git config --global color.ui true   // 此处是关上色彩差别选项

Git 三大逻辑区

  • 工作区:以后分支下新建或批改文件的中央,当切换到不同分支工作区会刷新。文件状态有两种:untracked,tracked
  • 版本库:

    • 暂存区:及 index,当执行 git add . 时,工作区的所有文件被提交到暂存区,objects 会生成若干个 blob 对象,暂存区只是对他们的索引(指针)。
    • 仓库:当执行 git commit -m "提交信息" 时,会生成一个 commit 对象,外面蕴含了提交者的信息、指向 blob 的指针,指向上一次提交的指针等,若提交的内容中有子文件夹,则会蕴含 tree 对象,tree 对象中的内容为指向子文件夹中文件绝对应的 blob。

Git 三大对象

次要阐明在上一节已有形容具体看图。

Git 的根本流程

  • 在工作区新建或批改了文件。
  • git add xx.xx ; 把文件提交到暂存区
  • git commit -m “XXX” ; 把暂存区的文件提交到本地仓库
  • git log;查看提交日志

文件治理

  • 文件增加

    • 增加一个文件:git add file.c
    • 增加所有文件:git add .
    • 作用:将文件增加进暂存区,文件进入 tracked 状态
  • 文件提交

    • 单步提交:git commit -m ” commit infor”
    • 一次性提交:git commit -a
    • 批改最初一次提交:git commit –amend
    • 作用:将 暂存区 的所有内容提交到仓库
  • 文件删除

    • 从工作目录和暂存区删除:git rm -f file.c

      • 删除并提交后,该文件就不再被版本库追踪,然而版本库中依然有这些文件的快照
    • 从暂存区中删除,工作目录中保留:git rm –cached file.c
    • 从版本库中删除: 版本回退到谬误提交前的版本

      • 撤销到暂存区:git reset –soft SHA1
      • 撤销到工作区:git reset –mixed SHA1
  • 文件重命名:git mv old_name new_name

    • 相当于创立(拷贝)新文件,删除旧文件
  • 设置疏忽文件
    有些文件(编译的两头文件、临时文件)不想被提交。
    手动创立.gitignore 文件,在文件中编辑,上面是一些举例:

    # 正文
    *.[ao]    #疏忽某种格局结尾文件例如 a 或 o!clib.a  #某个库文件除外,不疏忽
    *~        #疏忽临时文件
    /text     #疏忽根目录下的某个文件
    libs/     #疏忽某个目录下的所有文件

    编辑实现后提交到仓库即可实现。

  • 差别比拟

    • 比拟工作区和暂存区差别:git diff

      • 查看尚未暂存文件有哪些新的批改
    • 比拟暂存区和版本库差别

      • git diff –cached [HEAD]
      • git diff –staged SHA
    • 比拟工作区和版本库差别:git diff HEAD(或者 SHA1)
    • 比拟两个版本之间差别:git diff SHA1 SHA2
  • 压缩仓库:git gc

    • 在日常运行中,git 快照会占用磁盘空间,Git 会在增量存储单元中存储批改, 节俭磁盘空间。

分支治理

分支的实质是指向 commit 的一个指针。

一个我的项目在 master 上进行演进提交,当多人合作开发或 bug 修复时,须要从 master 上开拓一条新分支,当工作实现时,再合并到 master 上。

  • 创立分支:

    • git branch new_branch #必须要在 master 上
    • git checkout –b new_branch #创立并跳转到新分支上,必须要在 master 上
    • git checkout –b new_branch old_branch
  • 查看分支:git branch [-a]
  • 切换分支:git checkout branch_name

    • 切换分支时,工作区和暂存区的文件应全副 commit,否则会切换失败
  • 分支重命名:git branch –m oldbranch newbranch #参数 - M 为强制转换
  • 删除分支:git branch –d branch #- D 强制删除
  • 分支合并:git merge test #合并 test 分支到 以后 分支

    • 若合并过程中发生冲突,则应手动解决抵触,再 commit 提交即可。
  • 压合合并:git merge –squash test

    • 将一个分支上的所有历史合并为一个提交,然
      后合并到另一个分支上,个别 bug 或新性能分支都能够应用这种形式合并。
  • 筛选合并:

    • 筛选一个提交,增加到以后分支git cherry-pick SHA(SHA 为筛选的提交的哈希值)
  • 分支衍合:扭转以后分支的基分支。举个例子,当 master 分支再版本 A2 时创立了一个新分支 dev,而后 master 分支持续演进到 A3,dev 分支也在演进,当 dev 分支想更新基于 master 分支的版本时:

    git checkout dev

    git rebase master

    如果有抵触,则解决抵触,而后

    git add .

    git rebase --continue

    此时 dev 的基分支为 master 的 A4




    永远不要衍合曾经 push 到公共仓库的更新

  • 分支批改储备

    • 保留以后分支的数据,切换到别的分支去:git stash
    • 复原以后分支数据:
      git stash apply
    • 当屡次应用 stash 命令时,查看储备队列git stash list,清空储备队列git stash clear, 复原某次储备git stash apply stash@{数字}
  • 复原已删除的分支提交 / 脱离组织的提交

    • 分支删除的实质:分支这个指针曾经删除,但 commit 对象还存在,只是脱离了 commit 链表而已,变成了悬空对象。
    • 操作步骤

      • 先找到脱离链表的 commit:git fsck --lost-found
      • 查看是否时想要复原的哪个 commit:git show SHA
      • 衍合:git rebase SHA
    • 提交能够找回,然而分支是找不回的。

近程仓库

近程仓库是指托管在因特网或其余网络中的你的我的项目的版本库。

本地仓库于近程仓库的通信协议有三种:

  • SSH 协定:同时反对读和写的网络协议,Git 默认应用的网络协议。
  • Git 协定:Git 自带的网络协议:实用于不须要对读进行受权的大型项目。
  • HTTP/HTTPS 协定。

SSH 密钥生成:

  • 用户目录下查看有没有.ssh 文件夹
  • 应用命令生成:ssh-keygen -t rsa –C "邮箱"
  • 私钥保留在用户目录下,SSH 连贯服务器时应用
  • 公钥放到服务器,服务器不同配置管理不一样

本地治理命令:

  • 验证 key 是否增加胜利:ssh –T git@github.com
  • 从近程仓库克隆:git clone repo_addr
  • 增加近程仓库:git remote add origin 仓库地址
  • 从近程仓库拉取数据:

    • 主动本地 master 分支并跟踪近程仓库 master 分支:git clone origin
    • 只拉取到本地,不合并:git fetch
    • 主动拉取分支更新:git pull
  • 推送到近程仓库:git push origin master
  • 在本地查看近程仓库信息:git remote -v
  • 删除本地的近程仓库的链接:git remote rm 名字例如 origin
  • 近程仓库重命名:git remote rename old_name new_name

远程管理命令:

  • 近程分支创立,将本地新建分支间接推送到近程仓库:git push origin local_branch:remote_branch

    • 近程仓库没有这个分支,将创立这个分支 origin/remote_branch
    • 并将本地分支和近程分支建设关联,当前能够间接 push
  • 基于近程分支建设一个本地关联分支:git checkout –b local_branch origin/remote_branch

    • 建设关联后,就能够间接进行 pull 和 push
  • 删除近程分支:git push origin :remote_branch(近程分支名)

    标签

    标签是一个援用,标签对象能够指向任何对象,通常状况下,是指向一个提交(commit)。

  • 在以后分支的末端创立轻量级标签:git tag v0.1
  • 给指定某个 commit 打标签: git tag V0.2 SHA
  • 删除标签:git tag -d v0.1
  • 推送标签到近程:git push origin v0.2
  • 推送所有标签:git push origin –tags
  • 删除近程标签:

    • 先删除本地:git tag -d v0.1
    • 在删除近程:git push origin :refs/tags/v0.2
退出移动版