git笔记

一、版本控制

1.1 集中式与分布式

集中式:svn,cvs

  • 优点:代码存放在单一的服务器上 便于项目管理
  • 缺点:中央服务器的单点故障
          a. 服务器宕机:代码无保障
          b.服务器故障:丢失整个项目历史记录

分布式:git,bitkeeper

1.2 git与svn

gitsvn
本质分布式集中式
存储方式元数据文件
分支支路文件目录
全局版本号
完整性强(SHA-1哈希算法)
工作方式将每个版本独立保存记录的是每一次版本变动的内容

二、git原理简介

三棵树:

  git提交流程:

  1. 在工作区添加,修改文件
  2. 将需要进行版本管理的文件放入暂存区
  3. 将暂存区的文件提交到git仓库

 git管理的文件有三种状态:

  • 已修改(modified)
  • 已暂存(staged)
  • 已提交(committed)

在这里插入图片描述

  • add:把工作区的文件放入暂存区
  • commit:把暂存区文件提交到git仓库
  • reset:把git仓库的文件还原到暂存区
  • checkout:把暂存区的文件还原到工作区

三、基本操作

3.1 设置

签名:
    仓库级别:
     设置用户名:git config user.name 名字
     设置邮箱:git config user.email 邮箱
    系统级别:
     git config --global user.name 名字
     git config --global user.email 邮箱

git初始化:git init
git状态:git status
查看历史记录:git log
暂存区文件覆盖工作区文件:git checkout – xx.xxx

3.2 文件操作

3.2.1 提交文件
  1. 创建文件 touch 文件名(加后缀)
  2. 添加到暂存区 git add 文件名(加后缀)
  3. 提交到仓库 git commit -m 版本描述(必写)
3.2.2 修改文件
  1. 修改文件内容:vi xx.xxx
  2. 保存:先按esc进入Command模式,输入:wq
  3. 添加到暂存区,再次提交

修改最后一次提交:git commit --amend
重命名文件:git mv 旧名 新名

3.2.3 删除文件

git rm xx.xxx(文件名):
该命令删除的只是工作区和暂存区的文件,也就是取消跟踪,在下次提交时不纳入版本管理
git rm -f xx.xxx(文件名):强制删除暂存区和工作区
git rm --cached xx.xxx(文件名):只删除暂存区文件,保留工作区

3.2.4 回滚

git reset HEAD~:

  1. 移动HEAD的指向,将其指向上一个快照
  2. 将HEAD移动后指向的快照回滚到暂存区

git reset --soft HEAD~:

  1. 移动HEAD的指向,将其指向上一个快照

git reset --hard HEAD~:

  1. 移动HEAD的指向,将其指向上一个快照
  2. 将HEAD移动后指向的快照回滚到暂存区
  3. 将暂存区的文件还原到工作目录

回滚到指定快照(不仅往回滚,还能往前滚):git reset 快照id(哈希值)
往前第n个快照:git reset HEAD~n
回滚个别文件:git reset 快照 文件名/路径

3.2.5 版本对比

在这里插入图片描述

比较暂存区与工作区:git diff
比较暂存区和git仓库快照:git diff --cached
比较两个历史快照:git diff 快照id1 快照id2

注释:
diff --git a/xx.xxx b/xx.xxx(a是暂存区 b是工作区)

+++新文件;—旧文件
+:对应新加的内容_绿色 -:减少的内容_红色 没有改变_白色

F向下翻页 G向上翻页 Q退出

搜索:/关键词 从上往下?关键词 从下往上

eg:@@ -1,20 +1,28 @@(旧文件显示连续20行,新文件28行)

四、分支

4.1 基本操作

创建分支:git branch 分支名

切换分支:git checkout 分支名

合并分支:git merge 分支名
当想合并的分支与主分支有文件内容不一致时,会发生冲突,需要修改冲突文件

删除分支:git branch -d 分支名

查看带有分支的记录:git log --decorate(可见HEAD指向) --oneline(精简形式) --graph(图形化) --all(所有分支)

4.2 匿名分支

git checkout HEAD~:
    创建分支没有名字,当把HEAD指针切换到master上且继续不命名时,匿名分支上的东西将会被丢弃,可用来做测试

4.3 checkout命令

  1. 从历史快照(或暂存区)中拷贝文件到工作目录(同时覆盖)
  2. 切换分支

checkout与reset区别:

  • 恢复文件
  • 共同点:
    checkout与reset都可以用于恢复指定快照的指定文件,并且它们都不会改变HEAD指针的指向
  • 区别:
    reset只将指定文件恢复到暂存区,而checkout命令是同时覆盖暂存区和工作目录;
    在恢复文件方面,reset比checkout更安全
  • 恢复快照:
  • 共同点:
    reset:用来"回到过去"的,根据选项的不同,reset命令将移动HEAD指针(–soft)->覆盖暂存区(–mixed,默认)->覆盖工作区(–hard)
    checkout:checkout虽然是用于切换分支,但事实上也是通过移动HEAD指针和覆盖暂存区,工作区来实现的
  • 区别:
    在这里插入图片描述
    (1)对于reset–hard来说,checkout更安全:checkout在切换分支前会检查当前工作状态,如果不是"clean",无法操作;而reset --hard则是直接覆盖所有数据
    (2)更新HEAD指向的方式:reset会移动HEAD所在分支的指向,而checkout只会移动HEAD自身来指向另一个分支

五、github

5.1 功能介绍

  • 仓库(repository):存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库
  • 复制项目(fork):复制出一个独立存在的项目,forked from xxx/xxx
  • 发起请求(pull request):向项目原作者提出更改代码的建议
  • 事务卡片(issue):发现代码bug,问题
  • 收藏(star):收藏当前文档
  • 关注(watch):订阅此文档动态

issue与pull request的区别和联系:

  • 共同点:
    都可以向作者提出问题
  • 区别:
    issue:指出问题,提供思路_作者修改
    pull request:复制项目,修复bug_作者采纳

5.2 git管理远程仓库

克隆工程到本地:git clone http://xxx (url地址)
将本地仓库同步到git远程仓库:git push

5.3 github pages 搭建个人网站

url:https://用户名.github.io

搭建步骤:

  1. 创建个人站点 ->新建仓库 (仓库名必须是:用户名.github.io)
  2. 在仓库下新建index.html

注意:

  1. github pages 仅支持静态网页
  2. 仓库里只能是.html文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值