username and email
設定 global name and email
$git config --global user.name "xxxx" $git config --global user.email "xxx@mail.com"
設定 不同專案的 name and email
$git config --local user.name "xxxx" $git config --local user.email "xxx@mail.com"
檢視 user setting
$git config --list
把 log 圖像化
$git log --oneline --graph $git log --oneline --p 可查看修改明細
查詢異動記錄
$git reflog
取消 git 追踪
某檔案要取消被 git 的追踪 (檔案不會真的刪除,只是取消git的追踪)
$git rm xxx.html --cached
要一口氣清除那些己經忽略的檔案
$git clean -fX
git 流程
工作目錄 Working Directory -> git add -> 暫存目錄 Staging Area -> git commit -> 儲存庫 Repository
搜尋 search commit
尋找某人(xxx)的 commit
$git log --oneline --author="xxx"
尋找包含某些內容(xxx)的 commit內容
$git log --oneline --grep="xxx"
修改 commit 記錄
- 使用 git rebase
- 用 git reset 拆掉,整理後再重新 commit
- 使用 –amend 來修改最後一次的 commit
$git reset abcde^ $git reset abcde~5 $git reset HEAD^
^ 表示前一次
~5 表示前5次
若使用 ^ 時出現提示錯誤:zsh: no matches found: HEAD^
則加上 轉義字符 \ 即可
再次執行:git reset HEAD\^ 即可成功
reset的模式
--mixed 預設的 (工作目錄檔案:不變 / 暫存區: 丟掉) --soft (工作目錄檔案:不變 / 暫存區: 不變) --hard (工作目錄檔案:丟掉 / 暫存區: 丟掉)
復原不小心刪除的檔案
不小心把檔案刪掉了,要如何救回來 (在現在的版本中)
$git checkout -- xxx.txt
要一口氣救回所有刪掉的 (在現在的版本中)
$git checkout -- .
不小心把檔案刪掉了,要如何救回來 (救回在前n個的版本前的檔案)
$git checkout HEAD~2 xxx.txt
分支
新增分支
$git branch 分支名稱
修改分支名稱
$git branch -m cat dog 修改原本分支名稱是 cat 變成 dog
刪除分支
$git branch -d 分支名稱 強迫刪除分支 $git branch -D 分支名稱
分支是支向某個 commit 的指標,刪除分支並不會造成那些 commit 消失
切換分支
$git checkout 分支名稱
切換分支時,不影響在工作目錄裡的內容修改
在 cat 分支新增了某 aaa.txt 檔案,修改到一半未 commit 就切換到 dog 分支, 則在 dog 分支裡也會有編輯未完成的 aaa.txt
如果在 a 分支有修改某檔案(未commit),要切換到 b分支(也有某檔案),則需先 commit 才能切換
error: Your local changes to the following files would be overwritten by checkout: 檔案名稱
新增分支並直接切換到該分支
$git checkout -b 分支名稱
合併分支
使用 merge 的方式合併
$git merge 分支名稱
使用 非快轉模式 合併分支
$git checkout 分支名稱 --no-ff
使用非快轉模式合併分支,會額外多出一個新的 commit,好處是可以完整保留分支的樣子
救回不小心刪除還未合併的分支
$git branch 新的分支名稱 6235fd 6235fd 是不小心刪除分支的 SHA-1 值 或是 $git checkout -b 新的分支名稱 6235fd
使用 rebase 的方式合併
$git rebase abc 目前所在的分支合併 abc 分支,合併完不會多一個合併專用的 commit, head 會指向目前所在的分支
取消上一次的 rebase
$git reset ORIG_HEAD --hard
取消合併 reset
- 先使用 git reflog 查詢欲回復分支的 SHA-1值
- $git reset SHA-1值 –hard
ORIG_HEAD
記錄危險操作 (merge or reset rebase) 的 SHA-1 值
查看合併失敗時的指令
git am --show-current-patch
Revert
會產生一個反向的 commit 內容來取消
用 Revert 取消最後一次 commit
$git revert HEAD --no-edit --no-edit 表示不編輯 commit 訊息
取消剛剛的 Revert
$git reset HEAD^ --hard
Reset Rebase Revert 的差別
改變歷史記錄 Reset Y 適用尚未推出去的 commit Rebase Y 用來整理編輯還沒有推出去的 commit Revert N 新增一個 commit 來反轉,保留舊的 commit ,適用己經推出去的 commit
東西改到一半,臨時要去修改別的東西…
方法 1 : 先 commit 目前進度,等改完臨時的東西後,再將臨時的 commit reset 回來
$git add --all $git commit -m "not finish..." --------- $git reset HEAD^
方法 2 : 使用 stash
$git add 改一半的檔案 $git stash
查看暫存的 stash 列表
$git stash list stash@{0}: WIP on master2: c0344f8 Revert "test revert" WIP 表示 Work in Progress 工作進行中...
把暫存中的任務撿回來繼續做
$git stash pop stash@{0}
如果要刪除不要的 Stash
$git stash drop stash@{0}