Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1
Git 教學
2
Git 由來
我只好花兩個星期寫 Git
Linus Torvalds
其它 SCM 太難用了
3
我們要聊什麼?
Git 基本原理
Git 基本指令操作
4
Git 物件
Blob
檔案
Tree
目錄
Commit
提交
Tag
標籤
Object ( 物件 )
5
SHA1
檔案內容
( 不含檔名 )
Commit
( 提交 )
目錄
( 目錄內檔案及其名稱 )
標籤
SHA1
D345AD
Object
SHA1 檔名
原始資料
( 檔案、目
錄、 com
mit 或標籤
原始資料 )
經過 SHA...
6
SHA1
int main()
{
..
}
tree 5kdaed
create project
blob hello.c 12ad2kl
tree include 4da24a
檔案內容
目錄
Commit
12ad2kl
SHA1
5...
7
檔案目錄結構與 Git 物件的對映
./
src
README
lib/
hello.c
tree: 1add23
tree: 12dkab
blob: 3akdcm
tree: 98ddta
blob:99adwt
8
Git 有向無環圖 (Directed Acyclic Graph)
blob
3akdcm
tree
1add23
blob
99adwt
tree
12dkab
tree
98ddta
src lib
README
hello.c
co...
9
參照 (reference)
commit
tree
blob
branchtag
HEAD參照可以指向任何一個 commit
branch 指向該 branch 的最新
commit
HEAD 指向目前使用中的 branch
10
Git 有向無環圖 (Directed Acyclic Graph)
commit
3akdcm
commit
3akdcm
commit
3akdcm
tree
1add23
blob
asdf35
tree
1add23
tree
1...
11
Git commit/branch 有向無環圖
A B
master
Commit 的點
12
建立 branch 1
A B
masterbranch 1
13
在 branch 上修改檔案
A C
master branch 1
D
Branch 1 commit C
14
合併 (Merge): 第一種 fast forward
A B
master branch 1
C
master 所指的 commit 在 branch 1 的路徑上,所以直接把
master 往前移至 branch 1 的位置
15
在 branch 上修改檔案
A B C
master
branch 1
D
E F
master
branch 1
A B C DA
A B C EA F
16
合併 (Merge): 第二種 三方合併 (Three Way Merge)
A B C D
E F
D
master
branch 1
以共同祖先 C 做為合併的參考點,合併 branch 1 到 master
注意,被合併的是 mas...
17
合併 (Merge): 第三種 rebase
A B C
master
branch 1
D
E' F'
master
branch 1
A B C DA
A B C E'A F'
原本 branch 1 是從 C 開始分支出去, reb...
18
遠端 Repository 的操作
扁
馬連
宋
Git 是分散式架構,任可人都可以把他的 Repository 與其它
遠端 Repository 同步
就算 Server 掛掉了,也能從其它人的 Repository Recover
...
19
Git 參考流程 (Server 端 )
masterhotfixesreleasedevelopFeature-A Feature-B
Tag 0.1
Tag 0.2
Tag 1.0
Tag2.0
緊急修復
合併緊急
修復
開始進行
發...
20
Git 參考流程 (Client 端 )
master
Server
Client
master
clone
branch
Client 複製一份 Code 開始寫程式,並讓
client master 與 server master 同...
21
Git 參考流程 (Client 端 )
master
Server
Client
master
branch
Server 端有新修改
Client 也在 branch 進行開發
但 master 沒更新
22
Git 參考流程 (Client 端 )
master
Server
Client
master
branch
Pull (fetch + merge)
Client 與 Server 的 master 同步,
並把新的修正合併到 Bra...
23
Git 參考流程 (Client 端 )
master
Server
Client
master
branch
Push
Client 把修改完後的 code Push 回 Server
24
Git 參考流程 (Client 端 ) Clone
A B
master
clone
A B
master
Server
Client
25
Git 參考流程 (Client 端 ) 建立 Branch
A B
master
A B
master
Server
Client
branch
26
Git 參考流程 (Client 端 )
A B
master
A B
master
Server
Client
branch
CD
SC
Server 有其它人 commit SC
Client 也在 branch 上改 code
Cl...
27
Git 參考流程 (Client 端 )
A B
master
A B
master
Server
Client
branch
CD
SC
Client 把 Server 上的
master 合併 到它的
master 保持同步
SC
P...
28
Git 參考流程 (Client 端 )
A B
master
A B
master
Server
Client
branch
CC
SC
因為 master 上修改的
東西 branch 也要用到,
所以 client 決定把
mast...
29
Git 參考流程 (Client 端 )
A B
master
A B
master
Server
Client
branch
CC
SC
branch 修改完成後,合
併回 master
SC
CD CE
CF
30
Git 參考流程 (Client 端 )
A B
master
A B
master
Server
Client
branch
CC
SC
SC
CD CE
SD
Server 上又有人 commit 了
CF
31
Git 參考流程 (Client 端 )
A B
master
Server
Client
branch
CC
SC
CD CE
CF
A B
master
SC
SD
CD CE
CF
SE
Client 把其 master
合併到 S...
32
頭都昏了,給鬼看呀
Master 的圖看起來很亂對不對?
用 rebase 不要用 merge 就不會那麼亂了
33
Git 的檔案類型
Tracked Files ( 受 git 追蹤的檔案 )
Untracked Files
不受追蹤的檔案
Unmodified files
尚未修改的檔案
Modified files
修改過的檔案
Ignored ...
34
三種區域
Working
Directory
Staging
Area
Git directory
(repository)
git add
git commit
git checkout
( 把檔案恢復成 commit 時的內容 )
35
檔案狀態轉換
Hello.c
Print.c
Hello.htest_hello.c.DS_Store
modified filesUnmodified filesuntracked filesIgnored files
untracke...
36
設定
編輯 ~/.gitconfig
git config --global user.name "User Name"
git config --global user.email "mail@xxx.xx"
還可以放照片
扁
馬
連
宋
37
建立 Git Repository
$mkdir projA # 建立 projA 目錄
$cd projA/
$git init # 初始化 git repository
Initialized empty Git repository...
38
加入檔案
$touch README # 建立 README 檔
$git status # 透過 git status 查詢檔案狀態
On branch master
Initial commit
Untracked files: # ...
39
commit 修改結果
$git commit -m "create project" # 執行 commit
[master (root-commit) 5bf61c2] create project
1 file changed, 0...
40
$echo "some instruction" > README # 修改 README 檔案
$git status
On branch master
Changes not staged for commit:
(use "git ...
41
$touch hello.c
$touch print.c
$git add hello.c # 只把 hello.c 加入 staging area
$git commit -m "add hello" # commit 時,只會 co...
42
檔案恢復
unmodified modified staged
git commit
git addmodify
git checkout
git reset
git reset 可以移除已加入 staging area 的檔案,但修改後...
43
刪除與搬移檔案
$touch hello.c
$touch print.c
$git add . # 把 hello.c print.c 加入 staging area
$git rm print.c # 移除 print.c, 不追蹤
...
44
還原 commit 記錄 (revert)
$git revert a737846 # 還原至 commit a737846
$git revert HEAD^ # 把 hello.c print.c 加入 staging area
gi...
45
標籤
git tag <label> 新增標籤
git tag <label> <SHA1> 在特定 commit 新增標籤
git tag <label> -m "message" 新增標籤,並附上訊息
git tag -d <labe...
46
忽略的檔案設定 (ignored)
.gitignore 檔案記錄要忽略的檔案,可放在
專案目錄 ( 專案設定 ) ,或是
任何之子目錄 ( 該目錄設定 )
個人 ~/.gitignore
# Object files
*.o
*.ko
...
47
建立 Branch
git branch 列出目前 branch 資訊
git branch -a 列出目前 branch
git branch <branch> 建立新 branch <branch>
git branch -d <br...
48
Branch 操作
$ git branch branch-1 # 建立 branch-1
$ git branch # 列出 branch 資訊 , 目前在 master
branch-1
* master
$ git checkout...
49
Branch 合併
把自己修改的 code 合併回主幹
把別人修改好的部分合併到自己的 branch
為什麼要合併?
git merge 自動合併真是太好用了!
50
Branch 的合併 (Fast Forward)
$git checkout -b feature-A # 建立新 feature-A branch
$touch featureA.txt
$git add .
$git commit ...
51
Branch 的合併 ( 三方合併 )
$git checkout -b feature-B
$touch feature-B.txt
$git add .
$git commit -m "feature B"
$git checkout...
52
Branch 的合併 (rebase)
$git checkout -b feature-C
Switched to a new branch 'feature-C'
$touch feature-c.txt
$git add .
$gi...
53
遠端操作
54
Copy 遠端的 Repository 到本地
SSH
git clone git@controller.estinet.com/sdn-app-v2.git
HTTP/HTTPS
git clone http://controller....
55
Copy 遠端的 Repository 到本地
$git clone http://controller.estinet.com/estinet-controller/sdn-app.git
Cloning into 'sdn-app-v...
56
Remote 設定
指令指令
remote 管理遠端
$git remote # 列出遠端所有的 repository
origin # 目前有個遠端叫 origin
$git remote -v
origin git@google.co...
57
從遠端更新
指令指令
fetch 下載遠端的更新,可以觀察後再決定要不要合併
pull 下載遠端的更新後,自動合併
$git fetch # 下載更新
From controller.estinet.com:linms/demo
ea6c...
58
把本地的 commit 上傳回遠端
指令指令
push 把本地的 commit 上傳回遠端
$git commit -m "done" # 先 commit 完成修改
$git push origin master # 再把目前的 bra...
59
Upcoming SlideShare
Loading in …5
×

Git 教學

878 views

Published on

Git 教學

Published in: Software
  • Be the first to comment

Git 教學

  1. 1. 1 Git 教學
  2. 2. 2 Git 由來 我只好花兩個星期寫 Git Linus Torvalds 其它 SCM 太難用了
  3. 3. 3 我們要聊什麼? Git 基本原理 Git 基本指令操作
  4. 4. 4 Git 物件 Blob 檔案 Tree 目錄 Commit 提交 Tag 標籤 Object ( 物件 )
  5. 5. 5 SHA1 檔案內容 ( 不含檔名 ) Commit ( 提交 ) 目錄 ( 目錄內檔案及其名稱 ) 標籤 SHA1 D345AD Object SHA1 檔名 原始資料 ( 檔案、目 錄、 com mit 或標籤 原始資料 ) 經過 SHA1 計算後,會把 SHA1 編碼當檔名,原始資料當檔案內容儲存
  6. 6. 6 SHA1 int main() { .. } tree 5kdaed create project blob hello.c 12ad2kl tree include 4da24a 檔案內容 目錄 Commit 12ad2kl SHA1 5kdaed SHA1 599sk5 SHA1 int main() { .. } blob hello.c 12ad2kl tree include 4da24a tree 5kdaed create project
  7. 7. 7 檔案目錄結構與 Git 物件的對映 ./ src README lib/ hello.c tree: 1add23 tree: 12dkab blob: 3akdcm tree: 98ddta blob:99adwt
  8. 8. 8 Git 有向無環圖 (Directed Acyclic Graph) blob 3akdcm tree 1add23 blob 99adwt tree 12dkab tree 98ddta src lib README hello.c commit 3akdcm commit “project create”
  9. 9. 9 參照 (reference) commit tree blob branchtag HEAD參照可以指向任何一個 commit branch 指向該 branch 的最新 commit HEAD 指向目前使用中的 branch
  10. 10. 10 Git 有向無環圖 (Directed Acyclic Graph) commit 3akdcm commit 3akdcm commit 3akdcm tree 1add23 blob asdf35 tree 1add23 tree 1add23 tree 1add23 blob 89adwt tree 1add23 blob 55daet blob 99adwt a.txt b.txt a.txt ( 修改 ) c.txt ( 新增 ) 修改 a.txt a.txt ( 修改 ) 新增 a.txt
  11. 11. 11 Git commit/branch 有向無環圖 A B master Commit 的點
  12. 12. 12 建立 branch 1 A B masterbranch 1
  13. 13. 13 在 branch 上修改檔案 A C master branch 1 D Branch 1 commit C
  14. 14. 14 合併 (Merge): 第一種 fast forward A B master branch 1 C master 所指的 commit 在 branch 1 的路徑上,所以直接把 master 往前移至 branch 1 的位置
  15. 15. 15 在 branch 上修改檔案 A B C master branch 1 D E F master branch 1 A B C DA A B C EA F
  16. 16. 16 合併 (Merge): 第二種 三方合併 (Three Way Merge) A B C D E F D master branch 1 以共同祖先 C 做為合併的參考點,合併 branch 1 到 master 注意,被合併的是 master ,所以 branch 1 不移動
  17. 17. 17 合併 (Merge): 第三種 rebase A B C master branch 1 D E' F' master branch 1 A B C DA A B C E'A F' 原本 branch 1 是從 C 開始分支出去, rebase 可以重建分支時 的 commit ,並自動重新 commit 及套用已修改的部分 D 這 樣 可 以 讓 branch 1 透過 rebase 套 用 master 已 修 改 後的 D
  18. 18. 18 遠端 Repository 的操作 扁 馬連 宋 Git 是分散式架構,任可人都可以把他的 Repository 與其它 遠端 Repository 同步 就算 Server 掛掉了,也能從其它人的 Repository Recover 回來
  19. 19. 19 Git 參考流程 (Server 端 ) masterhotfixesreleasedevelopFeature-A Feature-B Tag 0.1 Tag 0.2 Tag 1.0 Tag2.0 緊急修復 合併緊急 修復 開始進行 發布準備 只做小 bug 修正 正式發布 合併在 release 修正的 bug 們 開始 Feature-A 開始 Feature-B 合併 Feature-B 小 bug 修正 合併 Feature-A
  20. 20. 20 Git 參考流程 (Client 端 ) master Server Client master clone branch Client 複製一份 Code 開始寫程式,並讓 client master 與 server master 同步 修改的部分則在 branch 進行
  21. 21. 21 Git 參考流程 (Client 端 ) master Server Client master branch Server 端有新修改 Client 也在 branch 進行開發 但 master 沒更新
  22. 22. 22 Git 參考流程 (Client 端 ) master Server Client master branch Pull (fetch + merge) Client 與 Server 的 master 同步, 並把新的修正合併到 Branch
  23. 23. 23 Git 參考流程 (Client 端 ) master Server Client master branch Push Client 把修改完後的 code Push 回 Server
  24. 24. 24 Git 參考流程 (Client 端 ) Clone A B master clone A B master Server Client
  25. 25. 25 Git 參考流程 (Client 端 ) 建立 Branch A B master A B master Server Client branch
  26. 26. 26 Git 參考流程 (Client 端 ) A B master A B master Server Client branch CD SC Server 有其它人 commit SC Client 也在 branch 上改 code Client 讓 master 與 Server 同步,並在 branch 進行修改
  27. 27. 27 Git 參考流程 (Client 端 ) A B master A B master Server Client branch CD SC Client 把 Server 上的 master 合併 到它的 master 保持同步 SC Pull (Fetch + Merge)
  28. 28. 28 Git 參考流程 (Client 端 ) A B master A B master Server Client branch CC SC 因為 master 上修改的 東西 branch 也要用到, 所以 client 決定把 master 合併到 branch SC CD 這是三方合併法 master 依然在 SC 不變
  29. 29. 29 Git 參考流程 (Client 端 ) A B master A B master Server Client branch CC SC branch 修改完成後,合 併回 master SC CD CE CF
  30. 30. 30 Git 參考流程 (Client 端 ) A B master A B master Server Client branch CC SC SC CD CE SD Server 上又有人 commit 了 CF
  31. 31. 31 Git 參考流程 (Client 端 ) A B master Server Client branch CC SC CD CE CF A B master SC SD CD CE CF SE Client 把其 master 合併到 Server 的 master Push
  32. 32. 32 頭都昏了,給鬼看呀 Master 的圖看起來很亂對不對? 用 rebase 不要用 merge 就不會那麼亂了
  33. 33. 33 Git 的檔案類型 Tracked Files ( 受 git 追蹤的檔案 ) Untracked Files 不受追蹤的檔案 Unmodified files 尚未修改的檔案 Modified files 修改過的檔案 Ignored Files 忽略的檔案 全部的檔案
  34. 34. 34 三種區域 Working Directory Staging Area Git directory (repository) git add git commit git checkout ( 把檔案恢復成 commit 時的內容 )
  35. 35. 35 檔案狀態轉換 Hello.c Print.c Hello.htest_hello.c.DS_Store modified filesUnmodified filesuntracked filesIgnored files untrackedignore unmodified modified staged git commit git addmodify git add
  36. 36. 36 設定 編輯 ~/.gitconfig git config --global user.name "User Name" git config --global user.email "mail@xxx.xx" 還可以放照片 扁 馬 連 宋
  37. 37. 37 建立 Git Repository $mkdir projA # 建立 projA 目錄 $cd projA/ $git init # 初始化 git repository Initialized empty Git repository in /home/linms/tmp/projA/.git/ $git branch # init 後會建立第一個 branch 叫 master * master $ls -la total 16 drwxrwxr-x 3 linms linms 4096 12 月 15 12:03 . drwxrwxr-x 7 linms linms 4096 12 月 15 11:57 .. drwxrwxr-x 8 linms linms 4096 12 月 15 14:22 .git # repository 資料都放在 .git git init 初始化 repository git branch 查詢 branch 狀態 指令
  38. 38. 38 加入檔案 $touch README # 建立 README 檔 $git status # 透過 git status 查詢檔案狀態 On branch master Initial commit Untracked files: # 列出不受追蹤的檔案 (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track) $git add README # 加入 README 檔 $git status # 透過 git status 查詢檔案狀態 On branch master Initial commit Changes to be committed: # 還沒有 commit 的檔案 (use "git rm --cached <file>..." to unstage) new file: README
  39. 39. 39 commit 修改結果 $git commit -m "create project" # 執行 commit [master (root-commit) 5bf61c2] create project 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README $git log # 查詢 commit log commit 5bf61c204d703c5e79b2d093a38ad3706ef26778 # commit 的 SHA1 checksum Author: Google <google@gmail.com> Date: Mon Dec 15 14:06:39 2014 +0800 create project $git status # 查詢目前狀態,沒事! On branch master nothing to commit, working directory clean git commit commit 修改 git log 列印出 commit log 指令
  40. 40. 40 $echo "some instruction" > README # 修改 README 檔案 $git status On branch master 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: README # README 檔案 變成 modified no changes added to commit (use "git add" and/or "git commit -a") $git diff # 與 commit 前做比較 diff --git a/README b/README index e69de29..0759421 100644 --- a/README +++ b/README @@ -0,0 +1 @@ +some instruction $git add . # 加入目前目錄下,所有修改過的檔案 $git commit -m "update" # commit
  41. 41. 41 $touch hello.c $touch print.c $git add hello.c # 只把 hello.c 加入 staging area $git commit -m "add hello" # commit 時,只會 commit hello.c $git add print.c $git commit -m "add print" 分批 commit 可以在工作區新增修改檔案,但只把想 commit 的檔加到 staging area 後,再 commit stage 後再修改的話,只會 commit 到進 staging area 的檔案
  42. 42. 42 檔案恢復 unmodified modified staged git commit git addmodify git checkout git reset git reset 可以移除已加入 staging area 的檔案,但修改後的 內容不變 git checkout 可以恢復檔案未修改成的狀態
  43. 43. 43 刪除與搬移檔案 $touch hello.c $touch print.c $git add . # 把 hello.c print.c 加入 staging area $git rm print.c # 移除 print.c, 不追蹤 $git mv hello.c hello.cpp # 把 hello.c 重新命名成 hello.cpp git rm 移除檔案,取消追蹤 git mv 重新命名檔案 指令
  44. 44. 44 還原 commit 記錄 (revert) $git revert a737846 # 還原至 commit a737846 $git revert HEAD^ # 把 hello.c print.c 加入 staging area git revert 還原至特定的 commit 記錄 指令
  45. 45. 45 標籤 git tag <label> 新增標籤 git tag <label> <SHA1> 在特定 commit 新增標籤 git tag <label> -m "message" 新增標籤,並附上訊息 git tag -d <label> 刪除標籤 git tag 顯示所有標籤 指令 $git tag $git tag "v1.0" $git tag "v0.1" 5bf61c204d $git tag v0.1 v1.0 $git tag -d "v1.0" Deleted tag 'v1.0' (was a737846) $git tag v0.1 $git tag "v0.0" 5bf61c204d -m "first tag" $git tag v0.0 v0.1
  46. 46. 46 忽略的檔案設定 (ignored) .gitignore 檔案記錄要忽略的檔案,可放在 專案目錄 ( 專案設定 ) ,或是 任何之子目錄 ( 該目錄設定 ) 個人 ~/.gitignore # Object files *.o *.ko *.obj *.elf # Precompiled Headers *.gch *.pch tmp/* **/log
  47. 47. 47 建立 Branch git branch 列出目前 branch 資訊 git branch -a 列出目前 branch git branch <branch> 建立新 branch <branch> git branch -d <branch> 刪除 <branch> git checkout <branch> 切換至 <branch> git checkout -b <branch> 建立並切換至 <branch> 指令
  48. 48. 48 Branch 操作 $ git branch branch-1 # 建立 branch-1 $ git branch # 列出 branch 資訊 , 目前在 master branch-1 * master $ git checkout branch-1 # 切換至 branch-1 Switched to branch 'branch-1' $ git checkout -b branch-2 # 建立並切換至 branch-2 Switched to a new branch 'branch-2' $ git branch branch-1 * branch-2 master $ git branch -d branch-1 # 刪除 branch-1 Deleted branch branch-1 (was a737846). $ git branch * branch-2 master
  49. 49. 49 Branch 合併 把自己修改的 code 合併回主幹 把別人修改好的部分合併到自己的 branch 為什麼要合併? git merge 自動合併真是太好用了!
  50. 50. 50 Branch 的合併 (Fast Forward) $git checkout -b feature-A # 建立新 feature-A branch $touch featureA.txt $git add . $git commit -m "add feature A" # commit $git checkout master # 切換至 master $git merge feature-A # 把 feature-A 合併至 master Updating c8877c8..21a8dd4 Fast-forward featureA.txt | 0 1 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 featureA.txt 指令 git merge <branch1> … <branchN> 把 <branch1> … <branchN> 合併至目前的 branch Fast Forward A B C master feature-A A B C master feature-A 合併
  51. 51. 51 Branch 的合併 ( 三方合併 ) $git checkout -b feature-B $touch feature-B.txt $git add . $git commit -m "feature B" $git checkout master $touch bugfix $git add . $git commit -m "bug fix" $git merge feature-B Merge made by the 'recursive' strategy. feature-B.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 feature-B.txt A B C master feature-B 合併 D A B C master feature-B D D bugfi x feature-B.txt bugfix feature-B.txt
  52. 52. 52 Branch 的合併 (rebase) $git checkout -b feature-C Switched to a new branch 'feature-C' $touch feature-c.txt $git add . $git commit -m "feature c" $git checkout master $touch bugfix $git add . $git commit -m "bug fix" $git checkout feature-C $git rebase master First, rewinding head to replay your work on top of it... Applying: feature c A B C master feature-B 合併 Dfeature-C.txt bugfix A B C master feature-B D' feature-B.txt 透過 rebase 的方式合併, 可以讓各 branch 的有向循 環圖更乾淨 bugfix
  53. 53. 53 遠端操作
  54. 54. 54 Copy 遠端的 Repository 到本地 SSH git clone git@controller.estinet.com/sdn-app-v2.git HTTP/HTTPS git clone http://controller.estinet.com/sdn-app.git Git protocol git clone git://controller.estinet.com/sdn-app.git FILE git clone file://home/git/sdn-app.git
  55. 55. 55 Copy 遠端的 Repository 到本地 $git clone http://controller.estinet.com/estinet-controller/sdn-app.git Cloning into 'sdn-app-v2'... remote: Counting objects: 3713, done. remote: Compressing objects: 100% (2121/2121), done. remote: Total 3713 (delta 1004), reused 1617 (delta 266) Receiving objects: 100% (3713/3713), 2.48 MiB | 0 bytes/s, done. Resolving deltas: 100% (1004/1004), done. Checking connectivity... done. $cd sdn-app $git branch -a * dev # 目前 branch 在 dev master remotes/origin/HEAD -> origin/master # remotes/origin 為遠端的 remotes/origin/master # repository 指令指令 clone 從遠端下載 repository
  56. 56. 56 Remote 設定 指令指令 remote 管理遠端 $git remote # 列出遠端所有的 repository origin # 目前有個遠端叫 origin $git remote -v origin git@google.com:fanfantu/demo.git (fetch) origin git@google.com:fanfantu/demo.git (push)
  57. 57. 57 從遠端更新 指令指令 fetch 下載遠端的更新,可以觀察後再決定要不要合併 pull 下載遠端的更新後,自動合併 $git fetch # 下載更新 From controller.estinet.com:linms/demo ea6cd45..2423264 master -> origin/master # 放在 origin/master $git branch -a * dev master remotes/origin/master $git checkout origin/master # 可以切到 origin/master 看更新 $git pull origin master master # 改用 pull 直接把 origin 的更新 # 合併到 master
  58. 58. 58 把本地的 commit 上傳回遠端 指令指令 push 把本地的 commit 上傳回遠端 $git commit -m "done" # 先 commit 完成修改 $git push origin master # 再把目前的 branch push 到 # origin/master Counting objects: 5, done. Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@controller.estinet.com:linms/demo.git 2423264..49047fc master -> master
  59. 59. 59

×