git 常用命令 (1)

init git

在项目根目录下面创建一个.git子目录,用来保存版本信息

  • branches:

  • config: 仓库配置。比如远程url,账号

  • description: 仓库描述

  • hooks

    可以在commit、rebase、pull等阶段自动运行

    • pre-commit.sample
    • pre-push.sample
  • info:可以将不想被git管理的文件记录到.gitignore

  • objects

    • info
    • pack
  • refs

    • heads
    • tags
  • HEAD

    指向当前分支

add

工作区便是我们项目所在的文件夹,.git文件夹便存储着版本库。add命令主要过程是

  1. 保存变更文件:压缩变更文件为二进制文件,并保存在git版本库中的objects下(还会重新计算当前内容的SHA1哈希值为文件名)

    git hash-object -w test.txt

  2. 记录变动:git将所有变更文件记录在暂存区stage

    git update-index

合起来就是保存变更文件以及变更记录到版本库

commit

git commit -m "first commit"

commit可以认为是生成保存了项目的快照,项目的历史正是由这一个个的快照组成,拥有了快照,git可以将项目恢复到任意一个快照。

  1. 记录谁提交:设置一下用户名和 Email

    $ git config user.name "用户名" 
    $ git config user.email "Email 地址"
    
  2. 保存当前目录结构:

    # 将当前目录结构生成git对象
    $ git write-tree
    
  3. 将目录结构,提交者、说明写入版本历史

branch

分支是指向某个快照的指针,使用HEAD指向当前分支最近一次快照(每一个分支指针都是一个文本文件,保存在refs/heads)

HEAD^: HEAD前一个快照

HEAD~6: 前第6个快照

merge

merge

假设存在下面节点,并且当前在master

img

那么git merge topic就会从topic、master重合点E开始将topic E之后的A,B,C与master中E节点之后的F、G合并为H节点

img

git merge --abort: 尝试重建合并前的状态(无法恢复未commit文件)

可以使用git stash将未commit文件暂时存储,在解决冲突之后使用git stash pop将commit文件还原

pull

pull实际上可以等于fetch+merge

git pull remoteHostName remoteBranch:localBranch

fetch

就是将远程分支的最新commit的commit_id记录到本地的.git/FETCH_HEAD文件

git fetch origin originBranch:localBranch

实际操作中,pull会比对本地以及远程FETCH_HEAD版本号,若相同才会pull代码下来,并与本地分支合并。

Ref

  1. https://www.jianshu.com/p/58a166f24c81
  2. https://www.daolf.com/posts/git-series-part-1/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值