Git实战

0. 前奏

0.1 安装

  1. 下载 点击进入下载地址
  2. 无脑下一步

0.2 使用

[1]. 右键选择 Git Bash Here
[2]. 初始化本地仓库(创建一个文件夹用作本地仓库)
[3]. git config -e --global 命令生成 .gitconfig文件,默认在c盘下的当前用户目录里,删除里面的内容
[4]. 设置name和email GitBash中使用 git config --global user.name "名字"git config --global user.email "邮箱" 设置
[5]. 在创建的文件夹中使用git init命令初始化本地仓库

0.3 ssh配置

# 执行下列操作,然后一直按回车
ssh-keygen -t rsa -C "这里换上你的邮箱"

在C:/Users/用户/.ssh文件下 id_rsa 和 id_rsa.pub 文件,将 id.rsa.pub 文件中的内容复制到github即可

1. git的本地版本管理

1. 初始化:在想要管理的文件夹下执行以下命令

git init

2. 本地版本的工作流程

各区域存放的东西:
  1. 工作区:沙盒
  2. 暂存区:预期下一次提交的快照  
  3. 版本库:本次提交的快照,下次提交的父节点  

  工作区文件的变动,会被git自动检测,并使其变成红色
  使用git add . 将红色的文件复制到暂存区(这些文件就是下一次提交的快照),并使其变绿
  使用git commit -m "message" 将绿色的文件复制到版本库,称为提交。(这些文件就是本次提交的快照,暂存区的文件存放的也变称为本次提交的快照)
  1. 仓库创建完(git init),工作区文件file.txt被检测到变化(工作区和暂存区不同,使用git status 命令查看 file.txt变为红色)
  2. 用 git add 把工作区中的内容复制到暂存区中(暂存区和版本库不同,使用git status 命令查看 file.txt变为绿色)
  3. 使用 git commit,它会取得索引中的内容并将它保存为一个永久的快照,然后创建一个指向该快照的提交对象,最后更新 master 来指向本次提交。(此时三个区域的文件一样,所以git status不会输出)

    【切换分支或克隆的过程也类似。 当检出一个分支时,它会修改 HEAD 指向新的分支引用,将索引填充为该次提交的快照,然后将索引的内容复制到工作目录中。(三个区域还是相同的,所以git status不会输出)】

3. 功能命令

git status    // 管理文件夹下的文件状态  红色:检测到文件被创建或者文件以修改; 绿色:文件已经被放入暂存区;

git log    // 显示当前分支所有提交过的版本信息,不包括已经被删除的 commit 记录和reset的操作。

git reflog    // 显示所有分支的所有操作记录信息(包括已经被删除的 commit 记录和 reset 的操作)。

// reset是让HEAD指针指向前面的版本
// --soft   HEAD指向当前版本的前n个版本,仅改变 版本库 的内容,所以版本库的内容会和暂存区不一样,git status命令查看文件会变绿
// --mixed  HEAD指向当前版本的前n个版本,会改变 版本库、暂存区 的内容,所以暂存区的内容会和工作区不一样,git status命令查看文件会变红
// --hard   HEAD指向当前版本的前n个版本,会改变 版本库、暂存区、工作区 的内容,三个区域内容一样,git status命令不会输出
git reset [--soft | --mixed | --hard] [HEAD~n]   

4. 分支-基础命令

git branch  //查看所有分支,*只当前分支

git branch -r    // 查看所有远程分支

git checkout 分支名    // 切换分支

git checkout -b 分支名  // 创建分支并切换分支

git merge 分支名    // 将分支合并到当前分支

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

5. 远程仓库(github)

5.0 首先创建仓库(或者创建组织,然后创建仓库)

创建仓库

创建组织,邀请成员,创建仓库

5.1 基础命令
git remote add origin 远程仓库地址     // 给远程仓库起别名

git push origin 分支名    // 给远程仓库推送分支并合并,如果远程仓库没有该分支,就创建。

git push origin 本地分支名:远程分支名    // 给远程仓库的远程分支推送本地分支并合并,如果远程仓库没有该分支,就创建。

git push origin --delete 远程分支名     // 删除远程分支

git clone origin    // 克隆远程仓库的代码(所有分支都会克隆下来)

git pull origin 分支名    // 从远程仓库拉取分支并合并

git pull origin 远程分支名:本地分支名    // 从远程仓库拉取远程分支到本地分支并合并

git checkout -b 本地分支名 origin/远程分支名    // 拉取远程分支并创建本地分支

6. 工作流

7. 发布版本

为了能清晰的管理版本,在公司不会直接使用commit来做版本,会基于Tag来实现:v1.0、v1.1、v2.0...

git tag    // 查看所有版本
git tag -a v1.0 -m "版本介绍"    // 创建本地 Tag 版本(基于当前分支的当前内容 创建一个tag)
git tag -d v1.0        // 删除tag

git push origin tagName    // 将本地的tag 推送到远程仓库
git push origin --tags     // 将本地的所有tag 推送到远程仓库

git pull origin  --tags    // 将远端的tag 拉取到本地

git checkout tagName      // 切换 Tag

git clone -b tagName 远程仓库地址    // 指定tag下载代码

8. 给开源项目做贡献

  1. fork源代码,把别人带代码拷贝到自己的远程仓库
  2. 拉取到本地进行修改
  3. 修改完推送到自己的远程仓库
  4. 提交bug申请 (pull request)

3. Question

3.1 为什么需要暂存区

暂存区实际上时索引区,提供了指针->版本库文件的映射
因为版本库中存放的文件是以【commit->树】的形式存储的(commit文件相当于一个指针,指向了文件树,还指向前一个commit,除此之外还有提交的时间等信息),如果修改了某路径的文件,需要从树根依次遍历到该文件,有了暂存区(索引区),就可以直接定位到该文件了

posted @ 2022-01-17 16:50  一只小白的进修路  阅读(35)  评论(0编辑  收藏  举报