close

做個備份, 方便查詢 

 

 

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

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 kk 的頭像
    kk

    kk

    kk 發表在 痞客邦 留言(0) 人氣()