Git核心命令会这些就够了
Git核心命令会这些就够了

Git核心命令会这些就够了

轩灵
2018-10-03 / 0 评论 / 1,690 阅读 /
  • 文章转载请注明来源!
  • / 正在检测是否收录...
    温馨提示:
    本文最后更新于2022年03月19日,已超过759天没有更新,若内容或图片失效,请留言反馈。

    git 与 svn 的区别

    • 存储方式
    • 使用方式
    • 管理模式

    git 提交代码流程

    本地开发分支,使用 add 命令将修改的内容添加到本地缓存空间,通过 commit 命令将添加的内容提交到本地仓库, push 命令将本地仓库的内容提交到关联的远程仓库。

    DEVER -------(add) --> local cache ------(commit)--> local repository -------(push)--> remote repository

    SVN 管理模式

    local  -->  remote
    remote挂了,导致本地不能做任何操作

    GIT 管理模式

    git 本地可以做remote一样的操作。
    git可以关联多个远程仓库。
    git remote还可以备份。
    git使用K-V存储数据。SVN使用复制版本完成可回滚操作。

    git 核心命令

    创建、克隆、添加、提交、push、pull、更新、关联远程

    - 创建git项目,生成一个 .git 目录
    git init
    git remote add origin XXX.git
    echo 'You is a bad man, haha!' > readme.md
    git status 
    git add -A
    git commit -m '提交记录'
    git push --set-upstream origin master (首次),后面git push即可
    git pull
    git clone XXX.git 本地目录名

    管理模式

    mkdir -p src/main/java/com
    echo 'package com' > hello.java
    git remove --cached target -r
    git commit -am '注释'
    git commit -m '注释'

    分支

    git branch : #显示本地分支
    git branch -av : #包含显示远程分支
    git branch -avv : #包含显示远程分支,包含关联信息
    git branch 新分支name   :# 基于当前分支新建分支
    git branch 新分支name  #已存在分支 :# 基于已存在分支新建分支
    git branch 新分支name commitid :# 基于提交id新建分支
    git checkout 分支名  : #切换分支
    git branch -d 分支名: # 删除分支
    git merge branch : #将branch合并到当前分支

    远程仓库

    git remote -v : #查看远程信息
    git remote add origin XXX.git
    git remote add origin2 XXX.git
    git push --upstream  origin2 master : #推送到关联的第二个仓库
    git push origin[2]
    git remote remove 远程仓库名 : # 删除关联的远程仓库

    日志

    git log: # 查看提交日志
    git log --online : # 一行行的查看
    git log branch --online: # 查看分支的日志
    git log dev..master : # master有多少提交没有同步到dev来。
    git log --graph --online : #查看提交网络图
    git show [commitId]: #展示变更的内容

    恢复历史 reset

    场景: 当我们提交了错误的代码后,想回归到原来的某个版本
    可以使用 reset 操作。

    git help reset

    语法

    将当前分支的head指向指定的commitid状态, work tree 依赖于模式mode。

    git reset [#mode#] [#commit#]把#号替换成尖括号

    mode 的值:

    • –soft :不会改变index文件和working tree,仅仅将head指向了commitid,使用git sattus查看时,发现是尚未提交的,你需要手动进行commit。
    • –mixed :这是默认值。重设index文件,但是不会改变working tree。更改后的文件被保留,但是不会被标记为commited。
    • –hard :重设index文件和working tree。所有在commitid后发生的改变均会舍弃掉。
    • –merge:合并,意义不大。commitid和当前head版本中的某个文件在本地被改变的话就会放弃reset。
    • –keep:commitid和当前head版本中的某个文件在本地被改变的话就会放弃reset。

    例如:回退到commitid 1a02031a7d86684246d878a58ff4e1601f14afb7 的版本。

    git reset 1a02031a7d86684246d878a58ff4e1601f14afb7

    此时,远程分支的代码已经在commitid版本之后了,所以push会失败,可以使用强制push覆盖掉远程代码库。

    git push -f origin

    git 原理

    git 存储对象

    git 是一个内容寻址文件系统,核心是一个简单的KV数据库,插入任意内容会返回一个用于取回该值的hash。

    find .git/objects/ -type f : 查找所有的git对象
    git hash-object -w README.md
    git cat-file -p commitId > README.md : # 回滚内容,可以将commitId的内容写入到README.md中,完成了一次回滚的操作
    git cat-file -t commitID : # 查看数据类型
    > git add  会在objects添加对象。 
    > 使用后可以 用  find .git/objects -type f 查看是否新增了对象。
    
    bash
    $ find .git/objects -type f
    .git/objects/69/f22ff2d6d6d4d8288fa9fa99ac2d58927ab1d6
    .git/objects/99/f5369cae277ef56123d0012e2ef952e2e9d825
    $ git add git基础.md
    $ find .git/objects -type f
    .git/objects/69/f22ff2d6d6d4d8288fa9fa99ac2d58927ab1d6
    .git/objects/90/0aabe1fb581794dd7e5cd238828f112f5109af   #新增的
    .git/objects/99/f5369cae277ef56123d0012e2ef952e2e9d825

    搭建企业私有git服务

    git 支持的协议

    local 协议

    本地共享目录; 快速;简单;局域网; 速度慢; 仅仅小项目;
    D盘创建仓库:

    git init --bare hello.git : 创建一个裸项目

    E盘克隆:

    git clone  /d/XXX/git

    这样本地仓库在E盘,远程分支在D盘,就是一个基本的git服务了。

    ssh 协议

    git init --bare hello.git : 创建一个裸项目
    git clone root@ip:XXX.git
    ssh-keygen

    http 协议

    nginx 是基础(3 years experience)

    git协议

    一般不用

    基于 gogs 开发企业git web 服务

    比 gitlab 轻便

    下载gogs版本

    https://github.com/gogs/gogs/releases 选择要下载的版本

    解压运行

    在解压后的根目录下执行

    gogs.exe web

    访问gogs web 服务

    http://localhost:3000/ 可以看到gogs服务启动成功

    首次配置

    第一次进入web页面进行配置信息

    gogs 备份

    gogs.exe backup

    会在根目录生成一个备份文件如: gogs-backup-20181004183106.zip

    gogs 恢复

    gogs.exe restore --from=gogs-backup-20181004183106.zip
    本文共 912 个字数,平均阅读时长 ≈ 3分钟
    177

    海报

    点点赞赏,手留余香

    给TA打赏
    如果觉得文章对您有用,快来赞赏一个吧!
      取消
      扫码打赏
      支付金额随意哦!

      评论 (0)

      语录
      取消