常用 Git 命令列操作

2022-12-31 12:01:17

本文記錄了一些常用 Git 命令列操作的具體使用方式

git clone

  • git clone REPOSITORY_URL
    拉取倉庫,並使用倉庫名作為本地檔名

  • git clone REPOSITORY_URL FOLDER
    拉取倉庫,並使用 FOLDER 作為本地檔名

git fetch

  • git fetch origin
    更新所有遠端分支

  • git fetch origin BRACH
    更新指定遠端分支

git pull

  • git pull origin
    相當於 fetch + merge 對應的上游分支

  • git pull origin BRACH
    拉取指定分支到當前分支

  • git pull origin --rebase master
    讓本地分支重新基於遠端的 master 分支

git push

  • git push origin
    把分支推到遠端對應的上游分支

  • git push origin BRANCH
    把分支推到遠端對應的分支

  • git push --set-upstream origin BRANCH
    把分支推到遠端對應的分支,並將其設為上游分支(一般第一次提交自己的開發分支需要用到)

  • git push -f origin
    把分支強推到遠端對應的上游分支(會覆蓋遠端分支,需要慎用)

  • git push origin -d BRANCH
    刪除遠端分支

git branch

  • git branch
    列出本地所有分支

  • git branch -a
    列出本地和遠端分支

  • git branch -m NEW_BRANCH
    更新當前分支名

  • git branch -d BRANCH
    刪除已合併的分支

  • git branch -D BRANCH
    強制刪除分支(即使未合併)

git checkout

  • git checkout BRANCH
    切到對應分支

  • git checkout -b NEW_BRANCH
    建立新分支

  • git checkout -b NEW_BRANCH BRANCH
    基於 BRANCH 建立新分支

  • git checkout SHA-1
    切換到某個提交,也可以用 HEAD~N(N 為 1, 2, 3…)切到上 N 個提交

  • git checkout SHA-1 /PATH/TO/FILE
    把檔案還原到相應的提交版本

  • git checkout —-theirs /PATH/TO/FILE
    有衝突時使用對方的檔案版本

  • git checkout --ours /PATH/TO/FILE
    有衝突時使用自己的檔案版本

  • git checkout -
    切換到之前的分支,適合在兩個分支頻繁切換時使用

git add

  • git add .
    把所有增加/修改/刪除的檔案標識為要提交

  • git add /PATH/TO/FILE
    只把單一檔案標識為要提交,當有其他不需要提交的檔案被修改時可使用

git commit

  • git commit
    git add 標識的檔案進行提交

  • git commit -a
    把修改/刪除的檔案進行提交(如果有新增的檔案,需要使用 git add 新增)

  • git commit -am "MESSAGE"
    把修改/刪除的檔案進行提交併指定註釋(適用於臨時或簡單註釋內容)

  • git commit --amend
    更新上一次提交,可以加上 -a 或在之前執行 git add 追加更新檔案

  • git commit --amend --reset-author
    預設的更新提交是不改變作者的,如果需要改變可以明確設定

git cherry-pick

  • git cherry-pick SHA-1
    把某個提交應用到當前分支

git status

  • git status
    檢視目前狀態

git diff

  • git diff
    當前所有修改到的,沒被標識為要提交的檔案的更新內容

  • git diff --cache
    當前所有修改到的,並被標識為要提交的檔案的更新內容

  • git diff /PATH/TO/FILE
    指定檔案的更新內容,同樣可以用 --cache 區分

git log

  • git log
    詳細顯示所有記錄

  • git log -n 10
    顯示最近 10 條記錄

  • git log --oneline
    簡要顯示所有記錄

  • git log --oneline master ^BRANCH | wc -l
    可以計算 BRANCH 和 master 分支相差多少個提交

git stash

  • git stash
    暫存修改/刪除,或已標識為要 commit 的新增的檔案

  • git stash -u
    暫存修改/刪除/新增的檔案,即新增檔案可以不用 git add

  • git stash pop
    把暫存的檔案重新放出來

git revert

  • git revert SHA-1
    通過形成一個新提交取消某個提交

  • git revert SHA-1 -m 1
    如果是合併節點,需要指定要取消提交對應的父節點
    例如合併是把 BRANCH_2 合併到 BRANCH_1,那麼要在 BRANCH_1 取消這次合併,就應該指定 m 為 1(大多數情況都是這樣)

git reset

  • git reset
    取消對要 commit 的檔案的標識(相當於 git add 的復原)

  • git reset --hard
    取消修改/刪除或已標識為要 commit 的新增的檔案的更新

  • git reset SHA-1
    取消從 SHA-1 之後的所有提交,但是保留提交檔案的更新
    如果只想取消上一次提交,SHA-1 可以設為 HEAD^

  • git reset --hard SHA-1
    取消從 SHA-1 之後的所有提交,而且不保留提交檔案的更新

git rebase

  • git rebase BRANCH
    讓當前分支重新基於 BRANCH

  • git rebase -i SHA-1
    更新 SHA-1 以後的提交,可以 pick/pedit/edrop/dsquash/s 相應提交
    如果第一個提交使用 p,後面的提交使用 s,可以把多個提交合併成一個提交

git merge

  • git merge BRANCH
    把 BRANCH 合併到當前分支,儘量不形成合並節點

  • git merge --no-ff BRANCH
    把 BRANCH 合併到當前分支,並確保形成合並節點

  • git merge --squash BRANCH
    把 BRANCH 和當前分支的變更作為標識為要提交的內容,需要執行 git commit 完成只有一個提交的合併

git update-index

  • git update-index --assume-unchanged /PATH/TO/FILE
    當某個檔案被臨時修改,但不想提交,也不適合放到 .gitignore,可以用此命令讓 git 不將其識別為已修改
    如果這個檔案是新增的,就不能用這個命令了,不過可以把檔案路徑加到 .git/info/exclude

  • git update-index --no-assume-unchanged /PATH/TO/FILE
    恢復以上檔案的修改識別