一、单机仓库:

0、常识
git分为版本库(Repository)、暂存区(Stage)、工作区(本机自己修改或创建且并未提交commit的的文件)
在Git里,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
每个仓库的Git配置文件都放在.git/config文件中,而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

1、给client使用者起个名字和Email地址
git config –global user.name “Your Name"
git config –global user.email “email@example.com"

2、用命令git add告诉Git,把文件添加到仓库
git add readme.txt

3、用命令git commit告诉Git,把文件提交到仓库
git commit -m “wrote a readme file"

4、丢弃工作区的修改,说白了就是把版本库中的文件重新拽下来一次
git checkout — readme.txt

5、把暂存区的修改撤销掉(unstage)
git reset HEAD readme.txt

6、从版本库中删除一个文件
git rm test.txt
git commit -m “remove test.txt"

7、初始化Git仓库
git init –bare sample.git

8、禁用shell登录
vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

二、远程仓库:

1、把一个已有的本地仓库与远程库关联
git remote add origin git@xxx.com:username/reponame.git

2、把本地仓库master分支的所有内容推送到远程库上
git push -u origin master

3、从远程库克隆
git clone git@xxx.com:username/reponame.git

4、创建dev分支,然后切换到dev分支(git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:git branch dev; git checkout dev)
git checkout -b dev

5、查看当前分支(当前分支前面会标一个*号)
git branch

6、切换回master分支
git checkout master

7、把dev分支的工作成果合并到master分支上(git merge –no-ff -m “merge with no-ff" dev; 加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。)
git merge dev

8、删除dev分支
git branch -d dev

9、带参数的git log也可以看到分支的合并情况
git log –graph –pretty=oneline –abbrev-commit

10、把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash
刚才的工作现场存到哪去了?
git stash list
恢复stash内容(用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除)
git stash pop \\恢复的同时把stash内容也删了

11、删除一个没有被合并过的分支
git branch -D <name>

12、查看远程库的详细信息
git remote -v

13、推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
git push origin <name>

14、在dev分支上开发,就必须创建远程origin的dev分支到本地
git checkout -b dev origin/dev

15、从本地推送分支
git push origin <branch-name>
如果推送失败
git pull \\抓取远程的新提交
如果git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的关联,根据提示,设置dev和origin/dev的链接:
git branch –set-upstream dev origin/dev

16、在本地创建和远程分支对应的分支
git checkout -b <branch-name> origin/<branch-name>

三、标签管理
1、打一个新标签
git tag v1.0

2、查看所有标签
git tag

3、找到历史提交的commit id
git log –pretty=oneline –abbrev-commit

4、对commit id是6224937打0.9标签
git tag v0.9 6224937

5、查看标签信息
git show <tagname>

6、创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v0.1 -m “version 0.1 released" 3628164

7、用PGP签名标签
git tag -s <tagname> -m “blablabla…" fec145a

8、删除标签
git tag -d v0.1

9、推送某个标签到远程
git push origin <tagname>

10、一次性推送全部尚未推送到远程的本地标签
git push origin –tags

11、删除远程标签,先从本地删除
git tag -d v0.9
git push origin :refs/tags/v0.9

四、自定义git
1、让Git显示颜色,会让命令输出看起来更醒目
git config –global color.ui true

2、忽略特殊文件https://github.com/github/gitignore
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

3、.gitignore写得有问题,可以用-f强制添加到Git
git add -f App.class

4、若发现可能是.gitignore写得有问题,需要找出来到底哪个规则写错了
git check-ignore -v App.class

5、命令别名
git config –global alias.st status
git config –global alias.co checkout
git config –global alias.ci commit
git config –global alias.br branch
git config –global alias.unstage ‘reset HEAD’
git config –global alias.last ‘log -1’
PS:状态类命令
1、git status命令可以让我们时刻掌握仓库当前的状态
git status

2、git diff查看readme.txt文件修改内容
git diff readme.txt
查看工作区和版本库里面最新版本的区别
git diff HEAD — readme.txt

3、git log查看提交历史,以便确定要回退到哪个版本
git log
简洁版选项
git log –pretty=oneline

4、查看命令历史,以便确定要回到未来的哪个版本
git reflog

5、在版本的历史之间穿梭(7位数字用git log或者git reflog都可以看到对应版本的文件)
git reset –hard 3628164