一、Git是一个开源的【分布式版本控制系统】
对,git是一个分布式版本控制系统,而非SVN集中式版本控制系统。
二、基本操作指令
1、创建仓库
a. 当前目录创建仓库
git init
b. 指定目录 创建仓库
git init 目录名
2、设置配置文件
a. 全局配置
git config --global user.name lxd
git config --global user.email lxd@163.com
b. 本地仓库配置
git config --local user.name lxd
git config --local user.email lxd@163.com
c. 查看配置信息
git config --global --list
3、工作区文件新增到暂存区
a. 提交指定文件
git add hello.java
b. 提交当前目录所有文件
git add .
git add *
c. 提交新增或修改的文件
git add -A
d. 把提交过暂存区,已经发生改变的文件再次提交到暂存区
git add -u
4、暂存区文件提交到版本库(本地仓库)
a. git commit -m "初始版本"
b. git commit -am "初始版本" ----如果没有任何修改或新增文件则自动忽略该命令
5、查看git提交日志
a. 全部日志
git log/git log --all
b. 简化日志
git log --oneline
c. 查看前5个日志
git log -n5 --oneline
d. 图像化查看所有日志
git log --all --graph
6、查看上次提交后是否有修改
git status
7、查看差异
a. 查看工作区与暂存区差异
git diff
b. 查看暂存区与仓库之间的差异
git diff --cached
c. 比较不同commit的差异
git diff HEAD1 HEAD2
8、清空暂存区、工作区修改
a. git reset --hard
9、删除工作区和暂存区文件
a. git rm 文件名
10、重命名文件
a. git mv hello.java hello2.java
11、版本回滚
a. 恢复暂存区和HEAD一致
git reset HEAD
b. 恢复暂存区指定文件与HEAD一致
git reset HEAD --文件名
c. 恢复工作区与暂存区一致
git checkout --文件名
d. 回退到指定commit,会清楚之后提交的commit
git reset --hard HEAD
三、分支管理
1、创建分支
a. 直接创建
git branch dev (分支名)
b. 基于某个历史版本创建分支
git branch dev HEAD
2、查看分支
a. git branch -av
3、删除分支
a. git branch -d dev(分支名)
4、切换分支
a. git checkout dev(分支名)
5、查看分支差异
a. 查看分支差异
git diff dev master
b. 查看分支指定指定文件差异
git diff dev master -- index
6、本地仓库推送到远程仓库
a. git代码托管平台创建仓库
http地址:https://gitee.com/woniu/git-test.git
b. 本地仓库与远程仓库关联
git remote add origin https://gitee.com/woniu/git-test.git
c. 如果远端仓库是空的
git push -u origin master
一般远端仓库都会有readme文件,解决方案
git pull --rebase origin master
d. 提交到远程仓库
git push origin master
7、拉取远程分支
a. 拉取远程分支,默认拉取主分支
git clone https://gitee.com/woniu/git-test.git
b. 拉取远程指定分支
git clone -b dev https://gitee.com/woniu/git-test.git
c. 拉取主分支后,基于远端指定分支本地创建新分支
git branch -av 红色部分代表远端分支
git branch dev origin/dev 基于远端的dev分支本地创建dev分支
四、强制提交
a. git push origin master --force
b. git push origin master:dev --force
本地分支:远程分支
c. git push origin master:dev
五、工作区、暂存区、版本库(本地仓库)
左侧为工作区,编辑文件所在的目录,右侧为版本库,其中index区域是暂存区,标记为"master"代表master主分支。