經常使用Git命令使用教程

0x00 寫在前面

如今大部分的開發團隊都以 Git 做爲本身的版本控制工具,須要對 Git 的使用很是的熟悉。這篇文章中本人整理了本身在開發過程當中常用到的 Git 命令,方便在偶爾忘記時速查。使用 GUI 工具的同窗,也能夠對照起來看看。git

經常使用 Git 命令使用教程

0x01 Git 配置

1. 在安裝完成 Git 後,開始正式使用前,是須要有一些全局設置的,如用戶名、郵箱。github

設置的主要命令是 git config:小程序

git config --global user.name "your name"      // 設置全局用戶名
git config --global user.email "your email"    // 設置郵箱

其中, --global 指定爲全局配置,不使用該參數,則爲當前所在倉庫配置。微信

2. 除了用戶名、郵箱以外,還有不少的配置能夠用來自定義 Git,如:網絡

git config --global color.ui true        // 讓 Git 顯示不一樣的顏色
git config core.ignorecase true            // 讓 Git 對倉庫中的文件大小寫敏感

3. 查看全部的已經作出的配置:app

git config -l

git config

0x02 基礎操做

1. 建立 Git 版本庫

在本地建立 Git 版本庫,須要使用 git init 命令。ssh

首先,你須要新建一個存放版本庫的目錄,而後進入到該目錄所在路徑,而後執行:ide

git init

而後查看目錄結構中,就能夠看到包含有 .git 子目錄,這就說明建立版本庫成功了。工具

git init

2. 將文件添加到版本庫

要將一個文件歸入到版本庫管理,首先要將其添加到暫存區(這裏不作深刻介紹),而後才能提交到倉庫中。fetch

2.1 將文件添加到暫存區,使用的是 git add

git add Readme.md        // 添加單個文件到暫存區
git add .                // 將當前目錄下全部修改添加到暫存區,除按照規則忽略的以外

注意:這邊空文件夾是不會被添加到暫存區中的。

git add

2.2 將暫存區中的文件,提交到倉庫中。須要使用 git commit

git commit        // 若是暫存區有文件,則將其中的文件提交到倉庫
git commit -m 'your comments'         // 帶評論提交,用於說明提交內容、變動、做用等

注意:這邊直接用 git commit 提交,會先彈出添加評論的頁面。

git commit

3. 查看倉庫的狀態

不論咱們是新建了文件,將文件加入暫存區,或者其餘的修改等等,咱們均可以經過:

git status

來隨時查看倉庫中文件的狀態。這個應該是使用 Git 作版本控制過程當中,我使用最多的一個命令。

4. 查看倉庫中的具體修改

很常常的,咱們對某個文件作了修改,但過不久就忘記了。這時候就能夠經過 git diff 來查看具體的修改內容。

git diff    // 查看版本庫中全部的改動
git diff Readme.md        // 查看具體文件的改動

git diff

5. 查看提交歷史記錄

有的時候,你會須要查看本身作過哪些提交,來回顧本身完成的部分。或者須要尋找某個具體的提交來查看當時的代碼。這裏須要用到:

git log     // 顯示全部提交的歷史記錄
git log --pretty=oneline    // 單行顯示提交歷史記錄的內容

git log 的輸出內容中,能夠看到每次提交的 ID,是一個 40 位的字符串。

git log

6. 版本回退

有了 git log 來查看提交的歷史記錄,咱們就能夠經過 git reset --hard 來回退到咱們須要的特定版本,而後使用當時的代碼進行各類操做。

git reset --hard HEAD^        // 回退到上一個提交版本
git reset --hard HEAD^^        // 回退到上上一個提交版本
git reset --hard 'commit_id'    // 會退到 commit_id 指定的提交版本

git reset --hard

7. 回到將來的某個提交

當退回到某個提交的版本之後,再經過 git log 是沒法顯示在這以後的提交信息的。可是,經過 git reflog 能夠獲取到操做命令的歷史。

所以,想要回到將來的某個提交,先經過 git reflog 從歷史命令中找到想要回到的提交版本的 ID,而後經過 git reset --hard 來切換。

git reflog
git reset --hard 'commit_id'

git reflog

8. 撤銷修改

撤銷修改一樣包括兩方面的內容,因爲倉庫中的文件在提交以前,可能在工做區中,還沒有在版本控制範圍內,也可能在暫存區中。

8.1 丟棄工做區中文件的修改

git checkout -- Readme.md    // 若是 Readme.md 文件在工做區,則丟棄其修改
git checkout -- .            // 丟棄當前目錄下全部工做區中文件的修改

注意: git checkout -- 中的 -- 是必須的。

git checkout --

8.2 丟棄已經進入暫存區的修改

git reset HEAD Readme.md     // 將 Readme.md 恢復到 HEAD 提交版本的狀態

git reset HEAD

9. 刪除文件

在文件未添加到暫存區以前,對想刪除文件能夠直接物理刪除。或者經過 git checkout -- file 來丟棄。若是文件已經被提交,則須要 git rm 來刪除:

git rm Readme.md     // 刪除已經被提交過的 Readme.md

注意: git rm 只能刪除已經提交到版本庫中的文件。其餘狀態的文件直接用這個命令操做是出錯的。

git rm

git rm 與 先 rm 而後 git add 的區別

rm and git add

更詳細的能夠參考:"git rm" 和 "rm" 的區別

注意:上圖中的結果是在 git 1.9.1 版本上的操做。在 git 2.0 以上二者沒有區別了。

0x03 分支管理

分支是版本控制系統中很重要的一個概念,在 Git 中新建、合併等分支的操做很是輕量便捷,所以咱們會很常常的用到。

1. 查看分支

查看分支使用 git branch

git branch        // 查看本地分支信息
git branch -v     // 查看相對詳細的本地分支信息
git branch -av     // 查看包括遠程倉庫在內的分支信息

注意:在 git branch 的輸出內容中,有一個分支,前面帶有 * 號,這標識咱們當前所在的分支。

2. 建立分支

當咱們要修復一個 Bug,或者開發一個新特性,甚至是在初學的時候怕打亂原來的代碼,均可以新建一個分支來避免對原來代碼的影響。

git branch dev    // 新建一個名稱爲 dev 的分支

3. 切換分支

當咱們建立完分支之後,咱們須要切換到新建的分支,不然,全部的修改,仍是在原來的分支上。事實上,全部的改動,只能影響到當前所在的分支。

git checkout dev    // 新建完 dev 分支之後,經過該命令切換到 dev 分支

4. 建立並切換分支

git checkout -b dev        // 新建 dev 分支,並切換到該分支上

這個命令合併了前兩個獨立的命令,日常使用中通常這樣使用。

5. 合併分支

當咱們修復完成一個 Bug,或者開發完成一個新特性,咱們就會把相關的 Bug 或者 特性的上修改合併回原來的主分支上,這時候就須要 git merge 來作分支的合併。

首先須要切換回最終要合併到的分支,如 master

git checkout master        // 切換回 master 分支
git merge dev            // 將 dev 分鐘中的修改合併回 master 分支

合併回主分支的時候,後面可能會面臨到衝突的問題。衝突的解決暫不在這裏說明。

6. 刪除分支

當以前建立的分支,完成了它的使命,如 Bug 修復完,分支合併之後,這個分支就不在須要了,就能夠刪除它。

git branch -d dev        // 刪除 dev 分支

0x04 遠程倉庫

上面的全部命令都是針對本地倉庫的操做。當咱們但願多我的來協做時,會將代碼發佈到一個統一的遠程倉庫,而後多我的在本地操做之後,在推送到遠程倉庫。其餘人協做時,須要先同步遠程倉庫的內容,再推送本身的修改。

1. 從遠程倉庫克隆

若是你本地沒有倉庫,但願從已有的遠程倉庫上覆制一份代碼,那麼你須要 git clone

git clone https://github.com/git/git.git     // 經過 https 協議,克隆 Github 上 git 倉庫的源碼
git clone linfuyan@github.com/git/git.git    // 經過 ssh 協議,克隆 Github 上 git 倉庫的源碼

注意: git clone 後面的倉庫地址,能夠支持多種協議,如 https, ssh 等。

2. 添加遠程倉庫

若是你已經有了一個本地倉庫,如以前建立的 git-guide,而後你打算將它發佈到遠程,供其餘人協做。那麼使用:

git remote add origin your_remote_git_repo        // 爲本地倉庫添加遠程倉庫

3. 推送本地的內容到遠程倉庫

當本地倉庫中,代碼完成提交,就須要將代碼等推送到遠程倉庫,這樣其餘協做人員能夠從遠程倉庫同步內容。

git push -u origin master // 第一次推送時使用,能夠簡化後面的推送或者拉取命令使用
git push origin master    // 將本地 master 分支推送到 origin 遠程分支

注意: git push -u origin master,第一次使用時,帶上 -u 參數,在將本地的 master 分支推送到遠程新的 master 分支的同時,還會把本地的 master 分支和遠程的 master 分支關聯起來。

4. 從遠程倉庫獲取最新內容

在多人協做過程當中,當本身完成了本地倉庫中的提交,想要向遠程倉庫推送前,須要先獲取到遠程倉庫的最新內容。

能夠經過 git fetchgit pull 來獲取遠程倉庫的內容。

git fetch origin master    
git pull origin master

git fetchgit pull 之間的區別:

  • git fetch 是僅僅獲取遠程倉庫的更新內容,並不會自動作合併。
  • git pull 在獲取遠程倉庫的內容後,會自動作合併,能夠當作 git fetch 以後 git merge

注意:建議多使用 git fetch

5. 查看遠程倉庫信息

git remote [-v]        // 顯示遠程倉庫信息

6. 創建本地分支和遠程分支的關聯

在本地倉庫中的分支和遠程倉庫中的分支是對應的。通常狀況下,遠程倉庫中的分支名稱和本地倉庫中的分支名稱是一致的。

有的時候,咱們會須要指定本地分支與遠程分支的關聯。

git branch --set-upstream 'local_branch' origin/remote_branch

7. 修改本地倉庫對應的遠程倉庫地址

當遠程的倉庫地址發生變化時,須要修改本地倉庫對應的遠程倉庫的地址。主要應用在工程遷移過程當中。

git remote set-url origin url

0x05 標籤管理

在項目開發過程當中,當一個版本發佈完成時,是須要對代碼打上標籤,便於後續檢索。獲取處於其餘的緣由,須要對某個提交打上特定的標籤。

1. 建立標籤

git tag -a 'tagname' -m 'comment' 'commit_id'

-a 參數指定標籤名, -m 添加備註信息, 'commit_id' 指定打標籤的提交。

2. 查看全部標籤

git tag        // 查看本地倉庫中的全部標籤

3. 查看具體標籤信息

git show tagname

4. 刪除本地標籤

若是打的標籤出錯,或者不在須要某個標籤,則能夠刪除它。

git tag -d tagname

5. 刪除遠程標籤

git push origin :refs/tags/tagname

git push origin --delete tagname

git push origin :tagname

6. 推送標籤到遠程倉庫

打完標籤之後,有須要推送到遠程倉庫。

6.1 推送單個標籤到遠程倉庫

git push origin tagname

6.2 一次性推送全部標籤到遠程倉庫。

git push origin --tags

0x06 進階操做

1. 臨時保存修改

在執行不少的 Git 操做的時候,是須要保持當前操做的倉庫/分支處於 clean 狀態,及沒有未提交的修改。如 git pullgit merge 等等,若是有未提交的修改,這些將沒法操做。

可是作這些事情的時候,你可能修改了比較多的代碼,卻又不想丟棄它。那麼,你須要把這些修改臨時保存起來,這就須要用到 git stash

1.1 臨時保存修改,這樣倉庫就能夠回到 clean 狀態。

git  stash        // 保存本地倉庫中的臨時修改。

注意:能夠屢次的 git stash 來保存不一樣的臨時修改。

1.2 查看臨時保存。當你臨時保存之後,後面仍是要取回來的,那它們在哪裏呢?

git stash list    // 顯示全部臨時修改

1.3 當咱們處理完其餘操做時,想要恢復臨時保存的修改。

git stash apply        // 恢復全部保存的臨時修改
git stash pop        // 恢復最近一次保存的臨時修改

1.4 或者,咱們後面以爲臨時保存不想要了,那能夠丟棄它。

git stash clear        // 丟棄全部保存的臨時修改

0x07 寫在最後

這些是我目前在項目中常常會用到的操做,這裏整理下來,能夠做爲一個手冊。對於 Git 的理解或者更多的解釋,並不在這裏體現。你們能夠參考其餘更多的資料。

文中的思惟導圖因爲從源文件導出成圖片以後會變得模糊,關注微信公衆號 ID: up2048,回覆「腦圖」能夠免費獲取思惟導圖源文件。

0x08 推薦閱讀

相關文章
相關標籤/搜索