博客链接: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)"
# 装置 git
brew 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:近程仓库
- 比方
github
、gitlab
等近程仓库
- 比方
- 工作区 —
git add
—> 暂存区 —git commit
—> 本地仓库 —git push
—> 近程仓库 - 近程仓库 —
git fetch
—> 拉取最新代码至本地仓库,并应用 refs/remotes 门路下对应分支文件,记录近程分支末端commit_id
—git 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 fetch
和 git 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 description
drwxr-xr-x 12 ouduidui staff 384B 10 4 11:16 hooks
-rw-r--r-- 1 ouduidui staff 63K 12 8 10:29 index
drwxr-xr-x 3 ouduidui staff 96B 10 4 11:16 info
drwxr-xr-x 4 ouduidui staff 128B 10 4 11:17 logs
drwxr-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-refs
drwxr-xr-x 5 ouduidui staff 160B 10 4 11:17 refs
文件 / 路径名 | 介绍 |
---|---|
COMMIT_EDITMSG | commit 编辑 |
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-refs | git 会定期执行一个叫 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>