博客链接:https://ouduidui.cn/blog/detail?blogId=5fcf247161ae700fd80190e3

git介绍

git(读音/t/)是一个开源的分布式版本控制系统,能够无效、高速地解决从很小到十分大的我的项目版本治理。git是Linus Torvalds为了帮忙治理Linux内核开发而开发的一个开放源码的版本控制软件。

git保留的不是文件的变动或者差别,而是一系列不同时刻的文件快照。在进行提交操作时,git回报纯一个提交对象(commit object)。该提交对象会蕴含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还蕴含作者的姓名和邮箱、提交时输出的信息以及指向它的父对象的指针。

git装置及配置

装置

Linux
sudo yum install git
Mac
# 须要先装置homebrew/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"# 装置gitbrew install git
Win

间接从官网下载安装。

配置

# 配置昵称git config --global user.name "userName"# 配置邮箱git config --global user.email "userEmail"

git存储

git分区

git存储分为四个局部:

  • workspace:工作空间

    • 咱们开发代码的目录
  • index:暂存区

    • .git 目录下的index 文件
  • repository:本地仓库

    • 通过git clone 将近程的代码下载到本地,代码库的元数据信息在根目录下的.git 目录下
  • remote:近程仓库

    • 比方githubgitlab 等近程仓库

  • 工作区 —git add —> 暂存区 —git commit —> 本地仓库 —git push —> 近程仓库
  • 近程仓库 —git fetch —> 拉取最新代码至本地仓库,并应用refs/remotes门路下对应分支文件,记录近程分支末端commit_idgit merge —> 工作区
  • 近程仓库 —git pull —> 拉取最新代码至本地仓库,并主动合并代码至工作区,且应用refs/remotes门路下对应分支文件,记录近程分支末端commit_id
git fetch 和 git pull

git fetch 是将近程主机的最新内容拉取到本地,须要用户查看代码当前决定是否合并到工作本机分支中。

具体操作如下:

# 本地新建一个template分支,并将近程origin仓库的master分支代码下载到本地template分支git fetch origin master:template# 比拟近程代码与本地代码的区别git diff# 将temp分支合并到本地master分支git merge temp# 不想保留分支,能够将其删除git branch -d template

git pull 能够认为是git fetchgit merge 两个步骤的合并。

具体用法:

# 将近程主机的某个分支,与本地的指定分支合并git pull <近程主机名> <近程分支名>:<本地分支名>

git pull 合并后可能会呈现抵触,须要手动解决抵触。

error:Your local changes to the following files would files would be overwritten by merge:Please commit your changes or stash them before you merge.

解决抵触的形式是先把本地的代码暂存。

# 先将本地批改暂存起来git stash# 查看保存信息git stash list# 拉取内容git pull# 还原暂存内容git stash pop

git外部存储

本地我的项目外面的.git 目录的文件如下:

total 184-rw-r--r--    1 ouduidui  staff     7B 12  8 10:28 COMMIT_EDITMSG-rw-r--r--    1 ouduidui  staff   350B 12  3 13:17 FETCH_HEAD-rw-r--r--    1 ouduidui  staff    30B 12  3 13:17 HEAD-rw-r--r--    1 ouduidui  staff    41B 12  8 10:29 ORIG_HEAD-rw-r--r--    1 ouduidui  staff   620B 12  3 13:17 config-rw-r--r--    1 ouduidui  staff    73B 10  4 11:16 descriptiondrwxr-xr-x   12 ouduidui  staff   384B 10  4 11:16 hooks-rw-r--r--    1 ouduidui  staff    63K 12  8 10:29 indexdrwxr-xr-x    3 ouduidui  staff    96B 10  4 11:16 infodrwxr-xr-x    4 ouduidui  staff   128B 10  4 11:17 logsdrwxr-xr-x  259 ouduidui  staff   8.1K 12  3 10:07 objects-rw-r--r--    1 ouduidui  staff   1.1K 12  3 13:16 packed-refsdrwxr-xr-x    5 ouduidui  staff   160B 10  4 11:17 refs
文件/路径名介绍
COMMIT_EDITMSGcommit编辑
FETCH_HEAD是一个版本链接,记录在本地的一个文件中,指向着目前曾经从近程仓库取下来的分支的末端版本
HEAD代码库以后分支的指向
ORIG_HEAD针对某些危险操作,git通过记录HEAD指针的上次所在的地位ORIG_HEAD提供了回退的性能。当你发现某些操作失误了,比方错位的reset 到一个很早很早的版本,能够应用git reset --hard ORIG_HEAD 回退到上一次reset 之前
config代码库根本的配置文件
description我的项目形容
hooks存储git钩子的目录,钩子只在特定工夫产生时触发的脚本,比方提交之前和提交之后
index暂存区
info存储git信息的目录
logs存储git操作日志
objects存储git各种对象及备用的对象库
packed-refsgit 会定期执行一个叫git gc 的命令,gc 是 garbage collection 的缩写。这个命令会将一些临时用不到的 commit 和分支的具体内容打包起来,打包在 objects 文件夹下的 pack 文件夹下,用来压缩所占用的体积。这个文件就是用来记录这些信息的
refs存储git各种援用的目录,蕴含分支、近程分支和标签

git状态

咱们能够通过git status 查看本地存储状态。

git status# Changes to be committed:代表被add的文件,被加载到了暂存区# Changes not staged for commit:代表在以后分支中被批改的文件,还没有被add,存储在工作区

git常用命令

配置git

# 配置用户名git config --global user.name "username"# 配置邮箱git config --global user.email "userEmail"

初始化

git init

增加文件并提交代码

# 增加文件git add <filename># 增加全副文件git add .# 强制提交文件,可提交.gitinore中配置的文件git add -f <filename># 提交代码git commit -m "commit message"

查看以后仓库状态

git status

比照文件改变内容

git diff <filename>

查看git日志

git log

版本回退

# 版本回退到第N个版本前git reset --hard HEAD~N# 版本回退(切换)到指定版本git reset --hard <commit id>

查看关联仓库链接信息

git remote -v

关联近程仓库

git remote add origin <url>

推送到近程库

git push# 第一次推送git push -u origin <branch name># 推送到其余分支git push origin <branch name>

克隆代码

git clone <url># 克隆指定分支代码git clone -b <branch name> <url>

创立分支

git branch <branch name>

切换分支

git checkout <branch name># 创立并切换分支git checkout -b <branch name>

查看分支

git branch# 查看近程分支git branch -r# 查看所有分支git branch -a

合并分支

合并某分支到以后分支,若存在抵触会提醒手动批改后在提交,git merge 默认为fast forward模式

# fast forward模式git merge <other branch name># 禁用fast forward模式git merge --no-ff -m "commit message" <other branch name>

查看分支合并图

git log --graph --oneline --abbrev-commit

删除分支

git branch -d <branch name># 强制删除git branch -D <branch name>

保留工作空间

git stash

查看保留的工作空间

git stash list

从保留的工作空间复原

git stash apply# 若存在多个保留的工作空间 (n为序号,从0开始)git stash apply stash@{n}# 从保留的工作空间复原并删除保留空间git stash pop# 若存在多个保留的工作空间 (n为序号,从0开始)git stash pop stash@{n}

删除保留的工作空间

git stash drop# 若存在多个保留的工作空间 (n为序号,从0开始)git stash drop stash@{n}

将其余分支的提交利用到以后分支

git cherry-pick <commit id>

抓取代码

git pull

将本地分支与近程分支关联

git branch --set-upstream-to <local branch name> origin/<remote branch name>

建设标签

# 给以后分支建设标签git tag <tag name># 给某个提交建设标签git tag <tag name> <commit id># 给某个提交建设标签并增加正文git tag <tag name> -m "description" <commit id>

查看标签

git tag

查看标签信息

git show <tag name>

删除本地标签

git tag -d <tag name>

删除近程标签

git push origin :<tag name>

推送标签至近程仓库

# 推送所有本地标签 git push --tag# 推送指定标签git push origin <tag name>