你必須很努力

Day13 - 一些 Git 指令

2020/09/18
字數統計: 1.1k閱讀時間: 4 min

前言

記錄工作上用過的一些 Git 指令,主要是在 terminal (終端機) 或 VScode 的介面操作,沒什麼在用 gitkSourceTree,覺得在 terminal 輸入看起來也比較厲害 XD

本篇以已會基本 Git 操作為基礎上,進行分享 (需已會 git statusgit addgit commitgit branchgit checkoutgit pushgit pull 等操作)


本篇以此 repo 為範例

1
git clone https://github.com/River-Ye/demo_git.git

查詢 remote 名稱和 URL

1
2
git remote
git remote -v

超重要小技巧: 可透過 git remote -h 的方式,看有哪些參數,絕大部分指令皆能透過此技巧查詢參數或透過 tldr git remote 的方式看範例

從既有 branch 建立新的 branch 並切到新的 branch

情境: 假如我正在 master,想直接建立新的 branch 並切過去

1
git checkout -b new_branch_name

將既有 branch 移動到別的 branch 的位置

情境: 我有一個 river_branch ,想移動到 master branch 的位置

1
2
3
4
git branch -f <branch_name> <目的地branch_name>

# 範例
git branch -f river_branch master

事情做到一半,突然要切到不同 branch 處理時

很常會遇到的情境,這些指令很常用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 將手中的事情先藏起來 (非存到 add 或 commit 喔)
git stash save -u "輸入要儲存的名稱,可寫中文"

# 列出目前已儲存的 stash
git stash list

# 將 stash 中的 stash@{0} 抓下來,且不刪除 stash@{0}
git stash apply stash@{0}

# 將 stash 中的 stash@{0} 抓下來,同時刪除 stash@{0}
git stash pop stash@{0}

# 刪除 stash 中的 stash@{0}
git stash drop stash@{0}

切到遠端 branch

情境: 小菜有將 river_branch 上傳, Louis 要接手處理 (或一同開發)

1
2
git pull
git checkout river_branch

強制覆蓋遠端 branch

1
git push -f

備註: 多人協作同 branch 的話,不建議這麼做,會被同事追殺

多人協作同 branch,要 push 時,發現上面有新的 commit 時

每個人開發速度不一樣,有的人比較快,有的會比較慢,
當要 push 發現上面已經有新的 commit 時,可用以下指令

1
git pull --rebase

備註: 可能會有 conflict (檔案衝突),與對方確認哪些需保留,Local 解完衝突後,便能 git push

用圖形化方式看 log 資訊

1
git log --oneline --all --graph

備註: --oneline--all--grpah 這三個參數的放置沒有差

示意圖

Local 和 remote 皆增加 tag

假如: remote name 為 origin,default branch 為 master
情境: 將最新 remote 的 master 增加標籤 (tag)

1
2
3
4
git checkout master
git pull
git tag 20200913
git push origin --tags

動作說明:

  1. 先切到 Local master
  2. 將最新資料 pull 到 Local
  3. 在 Local master 增加 tag
  4. 將 tag 上傳到 remote origin

查看兩個 tag 或 commit 間增加了哪些 pr

1
2
3
4
5
6
7
8
git log old_tag_name..new_tag_name --pretty='%s' --reverse

# 範例
# GitHub repo 設定中的 Allow merge commits 有打勾
git log 20200909..20200909-1 --pretty='%s' --reverse

# GitHub repo 設定中的 Allow merge commits 沒打勾
git log 20200909-3..20200909-4 --pretty='%s' --reverse

GitHub repo 設定

範例圖 (Allow merge commits 有無打勾一次看)

查看兩個 commit 間所有檔案的差異 (diff)

1
2
3
4
git diff commit1..commit2

# 範例
git diff 57cb9613c..77b628f47

commit 後想反悔 (恢復上一洞)

1
2
3
4
git reset HEAD^

# 想還原 11 次的話
git reset HEAD~11

撿別的 commit 過來使用

1
git cherry-pick commit

超重要小技巧: 可透過 git cherry-pick -h 的方式,看有哪些參數,絕大部分指令皆能透過此技巧查詢參數或透過 tldr git cherry-pick 的方式看範例

整理自己 branch 的 commit

1
2
3
# rebase 互動模式很好用,網路已有詳細文章可參考

rebase -i commit

一定要知道的

平常不太會用到,需要時,卻很重要的存在

1
2
3
4
5
git reflog

# 搭配之前所學,可用合體技搜尋 (若不清楚,可看 Linux 系列的文章)
git reflog | rg 'HEAD@'
git reflog >> demo.log

小結

會把一些常用指令設定 alias,像是把 status 設定成 sbranch 設定成 b ...等,依照自己常輸入指令設定,可以省下不少時間

多善用 -htldr 看下有哪些參數、範例,搭配實作,會更快上手喔

參考資料

  1. Git-Book
  2. 為你自己學 Git
  3. 30 天精通 Git 版本控管

鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10238939
medium 文章連結:https://link.medium.com/Mmx5PSNfR9
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

原文連結:https://riverye.com/2020/09/18/Day13-一些-Git-指令/

發表日期:2020-09-18

更新日期:2020-09-27

CATALOG
  1. 1. 前言
  2. 2. 本篇以此 repo 為範例
  3. 3. 查詢 remote 名稱和 URL
    1. 3.0.1. 超重要小技巧: 可透過 git remote -h 的方式,看有哪些參數,絕大部分指令皆能透過此技巧查詢參數或透過 tldr git remote 的方式看範例
  • 4. 從既有 branch 建立新的 branch 並切到新的 branch
  • 5. 將既有 branch 移動到別的 branch 的位置
  • 6. 事情做到一半,突然要切到不同 branch 處理時
  • 7. 切到遠端 branch
  • 8. 強制覆蓋遠端 branch
  • 9. 多人協作同 branch,要 push 時,發現上面有新的 commit 時
  • 10. 用圖形化方式看 log 資訊
    1. 10.0.1. 示意圖
  • 11. Local 和 remote 皆增加 tag
    1. 11.0.1. 動作說明:
  • 12. 查看兩個 tag 或 commit 間增加了哪些 pr
    1. 12.0.1. GitHub repo 設定
    2. 12.0.2. 範例圖 (Allow merge commits 有無打勾一次看)
  • 13. 查看兩個 commit 間所有檔案的差異 (diff)
  • 14. commit 後想反悔 (恢復上一洞)
  • 15. 撿別的 commit 過來使用
    1. 15.0.1. 超重要小技巧: 可透過 git cherry-pick -h 的方式,看有哪些參數,絕大部分指令皆能透過此技巧查詢參數或透過 tldr git cherry-pick 的方式看範例
  • 16. 整理自己 branch 的 commit
  • 17. 一定要知道的
  • 18. 小結
  • 19. 參考資料