git介绍
- git是一个分布式版本控制工具
- git一图流概括:

git安装部署
-
windows
- 直接从官网下载:Git - Install for Windows
-
Linux
bash
sudo apt-get install git
- 拓展:Linux编译git源码安装
- 打开网址:Index of /pub/software/scm/git/,下载合适版本
bash
# 安装git依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
# 移除旧的git
yum remove git
# 进入git解压目录,并预编译git
./configure --prefix=/usr/local/git_2.9.5
# 编译并安装git
make && make install
# 将git的脚本软连接到/usr/bin/ 目录下
ln -s /usr/local/git_2.9.5/bin/* /usr/bin/
# 查看是否安装成功
git --version
初始化本地仓库和签名
- 初始化本地仓库命令
bash
# 初始化本地仓库
git init
# 查看本地仓库状态
git status
- 设置用户签名
- git config 配置有
system、global和local三个级别 - 级别大小分别是
local>global>system,级别大的会覆盖掉级别小的
- git config 配置有
bash
# 默认情况下是 local 级别
git config user.name bugmaker
git config user.email 1597532486@qq.com
# system级别,每个系统用户都共有。存在git安装目录下的/etc/gitconfig
git config --system user.name bugmaker
git config --system user.email 1597532486@qq.com
# global级别,每个系统用户独有且相互隔离。
# Windows通常保存在C:\Users\xxxx\.gitconfig,Linux为/home/xxx/.gitconfig
git config --global user.name bugmaker
git config --global user.email 1597532486@qq.com
# local级别,当前仓库独有。存在当前仓库的.git目录下
git config --local user.name bugmaker
git config --local user.email 1597532486@qq.com
# 拓展:删除配置项的值
git config --global --unset user.name
配置远程库和拉取代码
- 配置远程库
bash
# 添加远程库
git remote add <name> <远程库url>
git remote add origin https://gitee.com/bugmaker/demo.git
# 查看已配置的远程库
git remote -v
# 删除远程库
git remote rm <name>
git remote rm origin
# 修改远程仓库名
git remote rename <old_name> <new_name>
- 拉取代码:使用
git clone
bash
# 拉取代码
git clone https://gitee.com/bugmaker/demo.git
暂存区命令
bash
# 工作区 -> 暂存区
git add <file>
git add .
# 暂存区回退到工作区
git restore --staged <file>
git restore --staged .
# 工作区修改的文件回退到修改前
git restore <file>
# 删除工作区文件,并且将这次删除放入暂存区
git rm <file>
# 停止追踪指定文件。不再被 Git 管理,但它还在你的项目文件夹里
$ git rm --cached <file>
# 暂存区提交到本地仓库,不加文件名提交所有暂存区的数据
git commit -m "message" <file>
# 自动把所有已经跟踪过的文件暂存并提交,跳过 git add 步骤
git commit -a -m "message" <file>
本地仓库命令
- 查看历史版本
bash
# 查看详细的历史版本
git log
# 查看简洁版
git log --oneline
# 类似于树形结构
git log --graph
- 版本回退
bash
# 此为默认方式,所有修改的内容和版本回退的内容都会退回到工作区
# 等同于不带任何参数的git reset
git reset --mixed <head>
# 回退到某个版本,所有修改的内容不会变动,版本回退的内容都会退回到暂存区
git reset --soft <head>
# 彻底回退到某个版本,本地的源码也会变为上一个版本的内容,所有修改的内容都会丢失
git reset --hard <head>
# 回退到上一个版本
git reset HEAD^
# 回退到上上个版本
git reset HEAD^^
# 回退到上5个版本
git reset HEAD~5
# 回退到指定版本
git reset <版本号>
本地库与远程库交换
- 常用命令
bash
# 从远程仓库拉取代码
git pull
# 将本地仓库代码推送到远程仓库
git push origin master
git pull和git fetch区别
git pull=git fetch+git mergegit fetch只拉取,不合并。它只是去远程仓库把最新的提交记录、分支信息下载到本地的.git目录中,完全不影响你当前的本地工作区。你的本地文件不会发生任何改变,也不会产生新的合并冲突。git pull它执行两步操作。首先像fetch一样下载最新代码,然后立即尝试将这些代码合并到你当前所在的本地分支上。
git pull --rebase命令
- 相当于
git fetch+git rebase - 它会将你本地的未推送提交"挪到"远程最新提交的后面,避免产生多余的 Merge Commit。
分支命令

- 创建和修改分支
bash
# 创建分支
git branch <new_branch>
# 修改分支名称
git branch -m <old> <new>
- 查看分支
bash
# 查看分支
git branch
# 查看分支详情
git branch -v
# 查看远程分支
git branch -r
# 查看所有分支
git branch -a
- 切换分支
bash
# 切换分支
git checkout <branch_name>
# 切换到上一个分支
git checkout -
# 创建分支,并切换到创建的分支
git checkout -b <new_branch>
- 删除分支
bash
# 删除分支
git branch -d <分支名称>
# 强制删除
git branch -D <分支名称>
分支合并及冲突解决
- 分支合并
bash
# 将一个分支合并到另一个分支
git merge <分支名称>
# 回退合并
git merge --abort
- 分支合并文件冲突,一般解决方案
bash
# 1. 解决存在冲突的文件
# 2. 解决完成后将冲突的文件提交到暂存区
git add <冲突文件>
# 3. 将暂存区提交到本地仓库
git commit -m "解决冲突"
# 4. 提交到远程仓库
git push origin master
Tag命令
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签
bash
# 给当前所在分支打标签
git tag v1.0
# 指定标签名、说明文字和提交节点
git tag -a v0.1 -m "version 0.1 released" 1094adb
# 查看所有标签
git tag
# 查看指定标签
git show v1.0
# 删除标签
git tag -d v1.0
# 推送标签到远程仓库
git push origin v1.0
# 将本地仓库所有标签都推送到远程仓库
git push origin --tags
stash命令
假设您正在为产品新的功能编写/实现代码,当正在编写代码时,突然出现软件客户端升级。这时,您必须将新编写的功能代码保留几个小时然后去处理升级的问题。在这段时间内不能提交代码,也不能丢弃您的代码更改。 所以需要一些临时等待一段时间,您可以存储部分更改,然后再提交它
bash
# 添加到stash
git stash
# 指定提交信息名称
git stash save "message"
# 查看Git栈
git stash list
# 默认恢复git栈中最新的一个stash@{num}
git stash pop
# 指定恢复git栈中的stash
git stash pop stash{1}
# 默认恢复git栈中最新的一个stash@{num},该命令不会将内容从对堆栈中删除
git stash apply
# 指定恢复git栈中的stash,该命令不会将内容从对堆栈中删除
git stash apply stash{1}
# 默认删除git栈中最新的一个stash@{num}
git stash drop
# 指定删除git栈中的stash
git stash drop stash{1}
# 移除所有的栈
git stash clear
其他命令
bash
# 显示指定文件是什么人在什么时间修改过
git blame <file>