Git简介
分布式vs集中式
git是版本控制系统,与svn不同的是git是分布式,svn是集中式
安装
简单设置
配置文件
.git/config 当前仓库的配置文件
~/.gitconfig 全局配置
设置别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
设置用户名和邮箱
git config --global user.name "xxx"
git config --blobal user.email "xxx@xxx.com"
创建版本库
创建版本库
cd learngit
git init
# 在某目录下执行命令 git init 后
# 该目录会生成一个.git的隐藏文件夹,这个目录就是一个版本库了
# 所有版本控制系统只能跟踪文本文件的发动(如TXT文件中删除了第4行,而二进制文件作为一个整体)
# 统一用UTF-8编码
添加一个文件到暂存区(Stage)
vi readme.txt
git add readme.txt
将文件提交给HEAD
git commit -m 'my first commit'
时光穿梭
工作区与版本库
当前文件夹是工作区
.git文件夹是版本库
创建版本库是,自动创建了一个master分支
工作区--暂存区(stage/index)--当前分支(master)--远程库
查看仓库中文件的状态
git status
# 通过该命令可以清楚的了解当前版本库中的文件处于什么状态
文件的比较(只能比较工作区/Stage中的文件与Head中的不同)
git diff readme.txt
# 比较的是工作区与Stage中readme.txt的差异
git diff HEAD -- readme.txt
# 比较的是工作区与版本库(HEAD)中的readme.txt的差异
# HEAD 当前版本
# HEAD^ 上一版本
# HEAD^^ 上上版本
# HEAD~100 往上100个版本
查看提交历史
git log
git log --pretty=oneline
git reflog
# 查看执行的每一条命令
版本回退
git reset --hard HEAD^
git reset --hard comment_id(ID号,前7位就可以)
撤销修改
工作区----暂存区----当前分支
git checkout -- readme.txt
# 撤销工作区的修改
# 暂存区的内容覆盖工作区(丢弃工作区的修改)
# 没有--,该命令就是切换分支的命令了
git reset HEAD readme.txt
# 撤销暂存区的修改
# 版本库的内容覆盖暂存区(丢弃暂存区的修改)
git reset --hard HEAD^
# 撤销版本库的修改,版本回退
暂存区修改
# 这样一种场景:工作区,暂存区,版本库里内容一样,类似.project类似这种eclipse的项目配置文件也存在于版本控制中,现在把.project这类文件加入到忽略名单后
git rm --cached .project
# 这个命令是把.project从暂存区中删除
git commit -m "delete .project"
# 提交暂存区
删除文件
git rm readme.txt
# 与如下两个命令等价
rm readme.txt
git add readme.txt
git commit -m "delete"
远程仓库
免登录操作
Windows下生成ssh-keygen
1.安装Git
2.打开Git Bash
3.输入 ssh-keygen -t rsa -C "demo@gmail.com"
Linux下生成ssh-key
ssh-keygen -t rsa -C "demo@gmail.com"
cat ~/.ssh/id_rsa.pub
~/.ssh/id_rsa 这是私钥
~/.ssh/id_rea.pub 这是公钥
验证
ssh -T git@git.oschina.net
关联远程库
git remote add origin git@github.com:demo/learngit.git
# 把本地仓库与远程仓库相关联
# demo:github账户名
# origin:远程库的名字
查看远程库
git remote
git remote -v
推送到远程库
git push -u origin master
# 把本地所有内容推送到远程库上
# -u参数,不但会把本地master分支推送到远程master分支,还会把本地master分支与远程master分支相关联
# 第一次推送用-u,以后用就可以不用了
git push origin master
从远程库抓取
git pull origin master
从远程库克隆
git clone git@github.com:demo/gitskills.git ssh协议,速度快
git clone https://github.com/demo/gitskills.git https协议
分支管理
分支操作
git branch // 查看当前分支
git branch dev // 创建分支dev
git checkout dev // 切换到分支dev
git checkout -b dev // 创建并切换到分支dev
git merge dev // 合并指定分支(dev)到当前分支
删除分支dev
git merge -d dev // 如果分支有未提交的这样删除不了
git merge -D dev // 强制删除
查看分支合并情况
git log --pretty=oneline --graph --abbrev-commit
master转gh-pages
创建一个没有父节点的分支gh-pages
git checkout --orphan gh-pages
标签管理
使用GitHub
自定义Git
# 如果一个jar文件已经加到忽略文件里边了
# 想把一个jar文件添加到版本库
git add -f aaa.jar