做個備份, 方便查詢
git checkout
git checkout <branchA> : 切換到branchA
git checkout -b <branchA>: 新增branchA, 並切換過去
git checkout --track <branchA> origin/branchA: 新增branchA, 和remote的branchA做對應, 最後再切換過去
git branch
git branch: 列出local所有branch
git branch -r: 列出remote所有branch
git branch -d <branchA>: 當branchA的修正已經存在當前branch, 才會砍掉branchA
git branch -D <branchA>: 無論如何, 砍掉branchA
git rebase
git rebase -i <SHA1>: 以<SHA1>為base, 進行interactive的rebase
interactive mode提供幾種功能, 會用到的有
1. 改變commit point順序 :
移動pick到的那行即可. 基本上不常用, 唯一需要的場合就是 ... 時間看起來會比較新 XD
2. 把多個commit point合併到前面的某個點, 並且取那個點的commit message做為最後的message:
把要合併的pick都改成fixup, 除了要被合併的前面那個點依然維持pick
3. 把多個commit point合併到前面的某個點, 但要修改最後的message:
把要合併的pick都改成fixup或squash, 除了要被合併的前面那個點依然維持pick. 此時, fixup的message會消失, 但squash的message會保留, 可以進行修改.
4. 修改commit message:
把pick改成reword
ps. 如果是pick的commit point, rebase完以後, <SHA>會變動
git rebase <branchA>: 把本身branch整顆移植到<branchA>上
git rebase --onto <branchA> <SHA1>: 以<SHA1>為base, 把本身branch從<SHA1>的下一個commit point開始, 移植到<branchA>上
git rebase --abort : 因為各種原因, 總之, 想放棄這次的rebase, 就使用這個指令.
git rebase --continue : 因為各種原因, 總之, 想要繼續中斷的rebase, 就使用這個指令.
git pull --rebase: 以rebase的方式進行git pull
結束後, remote的點會排在上一次紀錄的點之後, 而本來在上一次紀錄的點以後的所有修改, 都會順移在這個點的後面.
git mergetool
使用git merge或git rebase時, 有時會發生conflict, 此時需要打 git mergetool 呼叫 mergetool 進行 merge
mergetool設定方式:
ex: 使用 kdiff3 做為解決conflict的merge tool
1. 下載並安裝 kdiff3
2. 打開 .git/config, 加入
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/Program Files/KDiff3/kdiff3.exe
3. 需要呼叫mergetool時, 打 git mergetool, 就會叫出kdiff3
解決 conflict:
1. git mergetool
2-1. 若要解決 git rebase 造成的 conflict, mergetool後, 需要 git add 每一個使用mergetool的檔案, 再打 git rebase --continue, 完工.
2-2. 若要解決 git merge 造成的 conflict, mergetool後, 需要重新 git commit.
2. 反悔
若rebase一半要反悔: git rebase --abort
若merge一半要反悔: git reset --hard HEAD - 回到merge前的commit point
git reset:
1. git reset --hard: 砍掉所有unstaged的變動 (尚未add的變動)
2. git reset --hard HEAD^ : 回到上一個commit point (砍掉這次的commit point)
3. git reset --hard HEAD~i (i=2,3,4,...) : 回到上i個commit point
4. git reset --soft HEAD^: 回到上一個commit point, 原本的commit point會變成uncommit狀態
git clean:
1. git clean -dxf: 砍掉所有 unstaged 新增檔案
進階:
git log --graph --oneline --all --decorate
留言列表