# Git 指令 ### 初始化 每一個新的資料夾,對其初始化建立一個.git git init ### 檢視檔案狀態 ```=git git status #查看當前於工作目錄,暫存區檔案 git branch #查看當前head位置以及所有分支名稱 ``` ### 檢視變更紀錄 ```git git log git log --online #檢視一行紀錄 git log -p 檔案名稱 #檢視單一紀錄 ``` ### 查看檔案紀錄 git blame 檔案名稱 ### 檢視程式變更紀錄 顯示差異點 ```=git git diff ```` ### 列出跳轉紀錄過程 ```=git git reflog git reflog -n #n為任意數字,想列出的紀錄數量 ``` ### 工作目錄,暫存區,儲存區 起始建立檔案後都在工作目錄 ```=git git add 檔案名稱 #將檔案加入暫存 git add . #將資料夾下全部加入暫存 ``` 對暫存進行commit進入儲存區,並給予一個適當的存檔命名 ```=git git commit -m "適當的命名" # git cm "xx" ``` ### 暫存檔案 將變更到一半的檔案暫存,稍後再取回 ```git git stash #暫存 git stash list # 列出所有 git stash pop #吐出來 ``` ### Head移動(分支切換),檔案救回 checkout => co ```=git git checkout #檔案回覆 git checkout . #當前資料夾全回覆 git restore #檔案回覆 ps:ver 2.23 git checkout --檔案名稱 #若剛好要回覆的檔案名稱和分支名稱相同,則會進行分支切換,所以直接指定名稱 git checkout 檔案名稱 #head移動(分支切換) ``` ### 分支創造,刪除 ```=git git branch #創造新的分支 git branch -d 分支名稱 #刪除分支(標籤) ``` ### 分支合併 先將head移動到master(使用 checkout ),在執行合併 ```=git git merge 分支名稱 #合併分支(快轉合併) git merge 分之名稱 --no-ff #不快轉合併(殘留分支圖) git rebase 分支名稱 #(要移動的位置 ) #將分支合併成一條線 #優:較merge少一個節點 ,缺:不易辨別AB分支創建時間 ``` ### Reset 性質類似become ```=git git reset 要回去的點 -mixed #回到工作目錄(預設) -soft #回到暫存 -hard #直接丟棄 git reset head^n #n為數量 #可使用^後方+ ~5 =^^^^^ (倒退五步) # ^ (caret) # ~ (Tilde) ``` ### 刪除資料夾 ``` rm -rf .git #-r 刪除 -f 不要問砍了就對了 ``` ### 標籤 使用 tag 時,若是刪除分支,也不會消失,因為還有一個 tag 指著他 ```git git tag 1.0.0 b174a5a ``` ### ssh 密鑰 先 ssh-keygen 創建名稱(當前目錄,直接enter會到ssh資料夾) 密碼(通常省略) 接著到 cd ~/.ssh 找到 cat id_rsa.pub (id_rsa 是私密) 再到 github 設定的ssh中設定 ### 推上 github ```git git remote add origin xxx(ssh協定) git push -u origin master git push -f (不能隨便用,會導致自己記錄把整個蓋掉) ``` (把本地的 master 分支,推往 origin 這個遠端節點,並且在遠 端形成一個 master 分支」) ### 同步 github git pull = git fetch + git merge ``` git fetch or git pull ``` ### 複製專案 只需要進行第一次 , 接下來都是使用 pull ``` git clone 專案網址 ```