#Git教程 笔记
教程链接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
##创建版本库
git init:将当前目录变为Git管理的仓库git add <filename>:把文件添加到仓库(stage中)git commit -m "版本描述":把文件按提交到仓库
##时光机穿梭
git status:显示仓库当前状态git diff <filename>:展示文件详细修改内容 ###版本回退git log:显示从最近到最远的提交日志- --pretty=oneline:以单行形式显示提交日志
git reset --hard commit_id:回退/前进到commit_id指向的版本git reset --hard HEAD^:回退到上一版本git log:查看提交历史git reflog:查看各个版本的commit_id
###管理修改
- git 管理的是修改,而非文件。
- 第一次修改 -> git add -> 第二次修改 -> git commit
###撤销修改
git checkout -- <filename>:丢弃工作区的修改,返回最近一次add/commit时的文件状态git reset HEAD <filename>:丢弃暂存区的修改
###删除文件
git rm <filename>:从版本库中删除文件
##远程仓库
###添加远程库
- 登陆GitHub,“Create a new repository”
- 添加远程库:
git remote add origin git@github.com:<username>/<repository name>.git - 推送并关联本地master分支:
git push -u origin master - 提交master分支修改到远程库:
git push origin master
###从远程库克隆
git clone git@github.com:<username>/<repository name>.git- GitHub支持ssh/https协议
##分支管理
###创建和合并分支
git branch <name>:创建分支git branch:查看分支git checkout <name>:切换分支git checkout -b <name>:创建+切换分支git merge <name>:合并某分支到当前分支git branch -d <name>:删除分支
###解决冲突
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成
git log --graph:看到分支合并图
###分支管理策略
git merge <name>:fast forward模式合并,删除分支,分支信息被丢弃git merge --no-ff:普通模式合并,合并后历史有分支,可通过git log --graph看到分支合并记录
###Bug分支
git stash:储存当前工作现场git stash list:列出所有stashgit stash apply:恢复最近一次储存的stashgit stash drop:删除最近一次储存的stashgit stash pop:恢复+删除最近一次stashgit stash stash@{num}:恢复指定stash
###feature分支
git branch -D <name>:强行删除没有被合并的分支
###多人协作
git remote -v:查看远程库的详细信息git checkout -b dev origin/dev:创建远程origin的dev分支到本地git branch --set-upstream dev origin/dev:建立本地分支和远程分支的关联git pull:抓取远程的新提交git push origin branch-name:从本地推送分支
##标签管理
- 是指向某个commit的指针
- 标签不能移动
- 创建和删除标签都是瞬间完成的
###创建标签
eg:git tag v1.0git tag:列出所有标签(按字母排序)git tag <tagname>:新建一个标签,默认为HEAD,也可以指定一个commit id- `git tag -a -m "description":指定标签信息
git show <tagname>:查看标签信息
###操作标签
git push origin <tagname>:推送本地标签到远程库git push origin --tags:推送全部未推送过的本地标签git tag -d <tagname>:删除本地标签git push origin :refs/tags/<tagname>:删除远程标签
##使用GitHub
- 自己拥有
Fork后的仓库的读写权限 - 可以推送
pull request给官方仓库来贡献代码
##自定义Git
git config --global color.ui true:让Git显示颜色
###忽略特殊文件
.gitignore:配置要忽略的文件https://github.com/github/gitignore:.gitignore文件模板
###配置别名
- 别名是命令的缩写
- 例子:
git config --global alias.st status:配置status别名为stgit 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.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:仓库的Git配置文件.gitconfig:当前用户的Git配置文件,放在用户主目录下
##搭建Git服务器
- 安装git:
sudo apt-get install git - 创建git用户:
sudo adduser git - 创建证书登录:搜集登陆用户公钥(id_rsa.pub)文件,导入
/home/git/.ssh/authorized_keys文件,一行一个 - 初始化Git仓库
sudo git init --bare sample.gitsudo chown R git:git sample.git:修改裸仓库owner,防止其他用户篡改工作区
- 禁用shell登陆(git-shell一登陆就自动退出)
vi /etc/passwdgit:x:........:/bin/bash-->git:x:......:/usr/bin/git-shell
- 克隆远程仓库,本地运行,修改后推送
git clone git@server:/srv/sample.gitgit push
- 要方便管理公钥,用Gitosis
- 要像SVN那样变态地控制权限,用Gitolite
=======