git is not a version control system,
git is not a free software
new line to check

======================================================
给自己创建私钥,并将其关联到Github
1. 使用ssh-keygen -t rsa -C "youremail@example.com" 创建自己的私钥
2. 在自己的根目录下的.ssh文件夹下会产生id_rsa和id_rsa.pub两个文件, id_rsa是私钥
3. 登陆GitHub,打开“Account settings”,“SSH Keys”页面
4. 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

======================================================
git command:
1. git add <filename> //将文件添加到git
2. git commit -m "some logs"  //进行git提交操作,同时提交版本信息
3. git status  //查看当前git状态
4. git diff    //列出不同
5. git log     //列出所有额提交记录
6. git reset --hard HEAD~  //回退到上一个版本
7. git reset --hard <xxxxx>  //回到指定的版本,xxxx为版本的hashcode,不用写全
8. git reflog  //查看本地提交信息
9. git checkout -- <filename> //将工作区的内容撤销
10. git reset HEAD <filename> //将暂存区的内容撤回到工作区
11. git rm <filename> //从版本库中删除文件
12. git remote add origin git@github.com:Luke7810/learngit.git // 将本地仓库添加到github上
13. git push -u origin <master> //将本地仓库第一次推送到远程
14. git push origin <master>  //以后再次推送的命令,去掉-u
15. git clone git@github.com:Luke7810/gitskills.git  //将远程仓库克隆到本地
16. git branch <dev>  //创建一个dev的分支
17. git checkout <dev> //切换到dev分支上去
18. git checkout -b <dev>  //创建并切换到dev分支上去
19. git branch  //查看分支的情况
20. git merge <dev>  //合并dev分支到当前分支
21. git branch -d <dev>  //删除分支
22. git branch -D <dev>  //这是分支强行删除语句,此语句可以删除还没有合并的分支
23. git log --graph --pretty=oneline --abbrev-commit  //以图形的方式显示分支的状态
24. git merge --no-ff -m "some commnt" <dev>   //合并dev分支到当前分支,使用 no Fast-forward模式,这样合并后的历史有分支,能看出来曾经做过合并
25. git stash   //用以保存当前现场,保存后,清理干净工作区现场
26. git stash list  //查看存放区中的状态
27. git stash apply  //从存放区恢复内容到开发区,但是不删除存放区内容
28. git stash drop   //删除存放区内容
29. git stash pop    //从存放区恢复内容到开发区, 同时删除存放区内容
30. git stash apply <stash@{0}>  //存放区可以存放多个内容,使用这个命令可以恢复指定的存放区中的内容
31. git remote   //查看远程仓库信息
===================================================================
32. 团队合作方式
32.01 首先创建一个主项目在远程服务器上。 ex. 项目叫ABC
32.02 在本地clone这个项目  (git clone git@github.com:Luke7010/ABC.git)
32.03 在本地创建这个项目的dev分支  (git checkout -b dev)
32.04 将本地创建的dev分支同步到远程仓库  (git push origin dev:dev)
32.05 使用 git branch -a 可以查看所有本地和远程的分支状况 

32.06 ========== 以上就完成了,git的初始配置,其他成员可以进行follow===========

32.07 这是加入一名新成员, 首先要将远程仓库内容clone下来   (git clone git@github.com:Luke7810/ABC.git)
32.08 因为远程已经存在dev分支,同步这个分支,并创建本地dev分支  (git checkout -b dev origin/dev)
32.09 使用git branch -a 可以查看所有的本地和远程分支情况
32.10 这时,创建本地的自己使用的分支  (git checkout -b Lukedev)
32.11 所有的修改都在本地的个人分支上进行操作
32.12 修改后,在git上进行修改确认  (git add filename)
32.13 进行提交操作,这时所有的提交操作都在本地Lukedev上进行   (git commit -m "log")
32.14 当认为自己修改的差不多时,需要向远程仓库的dev进行提交。
32.15 首先要将本地的的dev分支和远程仓库的dev分支进行同步,因为,在你修改的时候,别人已经修改了dev分支
32.16 切换到自己的dev分支   (git checkout dev)
32.17 同步服务器上的dev分支   (git pull)
32.18 合并Lukedev分支到dev分支   (git merge --no-ff -m "some commnt" Lukedev)
32.19 将本地的dev推送到远程服务器上去   (git push origin dev)

32.20 ========= 在Team要进行push操作时,要进行协调,使得大家进行顺序的push操作 ========

32.21 当Team都已经完成了的push到dev的操作后,就意味着,进行版本release了,由Admin进行操作
32.22 由于大家都已经完成了同步到dev的操作,这时,大家都不在进行push操作了。
32.23 Admin开始从远程仓库同步dev分支, 首先切换到dev分支  (git checkout dev)
32.24 Admin开始同步远程dev分支  (git pull)
32.25 Admin切换到master分支   (git checkout master)
32.26 Admin合并dev分支    (git merge --no-ff -m "some commnt" dev)
32.27 Admin将master分支推送到远程仓库   (git push origin master)
32.28 这时就完成了这次release操作

32.29 完成release操作后,所有开发人员进行master分支和dev分支的同步   (切换分支,git pull)
===================================================================

33. git tag <name>  给某个分支加上一个tag
34. git tag <name> <commit id>  给指定的commit id的分支加上tag
35. git tag 列出所有打过tag的列表
36. git show <name> 列出指定tag(如:v1.0)的详细信息
37. git tag -a <tagname> -m "blablabla..."  设定标签,并增加对这个标签的说明
38. git tag -d <tagname> 删除一个本地标签
39. git push origin <tagname>  推送一个本地标签到远程仓库
40. git push origin --tags  推送所有未推送的本地标签到远程
41. git push origin :refs/tags/<name>  删除远程标签

42. 忽略特殊文件,Java中的class什么的,一般进行忽略,可以增加一个.gitignore文件,这个文件不用自己写,到https://github.com/github/gitignore去下载就行了

43. 增加别名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 lg就可以查看所有版本信息了。

=================================================
44. 搭建Git Server

44.1 在server上安装git:  sudo apt-get install git
44.2 增加git用户:  sudo adduser git
44.3 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
44.4 初始化Git仓库,先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令, sudo git init --bare sample.git
44.5 把owner改为git, sudo chown -R git:git sample.git
44.6 禁用shell登录, 编辑/etc/passwd, 找到类似下面的一行:git:x:1001:1001:,,,:/home/git:/bin/bash 改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
44.7 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行: git clone git@server:/srv/sample.git
其实没这么简单,在CentOS 上搭建Git还有一些步骤,在百度上找CentOS 搭建Git Server