101502520 過 

2014/08/20
Git ⼰己
2014/12/20
⼰己 ⽅方
他 ...	
• 得⼀一
要⽅方
• 們 是
⽅方
• 是 是 還
他 ...
• ⽅方
• ⽅方
• 是 還
⼰己 就 ⽅方
Git 版本控制就像是⼀一種⾼高級的存檔機制。
開發到⼀一個段落,就可以如存檔⼀一般,提交這次的檔案變動,
並附上提交訊息。
⼰己
• 下 

• 下 

• 下 他 

• 了 他 點

• 果 

• 新 你 你
透過 Git,我們還可以⼗十分清楚
專案整體、各個分⽀支的發展狀況
例如:
哪個分⽀支合併了哪個分⽀支
哪個夥伴最近做了什麼事情
除此之外,透過這個提交機制,
Git 可以:
⽐比較檔案變動的差異
回朔到先前的版本
創⽴立新的分⽀支,並輕鬆合併
Git 這
• 這
• git config --global user.name “Your Name”
• git config --global user.email “your@email.com”
• git config --list 在 這 都
• ⽤用⼼心 Pro Git - 這 Git
Git
• 他 下 無 git init git repository (新⾃自 .git 種)
• .git 種 能 出
• .git/HEAD
• .git/refs/
• .git/HEAD 樣很 你
• .git/refs 種 他 你 tag
.git/refs/heads/master master 你
SHA
• 能 git checkout 每 reset 和
Git ⼤大更
• working directory
.git 種
現以 IDE
⼤大更 

• git directory(repository) .git
種 git 下


• staging area 沒 三
⼤大更 git
commit 下
時 他
他 staging
area 機 

• git repository 下
working directory
Git 他 來
在 來 git status
• git status 和 來

• 做 

• 你 master

• master 那origin/master
下 之

• 他 ⼤大 

• staging area commit 他

• 們 staging
area 他

• git家回 他

• git status -h 在
下 git add & git commit
• 他( ) staging area
• git add <file/directory> <file/directory> … # 他 種
• git add -u # 家回分 他
• git add -A # 家回分 家回 他
• staging area 他 commit
• git commit
• git commit -m “commit message”
他 git rm
• git 家回 他 git repository
git rm
• git rm <file> # 他 working directory
staging area
• git rm <file> --cached # staging area
他 working directory
他 家回
什 他 .gitignore
• 他 我 git 家回 做 IDE 這 每後
真 這 ⼜又 真 他 對
.gitignore 他 這
• 這 更 什 沒
• git config --global core.excludesfile ‘~/.gitignore'
• ⽤用⼼心 Pro Git - ⼜又#什 他
⾃自 你 git branch
• ⾃自 你
你 分地
機 你
• git branch <name> 最 ⾃自 你
git checkout <name> 不到 你
• git checkout -b <name> ⾃自 你
不到
• git branch -a 後 那 你
• git branch -h
新⾃自能 git tag
• 能 (lightweight) 後然
(annotated) 

• 能 能 

• 後然 能 沒 Git (麼
) 

• ⽇日 想 新 後然 能
會 

• git tag -a <name> #新⾃自後然 能 

• git tag <name> #新⾃自 能 

• 能 個 能
v1.0

• ⽤用⼼心 Pro Git - 能
能 你
在 下 git log & git diff
• git diff 在 staging area 他
• git diff --cached 在 他 後 staging area
• git difftool 點 得⼀一在 他
• git log 在 branch 下
• git log -p 在 branch 下 後
• git log --graph 在 commit tree
• git blame <file> 在 他 下
可以查看 staging area 的檔案變動
動 git stash
• 你
git stash 動
• git stash list 在 動
• git stash apply 動
• git stash drop 動
• git stash pop
• ⽤用⼼心 Pro Git - Stashing
git cherry-pick
• git cherry-pick <SHA> <SAH>…
• cherry-pick
commit
HEAD 

• cherry-pick
conflict 就 中
他 staging git
cherry-pick --continue
--abort
不到 你 git checkout
• git checkout <branch/SHA> HEAD (.git/HEAD)
最 working directory
不到 你 commit tree
• 做 git checkout master .git/HEAD
ref: refs/heads/master
• git checkout <SHA> HEAD
detached HEAD 來
你 ⼦子 SHA git branch
git checkout -b dangling commit 新⾃自
你
開 下 git reset
• git reset <SHA> 你 HEAD (.git/refs/heads/
<branch>) 這 detached HEAD 來沒
這 .git/HEAD
• git reset HEAD~2 你
開 unstaged 來
們 對 git add staging area
• --hard 沒 會 working directory
• git reset 開 開
reset reflog 在 開 SHA
git reset <SHA> --hard
git checkout git reset 點
git reset & checkout
• 三 他 兩 reset checkout
HEAD 你 HEAD staging 他
staging 他 git status
了
果 下 git revert
• git revert 果 commit 果
做 下 A->B->C
git revert B A->B->C->D
revert
• git revert HEAD~2 果
• git revert conflict 中 他
git add staging 對 git revert --continue
git revert --abort revert
git revert git reset 點
去發 git rebase
• rebase 你 機 你
你 你
你 rebase 中 就 給好只
你 你 機 中
• rebase 就
git rebase -i HEAD~3 情 ⼀一
情 ⼀一 每
機每 知每 多們
• ⽤用⼼心 Pro Git - 去發
git rebase 了道
git commit --amend
• 對 git rebase -i HEAD~ git commit --amend
下
• git commit --amend staging area
機
沒 staging area
• git rebase 多 git commit --amend ⼈人
SHA 都
那⽽而⼜又 去發
好上
git reflog & git fsck 下
• reset, rebase, commit --amend 和 下
⼿手 ⽅方 Git
• git HEAD 會 成下 git reflog git log -g
在 HEAD 下
• 對 git reflog 在 SHA git reset --
hard <SHA> git merge <SHA> 機
git branch <name> <SHA> ⾃自 下 你
• git reflog SHA git fsck --
full 在 dangling commit SHA 對
• ⽤用⼼心 Pro Git - 多
機 你 git merge
• 你
git merge
你 機 你
• 機
--no-ff
fast forward
對
merge commit
你 機 你
你
新 得 git flow
• git flow git 得
如 道 裡 得 

• 你

• master: 有 來

• develop: 你

• 你 你

• feature: develop
你 機 develop

• release: 看 release
們 bugs develop
機 master develop

• hotfix: 們 bug
master 機 master
develop
那⽽而⼜又 git remote
• git repository 那⽽而⼜又
給好
⽣生 Github Bitbucket 為
三好 這 Gitlab
• git remote -v 他這 那⽽而⼜又
• git remote add <name> <url> 那⽽而⼜又
• git remote -h 在
那 git push
• 那⽽而⼜又
• git push -u <remote> <branch>
• git push -u 你 那 你這
你家回 upstream
• 做 git push -u origin develop develop origin
develop 這 家回 那 origin/develop
• 你 那 做 rebase
push 那 -f 那 你
• 做 git push -u gitlab feature/foo -f
• git push -h 在
那⽽而⼜又 git clone
• git clone <url>
• git clone 那 repository 後
git 下 這 remote
• clone 對 git push
那
• clone git checkout <remote-branch> git
新⾃自 你 remote 你也 這
家回 upstream
• git checkout -b <branch> --track <remote>/<branch>
git fetch & git pull
• git fetch <remote> 那 你
你
• git pull git fetch git merge
git fetch 那家回 你 機
你
• 你 那 你
機 ⼈人 merge commit 新
git pull --rebase rebase merge
時
• git 的 時 道⼩小 做 SHA
• “~” “^” 時 做
• HEAD^2 merge commit
• HEAD~3
• HEAD@{2} HEAD
• 對 “A..B” 時 B 你 A 你
• 對 “A…B” 時 B 你 A 你
• ⽤用⼼心 Pro Git - 時們
次 可
• Git
• Git
• Pro Git
• GitHub Cheat Sheet PDF
• Git Concepts Simplified by Sitaram Chamarty

Git 版本控制 (使用教學)

  • 1.
  • 2.
  • 3.
    他 ... • 得⼀一 要⽅方 •們 是 ⽅方 • 是 是 還
  • 4.
    他 ... • ⽅方 •⽅方 • 是 還
  • 5.
    ⼰己 就 ⽅方 Git版本控制就像是⼀一種⾼高級的存檔機制。 開發到⼀一個段落,就可以如存檔⼀一般,提交這次的檔案變動, 並附上提交訊息。
  • 6.
    ⼰己 • 下 •下 • 下 他 • 了 他 點 • 果 • 新 你 你 透過 Git,我們還可以⼗十分清楚 專案整體、各個分⽀支的發展狀況 例如: 哪個分⽀支合併了哪個分⽀支 哪個夥伴最近做了什麼事情 除此之外,透過這個提交機制, Git 可以: ⽐比較檔案變動的差異 回朔到先前的版本 創⽴立新的分⽀支,並輕鬆合併
  • 7.
    Git 這 • 這 •git config --global user.name “Your Name” • git config --global user.email “your@email.com” • git config --list 在 這 都 • ⽤用⼼心 Pro Git - 這 Git
  • 8.
    Git • 他 下無 git init git repository (新⾃自 .git 種) • .git 種 能 出 • .git/HEAD • .git/refs/ • .git/HEAD 樣很 你 • .git/refs 種 他 你 tag .git/refs/heads/master master 你 SHA • 能 git checkout 每 reset 和
  • 9.
    Git ⼤大更 • workingdirectory .git 種 現以 IDE ⼤大更 • git directory(repository) .git 種 git 下 • staging area 沒 三 ⼤大更 git commit 下 時 他 他 staging area 機 • git repository 下 working directory
  • 10.
  • 11.
    在 來 gitstatus • git status 和 來 • 做 • 你 master • master 那origin/master 下 之 • 他 ⼤大 • staging area commit 他 • 們 staging area 他 • git家回 他 • git status -h 在
  • 12.
    下 git add& git commit • 他( ) staging area • git add <file/directory> <file/directory> … # 他 種 • git add -u # 家回分 他 • git add -A # 家回分 家回 他 • staging area 他 commit • git commit • git commit -m “commit message”
  • 13.
    他 git rm •git 家回 他 git repository git rm • git rm <file> # 他 working directory staging area • git rm <file> --cached # staging area 他 working directory 他 家回
  • 14.
    什 他 .gitignore •他 我 git 家回 做 IDE 這 每後 真 這 ⼜又 真 他 對 .gitignore 他 這 • 這 更 什 沒 • git config --global core.excludesfile ‘~/.gitignore' • ⽤用⼼心 Pro Git - ⼜又#什 他
  • 15.
    ⾃自 你 gitbranch • ⾃自 你 你 分地 機 你 • git branch <name> 最 ⾃自 你 git checkout <name> 不到 你 • git checkout -b <name> ⾃自 你 不到 • git branch -a 後 那 你 • git branch -h
  • 16.
    新⾃自能 git tag •能 (lightweight) 後然 (annotated) • 能 能 • 後然 能 沒 Git (麼 ) • ⽇日 想 新 後然 能 會 • git tag -a <name> #新⾃自後然 能 • git tag <name> #新⾃自 能 • 能 個 能 v1.0 • ⽤用⼼心 Pro Git - 能 能 你
  • 17.
    在 下 gitlog & git diff • git diff 在 staging area 他 • git diff --cached 在 他 後 staging area • git difftool 點 得⼀一在 他 • git log 在 branch 下 • git log -p 在 branch 下 後 • git log --graph 在 commit tree • git blame <file> 在 他 下 可以查看 staging area 的檔案變動
  • 18.
    動 git stash •你 git stash 動 • git stash list 在 動 • git stash apply 動 • git stash drop 動 • git stash pop • ⽤用⼼心 Pro Git - Stashing
  • 19.
    git cherry-pick • gitcherry-pick <SHA> <SAH>… • cherry-pick commit HEAD • cherry-pick conflict 就 中 他 staging git cherry-pick --continue --abort
  • 20.
    不到 你 gitcheckout • git checkout <branch/SHA> HEAD (.git/HEAD) 最 working directory 不到 你 commit tree • 做 git checkout master .git/HEAD ref: refs/heads/master • git checkout <SHA> HEAD detached HEAD 來 你 ⼦子 SHA git branch git checkout -b dangling commit 新⾃自 你
  • 21.
    開 下 gitreset • git reset <SHA> 你 HEAD (.git/refs/heads/ <branch>) 這 detached HEAD 來沒 這 .git/HEAD • git reset HEAD~2 你 開 unstaged 來 們 對 git add staging area • --hard 沒 會 working directory • git reset 開 開 reset reflog 在 開 SHA git reset <SHA> --hard
  • 22.
  • 23.
    git reset &checkout • 三 他 兩 reset checkout HEAD 你 HEAD staging 他 staging 他 git status 了
  • 24.
    果 下 gitrevert • git revert 果 commit 果 做 下 A->B->C git revert B A->B->C->D revert • git revert HEAD~2 果 • git revert conflict 中 他 git add staging 對 git revert --continue git revert --abort revert
  • 25.
    git revert gitreset 點
  • 26.
    去發 git rebase •rebase 你 機 你 你 你 你 rebase 中 就 給好只 你 你 機 中 • rebase 就 git rebase -i HEAD~3 情 ⼀一 情 ⼀一 每 機每 知每 多們 • ⽤用⼼心 Pro Git - 去發
  • 27.
  • 28.
    git commit --amend •對 git rebase -i HEAD~ git commit --amend 下 • git commit --amend staging area 機 沒 staging area • git rebase 多 git commit --amend ⼈人 SHA 都 那⽽而⼜又 去發 好上
  • 29.
    git reflog &git fsck 下 • reset, rebase, commit --amend 和 下 ⼿手 ⽅方 Git • git HEAD 會 成下 git reflog git log -g 在 HEAD 下 • 對 git reflog 在 SHA git reset -- hard <SHA> git merge <SHA> 機 git branch <name> <SHA> ⾃自 下 你 • git reflog SHA git fsck -- full 在 dangling commit SHA 對 • ⽤用⼼心 Pro Git - 多
  • 30.
    機 你 gitmerge • 你 git merge 你 機 你 • 機 --no-ff fast forward 對 merge commit 你 機 你 你
  • 31.
    新 得 gitflow • git flow git 得 如 道 裡 得 • 你 • master: 有 來 • develop: 你 • 你 你 • feature: develop 你 機 develop • release: 看 release 們 bugs develop 機 master develop • hotfix: 們 bug master 機 master develop
  • 32.
    那⽽而⼜又 git remote •git repository 那⽽而⼜又 給好 ⽣生 Github Bitbucket 為 三好 這 Gitlab • git remote -v 他這 那⽽而⼜又 • git remote add <name> <url> 那⽽而⼜又 • git remote -h 在
  • 33.
    那 git push •那⽽而⼜又 • git push -u <remote> <branch> • git push -u 你 那 你這 你家回 upstream • 做 git push -u origin develop develop origin develop 這 家回 那 origin/develop • 你 那 做 rebase push 那 -f 那 你 • 做 git push -u gitlab feature/foo -f • git push -h 在
  • 34.
    那⽽而⼜又 git clone •git clone <url> • git clone 那 repository 後 git 下 這 remote • clone 對 git push 那 • clone git checkout <remote-branch> git 新⾃自 你 remote 你也 這 家回 upstream • git checkout -b <branch> --track <remote>/<branch>
  • 35.
    git fetch &git pull • git fetch <remote> 那 你 你 • git pull git fetch git merge git fetch 那家回 你 機 你 • 你 那 你 機 ⼈人 merge commit 新 git pull --rebase rebase merge
  • 36.
    時 • git 的時 道⼩小 做 SHA • “~” “^” 時 做 • HEAD^2 merge commit • HEAD~3 • HEAD@{2} HEAD • 對 “A..B” 時 B 你 A 你 • 對 “A…B” 時 B 你 A 你 • ⽤用⼼心 Pro Git - 時們
  • 37.
    次 可 • Git •Git • Pro Git • GitHub Cheat Sheet PDF • Git Concepts Simplified by Sitaram Chamarty