看完這篇還不會用Git,那我就哭了!

你使用過 Git 嗎?也許你已經使用了一段時間,但它的許多奧祕仍然使人困惑。git

Git 是一個版本控制系統,是任何軟件開發項目中的主要內容。一般有兩個主要用途:代碼備份和代碼版本控制。你能夠逐步處理代碼,在須要回滾到備份副本的過程當中保存每一步的進度!github

常見的問題是 Git 很難使用。有時版本和分支不一樣步,你會花很長時間試圖推送代碼!更糟糕的是,不知道某些命令的確切工做方式很容易致使意外刪除或覆蓋部分代碼!shell

這就是我寫本文的緣由,從而學習到如何正確使用 Git,以便在開發中共同進行編碼!segmentfault

安裝和配置

Git 安裝

首先,咱們必須安裝 Git 才能使用它!這裏分 Linux 和 Windows 來演示:服務器

在 Linux 上安裝 Git框架

咱們可使用 yum 輕鬆快速地作到這一點:編輯器

sudo yum install git

在 Windows 上安裝 Git學習

直接在 https://git-scm.com/downloads 裏面,下載最新版的 Git,默認安裝就能夠了。ui

安裝完成後,在開始菜單裏找到 Git->Git Bash,點擊後出現一個相似命令行窗口的東西,就說明 Git 安裝成功。this

Git 配置

能夠保存 Git 用戶名和電子郵件,這樣就沒必要在之後的 Git 命令中再次輸入它們。

在命令行中配置本地倉庫的帳號和郵箱:

$ git config --global user.name "wupx"  
$ git config --global user.email "wupx@qq.com"

好多人都不知道的小技巧是,你能夠爲 Git 啓用一些額外的顏色,這樣就能夠更容易地閱讀命令的輸出!

git config --global color.ui true

Git 基本版本控制

初始化 Git

如今,咱們能夠開始對項目進行版本控制。使用 cd 命令導航到要在終端中設置版本控制的目錄,如今你能夠像這樣初始化 Git 存儲庫:

git init

這將建立一個名爲 .git 的新子目錄(Windows 下該目錄爲隱藏的),其中包含全部必需的存儲庫文件(Git 存儲庫框架)。至此,你的項目中還沒有跟蹤任何內容。

添加並提交

要開始對現有文件進行版本控制,你應該先跟蹤這些文件並進行初始提交。要作到這一點,你首先須要將文件添加到 Git 中,並將它們附加到 Git 項目中。

git add <file>
git commit -m 'first commit'

遠程備份

很棒!你如今已經開始在本地對項目進行版本控制。若是你想遠程保存和備份項目,則須要在 GitHub 上建立一個遠程存儲庫(它是免費的!)。所以,首先轉到 github.com 並建立一個存儲庫。而後,使用存儲庫的連接將其添加爲本地 git 項目的來源,即該代碼的存儲位置。

# 示例
git remote add origin \
https://github.com/wupeixuan/repo.git 
# 以個人一個倉庫爲例
git remote add origin \
https://github.com/wupeixuan/JDKSourceCode1.8.git

而後,你能夠繼續將代碼推送到 GitHub!哇,你已經成功備份了你的代碼!

git push origin master

處理文件

狀態檢查

git status 命令用於肯定哪些文件處於哪一種狀態,它使你能夠查看哪些文件已提交,哪些文件還沒有提交。若是在全部文件都已提交併推送後運行此命令,則應該看到相似如下內容:

$ git status
# On branch master
nothing to commit (working directory clean)

若是你將新文件添加到項目中,而該文件以前不存在,則在運行 git status 時,你應該看到未跟蹤的文件,以下所示:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   README
nothing added to commit but untracked files present (use "git add" to track)

使用 git status 對於快速檢查你已經備份的內容和你僅在本地擁有的內容很是有用。

高級文件添加

還有一些更高級的方法能夠將文件添加到 Git 中,從而使你的工做流程更高效。咱們能夠執行如下操做,而不是試圖查找全部有更改的文件並逐個添加它們:

# 逐個添加文件
git add filename

# 添加當前目錄中的全部文件
git add -A

# 添加當前目錄中的全部文件更改
git add .

# 選擇要添加的更改(你能夠 Y 或 N 完成全部更改)
git add -p

高級提交

咱們可使用 git commit -m '提交信息' 來將文件提交到 Git。對於提交簡短消息來講,這一切都很好,可是若是你想作一些更精細的事情,你須要來學習更多的操做:

### 提交暫存文件,一般用於較短的提交消息
git commit -m 'commit message'

### 添加文件並提交一次
git commit filename -m 'commit message'

### 添加文件並提交暫存文件
git commit -am 'insert commit message'

### 更改你的最新提交消息
git commit --amend 'new commit message' 

# 將一系列提交合併爲一個提交,你可能會用它來組織混亂的提交歷史記錄
git rebase -i
### 這將爲你提供核心編輯器上的界面:
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell

分支與合併

GitHub存儲庫的master分支應始終包含有效且穩定的代碼。可是,你可能還但願備份一些當前正在處理的代碼,但這些代碼並不徹底穩定。也許你要添加一個新功能,你正在嘗試和破壞不少代碼,可是你仍然但願保留備份以保存進度!

分支使你能夠在不影響master分支的狀況下處理代碼的單獨副本。首次建立分支時,將以新名稱建立master分支的完整克隆。而後,你能夠獨立地在此新分支中修改代碼,包括提交文件等。一旦你的新功能已徹底集成而且代碼穩定,就能夠將其合併到master分支中!

分支

這是你在分支上建立和工做所需的全部東西:

### 建立一個本地分支
git checkout -b branchname

### 在2個分支之間切換
git checkout prc/dev-wupx
git checkout master

### 將新的本地分支做爲備份
git push -u origin branch_2

### 刪除本地分支,這不會讓你刪除還沒有合併的分支
git branch -d branch_2

### 刪除本地分支,即便還沒有合併,這也會刪除該分支!
git branch -D branch_2

### Viewing all current branches for the repository, including both ### local and remote branches. Great to see if you already have a ### branch for a particular feature addition, especially on bigger ### projects
### 查看存儲庫的全部當前分支,包括本地和遠程分支。
git branch -a

### 查看已合併到您當前分支中的全部分支,包括本地和遠程。 很是適合查看全部代碼的來源!
git branch -a --merged

### 查看還沒有合併到當前分支中的全部分支,包括本地和遠程
git branch -a --no-merged

### 查看全部本地分支
git branch

### 查看全部遠程分支
git branch -r

# 將主分支從新設置爲本地分支
$ git rebase origin/master

# 將分支推送到遠程存儲庫源並對其進行跟蹤
$ git push origin branchname

合併

很棒!如今,你已經學習瞭如何建立分支並開始敲代碼!將新功能添加到分支中以後,你須要將其合併回master分支,以便您的master具備全部最新的代碼功能。

方法以下:

### 首先確保你正在查看 master 分支
git checkout master

### 如今將你的分支合併到 master 
git merge prc/dev-wupx

你可能必須修復分支與主服務器之間的任何代碼衝突,可是 Git 將向你展現在鍵入該 merge 命令後如何執行全部這些操做。

修復錯誤和回溯

發生錯誤......它們常常在編碼中發生!重要的是咱們可以修復它們。

不要慌!Git 提供了你所需的一切,以防你在所推送的代碼中犯錯,改寫某些內容或者只是想對所推送的內容進行更正。

### 切換到最新提交的代碼版本
git reset HEAD 
git reset HEAD -- filename # for a specific file
### 切換到最新提交以前的代碼版本
git reset HEAD^ -- filename
git reset HEAD^ -- filename # for a specific file
### 切換回3或5次提交
git reset HEAD~3 -- filename
git reset HEAD~3 -- filename # for a specific file
git reset HEAD~5 -- filename
git reset HEAD~5 -- filename # for a specific file
### 切換回特定的提交,其中 0766c053 爲提交 ID
git reset 0766c053 -- filename
git reset 0766c053 -- filename # for a specific file
### 先前的命令是所謂的軟重置。 你的代碼已重置,可是git仍會保留其餘代碼的副本,以備你須要時使用。 另外一方面,--hard 標誌告訴Git覆蓋工做目錄中的全部更改。
git reset --hard 0766c053

對 Git 有用的提示和技巧

咱們已經完成了全部細節部分!如下是一些 Git 提示和技巧,你可能會發現它們對改善工做流程很是有用!

搜索

### 搜索目錄中的字符串部分
git grep 'project'

### 在目錄中搜索部分字符串,-n 打印出 git 找到匹配項的行號
git grep -n 'project'

### git grep -C <行數> 'something' 搜索帶有某些上下文的字符串部分(某些行在咱們正在尋找的字符串以前和以後)
git grep -C<number of lines> 'project'

### 搜索字符串的一部分,並在字符串以前顯示行
git grep -B<number of lines> 'project'

### 搜索字符串的一部分,並在字符串以後顯示行
git grep -A<number of lines> 'something'

看誰寫了什麼

### 顯示帶有做者姓名的文件的更改歷史記錄
git blame 'filename'

### 顯示帶有做者姓名和 git commit ID 的文件的更改歷史記錄
git blame 'filename' -l

日誌

### 顯示存儲庫中全部提交的列表 該命令顯示有關提交的全部信息,例如提交ID,做者,日期和提交消息
git log

### 提交列表僅顯示提交消息和更改
git log -p

### 包含您要查找的特定字符串的提交列表
git log -S 'project'

### 做者提交的清單
git log --author 'wupx'

### 顯示存儲庫中提交列表的摘要。顯示提交ID和提交消息的較短版本。
git log --oneline

### 顯示昨天以來倉庫中的提交列表
git log --since=yesterday

### 顯示做者日誌,並在提交消息中搜索特定術語
git log --grep "project" --author "wupx"

相關文章
相關標籤/搜索