本地仓库
$ git checkout -- readme.txt
1.修改后未放至暂存区,回到和版本库一样的状态
2.修改后添加至缓存区,回到添加前的状态
总: 回到最近得 git add 或者 git commit 时的状态
$ git reset HEAD readme.txt
将缓存区的修改撤销(unstage)
$ git rm readme.txt
从版本库删除
远程仓库
$ ssh-keygen -t rsa -C "email@example.com"
$ cd ~/.ssh/id_rsa.pub
# 在 github / 个人 / SSH / Add SSH 填入密钥
本地仓库与Github 仓库之间通过 SSH 加密
# origin 远程库名
# server-name 采用 github 则为 github.com
# path 用户名
# repo-name 仓库名
$ git remote add origin git@server-name:path/repo-name.git
在本地仓库里添加远程库
$ git clone git@server-name:path/repo-name.git
克隆远程库
# -u 关联相应分支
$ git push -u origin master
把本地库的
所有
内容推送到远程库
分支管理
HEAD指针不是指向提交,而是指向 master ,master 指向提交
# -b 创建并切换
$ git checkout -b dev
# 等价于两条
$ git branch dev
$ git checkout dev
创建并切换分支
# 当前分支 master
$ git merge dev
合并指定分支到当前分支
$ git branch -d dev
删除本地分支
$ git push --delete origin dev
删除远程分支
$ git branch -m develop dev
本地分支更名
冲突
人生八九不如意
$ git checkout -b feature1
# 修改 README.md
# Creating a new branch is quick AND simple.
$ git add README.md
$ git commit -m "AND simple"
$ git checkout master
# 修改 README.md
# Creating a new branch is quick & simple.
$ git add README.txt
git commit -m "& simple"
# 生成不同的两条线
# 目前在 master 分支上
$ git merge feature1
# CONFLICT!!!!!!!!!! 冲突
# vi README.md
$ git add README.md
$ git commit -m "conflict fixed"
冲突合并,修改
分支管理策略
$ git checkout -b dev
$ vi README.md
# ...
$ git add README.md
$ git commit -m "add merge"
# 切回 master
$ git checkout master
# --no-ff no Fast forward
$ git merge --no-ff -m "merge with no-ff" dev
默认使用
Fast forward
会丢掉分支消息,强制禁用增加参数 --no-ff
$ git log 00graph --pretty=oneline --abbrev-commit
用图形查看分支历史
分支策略
- master 非常稳定、用来发布新版本
- 在 dev 上开发
- 每个人有自己的分支
Bug 分支
$ git stash
暂存工作现场
$ git checkout master
$ git branch -b issue-1
$ git add README.txt
$ git commit -m "fix bug 1"
$ git checkout master
$ git merge --no--ff -m "merged bug fix 1" issue-1
$ git branch -d issue-1
bug 修复
$ git checkout dev
$ git git stash pop
恢复现场
$ git stash list
查看暂存列表
$ git stash apply stash@{0}
恢复指定 stash
多人协作
队友操作
$ git clone git@github.com/KayorLien/lutu.git
$ git checkout -b dev orgin/dev
$ git add hello.js
$ git commit -m "add an comma"
自己操作
$ git add hello.js
$ git commit -m "Add coding: utf-8"
# REJECTED
$ git branch --set-upstream-to origin origin/kayor
$ git pull
# 解决冲突
$ git commit -m "merge & fix hello.js"
标签管理
# 打标签
# commit id: 283745
$ git tag -a v0.1 -m "version 0.1 released" [commit id]
$ git push origin tagname
# 推送所有未推过的标签
$ git push origin --tags