Git教程笔记
教程链接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
创建版本库
-
git init
: 初始化一个Git仓库,将当前目录变为Git管理的仓库 -
git add <filename>
:把文件添加到仓库(stage中),可以反复多次使用,添加多个文件 -
git commit -m "版本描述"
:完成,添加注释,把文件按提交到仓库
时光机穿梭
-
git status
:随时掌握工作区的当前状态 -
git diff <filename>
:如果git status告诉你文件被修改过,查看修改的内容使用
git reset --hard commit_id
HEAD指向的版本就是当前的版本,因此,Git允许我在版本的历史之间穿梭,使用如下命令
版本回退
-
git log
:穿梭前,可以查看提交历史,以便确定要退回到哪个版本,显示从最近到最远的提交日志 -
git log --pretty=oneline
:以单行形式显示提交日志 -
git reset --hard commit_id
:回退/前进到commit_id指向的版本 -
git reset --hard HEAD^
:当修改错了工作区某个文件的内容,还使用了git add
将文件添加到了暂存区时,想丢弃修改,回退到上一版本 -
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 log --graph --pretty=oneline --abbrev-commit
单行显示分支合并图
分支管理策略
-
git merge <name>
:fast forward
模式合并,删除分支,分支信息被丢弃 -
git merge --no-ff
:普通模式合并,合并后历史有分支,可通过git log --graph
看到分支合并记录
Bug分支
-
git stash
:储存当前工作现场 -
git stash list
:列出所有stash -
git stash apply
:恢复最近一次储存的stash -
git stash drop
:删除最近一次储存的stash -
git stash pop
:恢复+删除最近一次stash -
git 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
:把分支上的所有本地提交推送到远程库,。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
标签管理
- 是指向某个commit的指针
- 标签不能移动
- 创建和删除标签都是瞬间完成的
创建标签
eg:git tag v1.0
-
git tag
:列出所有标签(按字母排序) -
git tag <tagname>
:新建一个标签,默认为HEAD,也可以指定一个commit id -
git tag -a <tagname> -m "description":
指定标签信息 -
git tag -s <tagname> -m "description...:"
通过-s用私钥签名一个标签 -
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
:配置要忽略的文件 -
这里 可以在线浏览各种配置文件,无需从头写
.gitignore
文件
配置别名
- 别名是命令的缩写
- 例子:
-
git config --global alias.st status
:配置status别名为st -
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.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.git
-
sudo chown R git:git sample.git
:修改裸仓库owner,防止其他用户篡改工作区
- 禁用shell登陆(git-shell一登陆就自动退出)
vi /etc/passwd
-
git:x:........:/bin/bash
-->git:x:......:/usr/bin/git-shell
- 克隆远程仓库,本地运行,修改后推送
git clone git@server:/srv/sample.git
git push
- 要方便管理公钥,用Gitosis
- 要像SVN那样变态地控制权限,用Gitolite