本文內容來自我fork 並翻譯的GitHub repo Git-Cheat-Sheet,如果內容有誤或有新內容補充,歡迎大家給我發issue。
Other Available Languages:
- Arabic Git Cheat Sheet
- English Git Cheat Sheet
- Hindi Git Cheat Sheet
- Turkish Git Cheat Sheet
- Spanish Git Cheat Sheet
Git cheat sheet 讓你不用再去記所有的git命令。
歡迎貢獻內容、修正語法錯誤,也歡迎新增你母語版本的Git cheat sheet。
索引
配置
列出當前配置:
$ git config --list複製程式碼
列出repository配置:
$ git config --local --list複製程式碼
列出全域性配置:
$ git config --global --list複製程式碼
列出系統配置:
$ git config --system --list複製程式碼
設定使用者名稱:
$ git config --global user.name “[firstname lastname]”複製程式碼
設定使用者郵箱:
$ git config --global user.email “[valid-email]”複製程式碼
設定git命令輸出為彩色:
$ git config --global color.ui auto複製程式碼
設定git使用的文字編輯器設:
$ git config --global core.editor vi複製程式碼
配置檔案
Repository配置對應的配置檔案路徑[--local]:
<repo>/.git/config複製程式碼
使用者全域性配置對應的配置檔案路徑[--global]:
~/.gitconfig複製程式碼
系統配置對應的配置檔案路徑[--local]:
/etc/gitconfig複製程式碼
建立
複製一個已建立的倉庫:
# 通過 SSH
$ git clone ssh://user@domain.com/repo.git
#通過 HTTP
$ git clone http://domain.com/user/repo.git複製程式碼
建立一個新的本地倉庫:
$ git init複製程式碼
本地修改
顯示工作路徑下已修改的檔案:
$ git status複製程式碼
顯示與上次提交版本檔案的不同:
$ git diff複製程式碼
把當前所有修改新增到下次提交中:
$ git add .複製程式碼
把對某個檔案的修改新增到下次提交中:
$ git add -p <file>複製程式碼
提交本地的所有修改:
$ git commit -a複製程式碼
提交之前已標記的變化:
$ git commit複製程式碼
附加訊息提交:
$ git commit -m 'message here'複製程式碼
提交,並將提交時間設定為之前的某個日期:
git commit --date="`date --date='n day ago'`" -am "Commit Message"複製程式碼
修改上次提交
請勿修改已釋出的提交記錄!
$ git commit --amend複製程式碼
修改上次提交的committer date:
GIT_COMMITTER_DATE="date" git commit --amend複製程式碼
修改上次提交的author date:
git commit --amend --date="date"複製程式碼
把當前分支中未提交的修改移動到其他分支:
git stash
git checkout branch2
git stash pop複製程式碼
將 stashed changes 應用到當前分支:
git stash apply複製程式碼
刪除最新一次的 stashed changes:
git stash drop複製程式碼
搜尋
從當前目錄的所有檔案中查詢文字內容:
$ git grep "Hello"複製程式碼
在某一版本中搜尋文字:
$ git grep "Hello" v2.5複製程式碼
提交歷史
從最新提交開始,顯示所有的提交記錄(顯示hash, 作者資訊,提交的標題和時間):
$ git log複製程式碼
顯示所有提交(僅顯示提交的hash和message):
$ git log --oneline複製程式碼
顯示某個使用者的所有提交:
$ git log --author="username"複製程式碼
顯示某個檔案的所有修改:
$ git log -p <file>複製程式碼
僅顯示遠端分支與遠端分支提交記錄的差集:
$ git log --oneline <origin/master>..<remote/master> --left-right複製程式碼
誰,在什麼時間,修改了檔案的什麼內容:
$ git blame <file>複製程式碼
顯示reflog:
$ git reflog show複製程式碼
刪除reflog:
$ git reflog delete複製程式碼
分支與標籤
列出所有的分支:
$ git branch複製程式碼
列出所有的遠端分支:
$ git branch -r複製程式碼
切換分支:
$ git checkout <branch>複製程式碼
建立並切換到新分支:
$ git checkout -b <branch>複製程式碼
基於當前分支建立新分支:
$ git branch <new-branch>複製程式碼
基於遠端分支建立新的可追溯的分支:
$ git branch --track <new-branch> <remote-branch>複製程式碼
刪除本地分支:
$ git branch -d <branch>複製程式碼
強制刪除一個本地分支:
將會丟失未合併的修改!
$ git branch -D <branch>複製程式碼
給當前版本打標籤:
$ git tag <tag-name>複製程式碼
給當前版本打標籤並附加訊息:
$ git tag -a <tag-name>複製程式碼
更新與釋出
列出當前配置的遠端端:
$ git remote -v複製程式碼
顯示遠端端的資訊:
$ git remote show <remote>複製程式碼
新增新的遠端端:
$ git remote add <remote> <url>複製程式碼
下載遠端端版本,但不合併到HEAD中:
$ git fetch <remote>複製程式碼
下載遠端端版本,並自動與HEAD版本合併:
$ git remote pull <remote> <url>複製程式碼
將遠端端版本合併到本地版本中:
$ git pull origin master複製程式碼
以rebase方式將遠端分支與本地合併:
git pull --rebase <remote> <branch>複製程式碼
將本地版本釋出到遠端端:
$ git push remote <remote> <branch>複製程式碼
刪除遠端端分支:
$ git push <remote> :<branch> (since Git v1.5.0)
# or
git push <remote> --delete <branch> (since Git v1.7.0)複製程式碼
釋出標籤:
$ git push --tags複製程式碼
合併與重置(Rebase)
將分支合併到當前HEAD中:
$ git merge <branch>複製程式碼
將當前HEAD版本重置到分支中:
請勿重置已釋出的提交!
$ git rebase <branch>複製程式碼
退出重置:
$ git rebase --abort複製程式碼
解決衝突後繼續重置:
$ git rebase --continue複製程式碼
使用配置好的merge tool 解決衝突:
$ git mergetool複製程式碼
在編輯器中手動解決衝突後,標記檔案為已解決衝突
:
$ git add <resolved-file>
$ git rm <resolved-file>複製程式碼
合併提交:
$ git rebase -i <commit-just-before-first>複製程式碼
把上面的內容替換為下面的內容:
原內容:
pick <commit_id>
pick <commit_id2>
pick <commit_id3>複製程式碼
替換為:
pick <commit_id>
squash <commit_id2>
squash <commit_id3>複製程式碼
撤銷
放棄工作目錄下的所有修改:
$ git reset --hard HEAD複製程式碼
移除快取區的所有檔案(i.e. 撤銷上次git add
):
$ git reset HEAD複製程式碼
放棄某個檔案的所有本地修改:
$ git checkout HEAD <file>複製程式碼
重置一個提交(通過建立一個截然不同的新提交)
$ git revert <commit>複製程式碼
將HEAD重置到指定的版本,並拋棄該版本之後的所有修改:
$ git reset --hard <commit>複製程式碼
用遠端分支強制覆蓋本地分支:
git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature複製程式碼
將HEAD重置到上一次提交的版本,並將之後的修改標記為未新增到快取區的修改:
$ git reset <commit>複製程式碼
將HEAD重置到上一次提交的版本,並保留未提交的本地修改:
$ git reset --keep <commit>複製程式碼
刪除新增.gitignore
檔案前錯誤提交的檔案:
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"複製程式碼
Git-Flow
索引
安裝
- 你需要有一個可以工作的 git 作為前提。
- Git flow 可以工作在 OSX, Linux 和 Windows之下
OSX Homebrew:
$ brew install git-flow複製程式碼
OSX Macports:
$ port install git-flow複製程式碼
Linux:
$ apt-get install git-flow複製程式碼
Windows (Cygwin):
安裝 git-flow, 你需要 wget 和 util-linux。
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash複製程式碼
開始
- 為了自定義你的專案,Git flow 需要初始化過程。
- 使用 git-flow,從初始化一個現有的 git 庫內開始。
- 初始化,你必須回答幾個關於分支的命名約定的問題。建議使用預設值。
git flow init複製程式碼
特性
- 為即將釋出的版本開發新功能特性。
- 這通常只存在開發者的庫中。
建立一個新特性:
下面操作建立了一個新的feature分支,並切換到該分支
git flow feature start MYFEATURE複製程式碼
完成新特性的開發:
完成開發新特性。這個動作執行下面的操作:
- 合併 MYFEATURE 分支到 'develop'
- 刪除這個新特性分支
- 切換回 'develop' 分支
git flow feature finish MYFEATURE複製程式碼
釋出新特性:
你是否合作開發一項新特性?
釋出新特性分支到遠端伺服器,所以,其它使用者也可以使用這分支。
git flow feature publish MYFEATURE複製程式碼
取得一個釋出的新特性分支:
取得其它使用者釋出的新特性分支。
git flow feature pull origin MYFEATURE複製程式碼
追溯遠端上的特性:
通過下面命令追溯遠端上的特性
git flow feature track MYFEATURE複製程式碼
做一個release版本
- 支援一個新的用於生產環境的釋出版本。
- 允許修正小問題,併為釋出版本準備後設資料。
開始建立release版本:
- 開始建立release版本,使用 git flow release 命令。
- 'release' 分支的建立基於 'develop' 分支。
- 你可以選擇提供一個 [BASE]引數,即提交記錄的 sha-1 hash 值,來開啟動 release 分支。
- 這個提交記錄的 sha-1 hash 值必須是'develop' 分支下的。
git flow release start RELEASE [BASE]複製程式碼
建立 release 分支之後立即釋出允許其它使用者向這個 release 分支提交內容是個明智的做法。命令十分類似釋出新特性:
git flow release publish RELEASE複製程式碼
(你可以通過git flow release track RELEASE
命令追溯遠端的 release 版本)
完成 release 版本:
完成 release 版本是一個大 git 分支操作。它執行下面幾個動作:
- 歸併 release 分支到 'master' 分支。
- 用 release 分支名打 Tag
- 歸併 release 分支到 'develop'
- 移除 release 分支。
git flow release finish RELEASE複製程式碼
不要忘記使用git push --tags
將tags推送到遠端
緊急修復
緊急修復來自這樣的需求:生產環境的版本處於一個不預期狀態,需要立即修正。有可能是需要修正 master 分支上某個 TAG 標記的生產版本。
開始 git flow 緊急修復:
像其它 git flow 命令一樣, 緊急修復分支開始自:
$ git flow hotfix start VERSION [BASENAME]複製程式碼
VERSION 引數標記著修正版本。你可以從 [BASENAME]開始,
[BASENAME]`為finish release時填寫的版本號
完成緊急修復:
當完成緊急修復分支,程式碼歸併回 develop 和 master 分支。相應地,master 分支打上修正版本的 TAG。
git flow hotfix finish VERSION複製程式碼