The Issue of the Day Before

git 常用指令

git -

太多要用時,忘記,要再查一下的指令。簡單寫一下說明範例。

How

還沒 pull 但要修改更新 commit

  • 改最後一次 commit 的敘述

> git commit --amend -m "last a commit"
  • 不修改最後一次 commit 的敘述(將這次的 commit 合併到上一次)

> git commit --amend --no-edit

新增 tagremote

> git tag -a v1.0.1 //(1)
> git push origin v1.0.1 //(2)
  1. 在本地新增一個 tag

  2. 將該 tag 推送到遠端倉儲

將所有的 tag 都推到 remote

> git push origin --tags

只更新一個遠端的檔案到本地

> git fetch // (1)
> git checkout origin/master -- path/to/file // (2)
  1. 將遠端的檔案都抓下來但不更新本地的檔案

  2. 將目前遠端 master 分支(origin/master)的某檔案 checkout 到本地

查某次 commit 的檔案列表

在查看 log 時,同時列出被 commit 的檔案。

> git log --name-only
> git diff-tree --no-commit-id --name-only -r <sha> // (1) (2) (3)
  1. --no-commit-id 不輸出 commit ID(sha)

  2. --name-only 顯示檔名

  3. -r 遞迴目錄

diff-tree 比較兩個 commit 之間的差異。

比較簡化的命令

> git show --pretty="" --name-only <sha> // (1)
  1. --pretty="" 抑制開頭的輸出。

git diff 比較目前工作目錄與最後一次 commit 之間的差異。

git diff <sha> 比較目前工作目錄與指定 commit 之間的差異。

git diff --cached <sha> or git diff --staged <sha> 比較目前 stage 與指定 commit 之間的差異。

git diff <sha1> <sha2> 比較兩個 commit 之間的差異。

只秀出 log 簡短的結果

> git log --oneline

強迫將本地工作目錄全部更新為遠端版本

> git fetch --all // (1)
> git reset --hard origin/master // (2)
  1. 從遠端下載最新版本,但不合併或重設任何內容。

  2. reset 會將主分支重置為剛剛獲取的內容。--hard 會將所有文件改為與 origin/master 相同。

列出單一檔案的每次修改歷史

git log --follow -p -- path/to/file

合併前先看看有無衝突

> git merge <branch> --no-commit --no-ff

先暫存 處理完 再恢復

> git stash save // (1)
> git stash list // (2)
> git stash pop // (3)
> git stash drop // (4)
> git stash clear // (5)
  1. 暫存

  2. 列出暫存

  3. 取出暫存

  4. 刪除暫存

  5. 刪除所有暫存

閱讀在雲端