===================
- 基本
- 初始化git
- 檢查你的狀況
- 新增檔案
- Staging Area
- 儲存快照
- 翻看快照記錄
- 分支
- 開啟新分支和進入
- 在分支上修改檔案
- 在分支上快拍照
- 在分支上的快照記錄
- 合拼分支改變
- 互聯網
- 上傳到伺服器
- 從伺服器合併改變
- PS
- Tracking Information
#基本
初始化git
- 進入你電腦某個資料夾
-
git init
初始化這個夾為git folder
➜ Desktop mkdir git_example
➜ Desktop cd git_example
➜ git_example git init
Initialized empty Git repository in /Users/jason/Desktop/git_example/.git/
檢查你的狀況
- 輸入指令:
git status
- 顯示你現在的分支位置
on branch xxx
-
master
是git預設的分支
➜ git_example git:(master) git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
新增檔案
- 新增jason.html
- 檢查
git status
➜ git_example git:(master) touch jason.html
➜ git_example git:(master) ✗ git status
# On branch new_feature
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# jason.html
nothing added to commit but untracked files present (use "git add" to track)
每一次你新增或改變檔案, git 不會自動幫你儲存變化
直至你輸入git add
令檔案進入staging area
在一下次commit時, git才會幫你記錄這些變化
Staging Area
- 利用
git add .
新增jason.html 入staging area
- 檢查
git status
- 顯示在下次你commit 時的動作
➜ git_example git:(master) ✗ git add .
➜ git_example git:(master) ✗ git status
# On branch new_feature
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: jason.html
#
```
儲存快照
----
1. `git commit -m "add jason.html"`
2. 讓git為我們的檔案拍快照(記錄變化)
➜ git_example git:(master) ✗ git commit -m "add jason.html"
[master (root-commit) 3da7049] add jason.html
0 files changed
create mode 100644 jason.html
➜ git_example git:(master) git status
# On branch master
nothing to commit (working directory clean)
翻看快照記錄
----
1. `git log`
2. 顯示快照記錄
commit 3da704936d1034edf5adcf167213ea11e2e01362
Author: Liu Ho Yin <j-lhy@hotmail.com>
Date: Thu Jan 17 22:50:29 2013 +0800
add jason.html
>#進階(分支)
----
開啟新分支和進入
----
1. 輸入指令 `git checkout-b 'edit_jason'`
2. 會創造和進入新分支 `new_feature`
➜ git_example git:(master) git checkout -b 'edit_jason'
Switched to a new branch 'edit_jason'
在分支上修改檔案
-----------------------
1. vim jason.html as you want
2. `git status` 檢查將況
➜ git_example git:(edit_jason) vim jason.html
➜ git_example git:(edit_jason) ✗ git status
# On branch edit_jason
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: jason.html
#
no changes added to commit (use "git add" and/or "git commit -a")
即使你是修改檔案
你也需要輸入`git add` 令檔案進入`staging area`
在一下次commit時, git才會幫你記錄修改
在分支上快拍照
-----------------------
1. `git add .` stage 修改動作
2. 再一次檢查狀況
3. 拍快照
➜ git_example git:(edit_jason) ✗ git add .
➜ git_example git:(edit_jason) ✗ git status
# On branch edit_jason
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: jason.html
#
➜ git_example git:(edit_jason) ✗ git commit -m "edit jason.html"
[edit_jason 2351506] edit jason.html
1 file changed, 1 insertion(+)
在分支上的快照記錄
----
1. `git log` 查看快照記錄
2. 比剛才在master多了我們的修改動作
commit 2351506e70926dd3ba46aee4c9d78b0dcc28fef3
Author: Liu Ho Yin <j-lhy@hotmail.com>
Date: Thu Jan 17 22:56:51 2013 +0800
edit jason.html
commit 3da704936d1034edf5adcf167213ea11e2e01362
Author: Liu Ho Yin <j-lhy@hotmail.com>
Date: Thu Jan 17 22:50:29 2013 +0800
add jason.html
合拼分支改變
----
到目前為止, 我們所做的改變只是在新分支`edit_jason`
現在合拼這些改變到預設分支`master`
1. `git checkout master`
2. 去我們想要的分支:master
3. `git merge edit_jason`
4. 將分支`edit_jason`的改變合併到現在的分支(即是master)
➜ git_example git:(edit_jason) git checkout master
Switched to branch 'master'
➜ git_example git:(master) git merge edit_jason
Updating 3da7049..2351506
Fast-forward
jason.html | 1 +
1 file changed, 1 insertion(+)
現在我們在分支master, 再一次 `git log `
你會看見我們在`edit_jason`的快照
➜ git_example git:(master) git log
commit 2351506e70926dd3ba46aee4c9d78b0dcc28fef3
Author: Liu Ho Yin <j-lhy@hotmail.com>
Date: Thu Jan 17 22:56:51 2013 +0800
edit jason.html
commit 3da704936d1034edf5adcf167213ea11e2e01362
Author: Liu Ho Yin <j-lhy@hotmail.com>
Date: Thu Jan 17 22:50:29 2013 +0800
add jason.html
>#互聯網
----
上傳到伺服器
----
1. `git remote add origin <server.git>`(第一次)
2. 新增remote 叫orign
3. `git push -u origin master`
4. 上傳到origin 的master 分支
➜ git_example git:(master) git remote add origin git@github.com:Jasonlhy/git_example.git
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 442 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:Jasonlhy/git_example.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
從伺服器合併改變
----
剛剛在github 上新增了README,現在把它拉回來
1. `git pull`
2. 從origin 拉README.md 下來
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:Jasonlhy/git_example
2351506..d8a6c01 master -> origin/master
Updating 2351506..d8a6c01
Fast-forward
README.md | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 README.md
現在你檔案裡會多了一個README.md 的檔案,很神奇吧
➜ git_example git:(master) ls
README.md jason.html
>PS
====
-Tracking Information
====
##### -u
在git push 中`-u`, 會建立**tracking infromation**, 用來連結你本地分支和伺服分支的關係。因此,在下一次git push or git pull, 你不用再聲明那個伺服器,那個分支
你在某些地方使用`git clone`,都會留有tracking information
##### 但是
如果你使用的是`git push origin master`,沒有留下tracking information
>
pull時你便要聲明伺服和分支
`git pull origin master`
或建立tracking information
`git branch --set-upstream origin/xxxxx`