本地倉庫
$ 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
Git Cheat Sheet