简介
Git是一个分布式版本控制系统,由Linus Torvalds创建。Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
安装
Windows
下载地址:Git官网
Linux
sudo apt-get install git
Mac
brew install git
创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
mkdir learngit
cd learngit
pwd
pwd命令用于显示当前目录。 第二步,通过git init命令把这个目录变成Git可以管理的仓库:
git init
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
添加文件到版本库
第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; 第二步,使用命令git commit -m ,完成。
git add readme.txt
git commit -m "wrote a readme file"
注意:readme文件需要放在learngit目录下(子目录也行)
时光机穿梭
版本回退
git status #查看状态
git diff #查看修改内容
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~100 #回退到前100个版本
git reset --hard 1094a #回退到指定版本
工作区和暂存区
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

管理修改
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
撤销修改
git checkout -- readme.txt #丢弃工作区的修改
git reset HEAD readme.txt #撤销暂存区的修改
删除文件
rm test.txt
git rm test.txt #删除版本库中的文件
远程仓库
添加远程仓库
git remote add origin git@server-name:path/repo-name.git
推送分支
git push -u origin master
克隆远程仓库
git clone git@server-name:path/repo-name.git
分支管理
创建与合并分支
git checkout -b dev #创建并切换到dev分支
git branch #查看当前分支
git merge dev #合并指定分支到当前分支
git branch -d dev #删除dev分支
解决冲突
git log --graph --pretty=oneline --abbrev-commit #查看分支合并图
git merge --no-ff -m "merge with no-ff" dev #禁用Fast forward模式,Git就会在merge时生成一个新的commit
分支管理策略
git merge --no-ff -m "merge with no-ff" dev #禁用Fast forward模式,Git就会在merge时生成一个新的commit
BUG分支
git stash #把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list #查看工作现场
git stash apply #恢复工作现场
git stash drop #删除stash内容
git stash pop #恢复的同时把stash内容也删了
Feature分支
git branch -D feature-vulcan #强行删除一个没有被合并过的分支
多人协作
推送分支
git push origin master #推送master分支
git push origin dev #推送dev分支
抓取分支
git checkout -b dev origin/dev #在本地创建和远程分支对应的分支
git branch --set-upstream dev origin/dev #建立本地分支和远程分支的关联
git pull #抓取分支
标签定义
创建标签
git tag v1.0 #在当前commit打上标签
git tag v0.9 622493 #在commit id为622493的commit打上标签
git tag -a v0.1 -m "version 0.1 released" 362816 #创建带有说明的标签
操作标签
git tag -d v0.1 #删除标签
git push origin v1.0 #推送标签到远程
git push origin --tags #一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/v0.9 #删除远程标签
自定义Git
忽略特殊文件
git add -f App.class #强制添加App.class文件
git check-ignore -v App.class #查看忽略规则
配置别名
git config --global alias.st status #配置status的别名为st
git config --global alias.unstage 'reset HEAD' #配置unstage的别名为reset HEAD
git config --global alias.last 'log -1' #配置last的别名为log -1
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" #配置lg的别名为log --color --graph
Egit
安装Egit
sudo apt-get install egit
配置Egit
使用Egit
常用命令
遇到问题
问题1
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
error: 55053 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
分析: 一般这种情况都是因为项目分支过多,导致你要下载的东西太多,从而引起这个问题
git config --global core.compression -1 #关闭压缩
git config --global core.compression 0