Git基本使用| 青训营笔记

74 阅读4分钟

1. Git

为什么要用Git

假如有这样一个场景:比如我们要提交一份工作总结,我们将其命名为,工作总结.txt。第二天,我们被要求修改这份总结,但当我们要修改这份总结的时候,我们要保存昨天的版本,防止改得更糟。但是为了防止命名冲突,我们不得不把之前的工作重命名为,工作总结_01.txt,而本次命名为工作总结_02.txt。假设我们在以后要不停地修改......

这就会出现许多文件,它们是同一个内容的不同版本。然而,这样很不好做管理,且不优雅。为了解决类似的一个问题,Linus写了Git,最初用于管理Linux内核代码,现在是世界上最流行的版本管理工具了。

Git简介

Git是一种分布式版本控制系统。

  • 分布式:分布式版本控制就是每个人可以创建一个独立的代码仓库用于管理,各种版本控制管理都可以在本地完成。将备份代码和记录完全独立在本地存储,当你想将代码恢复到某一个版本的时候,本地版本控制不需要依赖网络就可以完成此操作。
  • 版本控制:对文件的变更管理。

好处:方便多文件多版本管理,协同开发,防止文件丢失。

Git安装和配置

首次使用之前,配置自己的用户名和邮箱:

git config --global user.name <username>
git config --global user.email <email>

Git中的相关概念

Git本地数据管理,大致可分为三个部分,工作区,暂存区和版本库。

  • 工作区(Working directory)

    我们直接编辑的地方

  • 暂存区(Stage or Index)

    数据暂时存放的地方,可以在工作区和版本库之间进行数据的友好交流

  • 版本库(Commit History)

    存放已提交的数据,“版本“

Git本地操作

  1. 帮助文档
git help <command>

1.初始化仓库,选择需要作为仓库的文件目录

git init

这样就新建好一个空仓库(会生成.git的一个目录)

  1. 查看工作区、暂存区状态
git status
  1. 添加到暂存区
git add <filename>
git rm --cached <filename> #从暂存区删除
  1. 提交到本地库
git commit -m "commit message"
  1. 查看提交历史
git log [options]
git reflog #显示可引用的历史版本记录
  1. 删除文件
git rm <filename> # git rm 只是在暂存区删除了,并没有提交
git commit

7.对版本进行后退

本质:对HEAD指针进行操作

  • git reset <commit> 将Git仓库的HEAD回退到某个版本,清空暂存区,但不修改目录中的文件
  • git reset --hard <commit> 前进,后退版本
  • 使用^符号:只能往后退,git reset --hard HEAD^后退一步(几个^就回退几步)
  • 使用~符号,git reset --hard HEAD~<步数> 后退版本

reset命令的三个参数对比:

  • --soft: 仅在本地库移动HEAD指针
  • --hard: 在本地库移动HEAD指针,重置暂存区、重置工作区
  • --mixed: 在本地库移动HEAD指针,重置暂存区(默认参数)
  1. 对比文件差异
  • git diff <filename>比较当前目录文件和暂存区文件中的差异
  • git diff <commit> <filename>和本地库某个版本进行比较
  • git diff <commit> <commit> <filename> 比较两个历史提交版本中某文件的差异
  1. 分支操作
git branch -v # 查看所有分支
git branch <banch> # 创建分支
git branch -d <branch> # 删除分支
git branch -m <oldname> <newname> # 重命名分支
git checkout <branch> # 切换分支
git checkout -b <branch> # 创建并切换分支

分支合并:站在被合并的分支上

git checkout <branch>
git merge <branch>

解决冲突:删掉git的标记提醒,然后手动修改文件到满意的情况,然后git add,再git commit

gitignore

有一些文件,或者一些更改,我们是不想进行提交的。比如构建的文件目录,二进制文件等,这时候在.gitignore文件中写入这些文件或者目录,git不会追踪这些文件。 常用的项目模板:github.com/github/giti…

gitattributes

用于设置文件属性,一般用于设置行尾转换、字符编码等等一系列属性。正常情况下,Git默认的设置都能够使我们达到要求,也能够自动识别文件,不需要单独使用gitattributes进行指定。