Git Cheat Sheet 中文版

Gevin發表於2019-03-03

本文內容來自我fork 並翻譯的GitHub repo Git-Cheat-Sheet,如果內容有誤或有新內容補充,歡迎大家給我發issue

Other Available Languages:

  1. Arabic Git Cheat Sheet
  2. English Git Cheat Sheet
  3. Hindi Git Cheat Sheet
  4. Turkish Git Cheat Sheet
  5. 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複製程式碼
完成新特性的開發:

完成開發新特性。這個動作執行下面的操作:

  1. 合併 MYFEATURE 分支到 'develop'
  2. 刪除這個新特性分支
  3. 切換回 '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 分支操作。它執行下面幾個動作:

  1. 歸併 release 分支到 'master' 分支。
  2. 用 release 分支名打 Tag
  3. 歸併 release 分支到 'develop'
  4. 移除 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複製程式碼

Commands

Git Cheat Sheet 中文版
git-flow-commands


Git flow schema

Git Cheat Sheet 中文版
Git flow schema

相關文章