2013/07/30

Git Notebook

將 Dropbox 當作 Server

# 以 case/test/ 資料夾為範例
# --bare 是指不建立 .git 目錄,而把裡面的檔案直接放在目前目錄下
# 適合在沒有修改檔案或開發的機器上
~/Dropbox/case/test/git init --bare

本機端設置

/var/www/test $ git init # 初始化 git
/var/www/test $ git config --global user.name "Daivd" # 初始使用者名稱
/var/www/test $ git config --global user.email "chan15tw@gmail.com" # 初始使用者 Email
/var/www/test $ git conifg --global diff.tool vimdiff # 指定 vimdiff 當作檔案差異比較軟體
/var/www/test $ git remote add test ~/Dropbox/case/test/ # 設定遠端目錄
/var/www/test $ git config branch.master.remote test
/var/www/test $ git config branch.master.merge refs/heads/master
/var/www/test $ git config push.default current
/var/www/test $ touch 1.txt # 建立一個檔案
/var/www/test $ git add . # 新增檔案到 repo
/var/www/test $ git commit . -m "add new file" # commit 檔案
/var/www/test $ git commit --amend -m "add new file 1.txt" # 修改剛剛的 commit message
/var/www/test $ git push test master # 將剛改變的結果 push 到 test 的 master
/var/www/test $ git pull test master # 將 test server 上的最新結果 pull 下來

其他常用指令

/var/www/test $ git log # 查看歷史資料
/var/www/test $ git status # 查看當前 git 狀況
/var/www/test $ git difftool 1.txt # 比較 1.TXT 跟之前版本的差異
/var/www/test $ gitk 1.txt # 圖形化介面

git add -p

使用 git add -p 時 git dd 會進入互動模式,會逐一秀出你編輯過的內容並且讓你決定要不要加到這次的 commit,執行後下方會有幾個選項

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

我認為比較會用到的有

y - 加入這個 hunk
n - 跳過這個 hunk
q - 離開這次的 stage
a - stage 這次的 hunk 並且 stage 此單一檔案接下來所有的 hunk
d - 跳過這整個檔案的 hunk
g - 會列出這個檔案所有的 hunk 讓你選擇編號前往
/ - 搜尋 hunk
j - 跳過這個 hunk 不儲存, 前往下一個未儲存的 hunk
J - 跳過這個 hunk 不儲存, 前往下一個不管有沒有儲存過的 hunk
k - 跳過這個 hunk 不儲存, 前往上一個未儲存的 hunk
K - 跳過這個 hunk 不儲存, 前往上一個不管有沒有儲存過的 hunk
e - manually edit the current hunk

透過這個方法,可以實現某個檔案我們修改了幾個部分,卻只想先 commit 某些部分的願望。

沒有留言: