command line / Git

git 常用指令筆記

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}

© 2024 胡同筆記 | WordPress Theme: Cosimo by CrestaProject.