git学习笔记

1 简述

  git是通过使用快照的方式来管理版本,在每次提交的时候,会抓取一张所有文件当前状态的快照,然后存储一个指向该快照的引用。如果文件发生了变化,就会对文件进行存储。如果文件没有发生变化,则快照不会对文件进行保存,而是只留下一个链接,这个链接会指向上一个快照的文件。

2 git文件状态

  在git中,文件可以分为已跟踪和未跟踪文件。
  未跟踪文件是git没有监控的文件,可以通过使用git add等命令加入监控。
  已跟踪文件是由git所监控的文件,状态可以进一步分为以下三种状态之一:已提交(commit)、已修改(modified)、已暂存(staged)。
    已提交:文件已经存入本地数据库中。
    已修改:已经改动文件,但未提交
    已暂存:文件已经做了标识,并将其加入下一次要提交的快照中。

3 git工作区域

  git的工作区域主要可以分为三个部分:git目录、暂存区、工作目录。
git目录是git保存项目元数据和对象数据库的地方。
工作目录是项目某个版本的单促检出,这些文件从git目录下的压缩数据库内被提取出,放置在磁盘上以供使用修改。
暂存区是一个文件,它保存了下次要提交内容的相关信息。

4 head的概念

  head是指向当前所在本地分支快照的指针,表明当前的git的快照版本。当进行commit/push等操作时,会更新head的指针,使之指向更新后的快照版本。也可以通过使用revert等命令,使版本回退,或checkout来指向其他分支

5 .gitignore文件

  .gitignore文件主要用于指定忽略的文件/文件夹。需要放在git目录的根目录,支持正则表达式。

6 分支和主干

  分支和主干其实是一样的东西,是工作流的一种概念。但在实际工作中,需要有一个准绳,所以通常以初始化时的系统自带的第一个分支master作为主干。工作时建立其他的分支,工作完就把工作分支的工作合并到主干上。

7 tag

  tag是版本标记,通常版本号是版本摘要的一部分,难以理解且上下版本之间没有联系,所以可以通过在版本上增加标记,提示该版本实际信息,以便于检索与理解。

8 merge

  merge是合并,将两个分支合并为同一个分支,合并后,仍指向原来分支。
  流程如下:
  
在这里插入图片描述

9 rebase

  rebase是变基,即变动基点的意思,通常来说,一个新的分支是从旧的分支的某个快照中分离出来的,如8中的图,A1是分支A和分支B的分歧点,是最后的公共点。站在分支b的角度来说,它所做的所有工作都是基于分支A1之上,所以A1就是分支B的基点。那么rebase命令就是变动这个基点,使分支B的工作不是基于A1而是基于A3。具体的操作是将B2、B3的变动进行提取,并在变动后的基点上再现。
  流程如下:
在这里插入图片描述
  由于基点不一样,所以重新提交升成的版本会与原来的不一样。
  相比于merge,变基的最大优点是在主干合并后变更历史日志上也会显示成一条直线,可以简洁明了的了解变更历史。但由于变基会丢弃原有的快照版本,会导致依赖这些版本开发的人员产生困扰。
在这里插入图片描述
  如分支B进行变基后,B1被分支B抛弃,作为基础的分支C虽然还能看到B1,但B1已经不存在任何意义了,造成分支C的日志的污染。当然分支C可以通过fetch的方法重新从分支B获取信息。

10 狐步舞更新

  狐步舞更新实质并不会对代码造成影响,因为在提交合并时,必须要解决冲突才能合并,所以在这一点,无论是怎样的更新操作,对代码本身是并没有影响的。受影响的是更新历史日志。狐步舞更新的示例如下:
在这里插入图片描述
A:git pull master
A:git push master
C:git pull master
C:git push master
  分支A和分支C分别以主干的0和1版本出发,工作完成后通过从主干fetch后再merge方式并入到主干。在分支C合并完之后,主干的历史就如图所示,可以看到变更历史有三条道,每条道显示各自分支的变更,不便主干管理。其问题在于采用这种方式进行更新,主干的历史变更记录会记下分支是从哪个版本开始的工作,但实际上在主干代码管理中,我们并不care分支是在哪个快照开始的工作,只care分支的实际工作和并入的时间点。所以我们可以通过使用rebase的方式来提交代码,那么主干的变更历史就会成为一条直线,美观且方便管理。
在这里插入图片描述
A:git pull --rebase master
A:git push master
C:git pull --rebase master
C:git push master

11 git命令

git status 查看git目录下文件状态
git add file 新增跟踪文件/暂存已修改
git add . 新增所有跟踪文件/暂存所有修改
git commit -m ‘提交信息’ 将所有暂存区的信息提交到git目录,形成一个新的快照。
git rm file 删除文件,并将该操作记录放入暂存区。
git fetch [remote-name] [branch-name] 从指定的远端仓库的指定分支拉取快照
git remote -v 查看当前远程仓库连接
git remote add [shortname] [url] 增加远程仓库连接
git remote rename [old] [new] 重命名远程连接
git remote rm [remote-name] 删除远程连接
git config --global [config-name] [config-value] 配置全局配置
git tag -a [tag-name] -m [tag-message] 创建注释标签
git fetch [remote-name] 从远程分支拉取数据
git branch -v 查看分支
git checkout -b [branchname] 切换分支,若分支不存在则新建
git branch --merged 查看已合并分支
git branch --no-merged 查看已合并分支
git push [remote-name] [branch-name] 推送数据到远程连接的指定分支
git log 查看变更历史
git stash 将当前暂存的变更和跟踪文件的修改到一个栈中,以便完成其他工作再取回
git stash branch [branch-name] 将栈中的变更变为一个新的分支

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值