1. 程式人生 > >Git使用總結(包含Git Bash和Git GUI的使用)

Git使用總結(包含Git Bash和Git GUI的使用)

Git總結

簡介

說明:下列文字性內容部分來自廖雪峰的網站,一部分來自公司實戰,一部分來自官方網站
版權宣告:本文為原創文章,未經允許不得轉載
部落格地址:http://blog.csdn.net/kevindgk

學習網址

1. http://www.liaoxuefeng.com/   Git的完整學習教程
2. https://git-for-windows.github.io/   windows上安裝msysgit,內部包含模擬環境和Git
3.如果英文不好,可以使用中文版,然後直接使用圖形化介面Git Gui,而不使用Git bash

其他學習網址:
https://blog.cnbluebox.com/blog/2014/04/15/gitlabde-shi-yong/
http://www.oschina.net/translate/10-tips-git-next-level

基本命令

初始化設定

配置本機的使用者名稱和Email地址

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

建立版本庫(倉庫)

版本庫又叫倉庫(repository),這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改、刪除都能被跟蹤。
在合適的位置直接滑鼠右鍵建立一個空目錄作為倉庫,然後從Git-Bash命令列進入到該目錄,或者也可以使用命令列建立空目錄,再進入到該空目錄中。  
以下給出建立並初始化git倉庫的程式碼:  
進入到倉庫的位置,我將倉庫放在了C:\Android\git-repositories目錄下,注意,使用cd命令進入到目錄中時,在Git-Bash中應該使用斜線”/”,  
而不是反斜線”\”  

$ cd C:/Android/git-repositories
$ mkdir new_repository_1           建立新的目錄
$ cd new_repository_1              進入到建立的目錄

使用init命令將當前目錄初始化為Git倉庫

$ git init
Initialized empty Git repository in C:/Android/git-repositories/new_repository_1/.git/
(顯示資訊意思為:初始化了一個空的Git倉庫,new_repository_1目錄下多了一個.git目錄,時用來管理版本庫的)

將資料提交到git倉庫(本地倉庫)

第一步:新增檔案

$ git add .        新增所有的檔案、資料夾
$ git add <file>   新增指定名稱的檔案,<>內部寫檔案全稱
注:如果檔案沒有做出任何修改,則預設不會新增任何檔案

第二步:提交檔案

$ git commit –m “commit info”      提交本次事務,即將add的檔案提交到git倉庫,引號內部表示本次提交的提示資訊

查詢提交狀態

$ git status       顯示提交的狀態:已經新增,等待提交事務的檔案(綠色字體表示);已經改變但是沒有新增(not staged)的檔案(紅色字體表示);

查詢該檔案和git倉庫中的檔案的區別,即做了什麼修改

$ git diff <檔案全稱>      如果已經add了,就打印不出有什麼修改了,這一步驟應該在add之前,即新增之前可以用來看看做了什麼修改。

列印歷史記錄

$ git log
Commit xxx              commit id 版本號
Author:xxx<[email protected]> 提交人和郵箱
Date:xxx                提交的時間
    XXXXXXXXXXXXXX      提交的資訊(所以說,提交資訊很重要!!!)
$ cat <檔案全名稱>      顯示整個檔案的內容

版本回退

$ git reset --hard head^
在Git中,HEAD表示當前版本,就是最新提交的版本,即使用git log打印出來的位於第一位的版本,上一個版本就是HEAD^,上上個版本就是HEAD^^,  
當前向上100個可以寫成HEAD~100。當然,還有一種方式就是直接使用commit id來代替HEAD^,比如版本號是cadab353589f3eef075817b890dafe8b722d802b,  
那麼就可以直接使用命令:  
$ git reset --hard cadab353589f            使用前幾位表示即可,git會自動查詢  
注:版本回退以後,使用git log列印的歷史記錄都是回退版本之前的資料,之後的都沒有了,不過放心,git總有後悔藥可以吃噠~  
1.如果命令列視窗沒有關閉,直接去前面找commit id即可;  
2.如果命令列視窗關閉了,或者第二天後悔了,可以進入到該目錄下,使用git reflog命令來檢視以前的每一次命令,可以獲得每次提交的commit id,  
就可以版本回退了。  
$ git reflog                           可以檢視命令歷史,包含提交的commit id  

版本回退原理


簡單講,就是說只要進行了程式碼提交,git內部都會按照時間節點進行記錄,每條記錄都有commit id作為唯一標識(就像是連結串列每個節點都有唯一的地址一樣),HEAD總是指向當前版本(就像指標一樣)。所謂的版本回退,僅僅是講Head從當前版本指向了指定的版本,然後將工作區的檔案也修改了。

工作區和暫存區

Git和其他版本控制系統的一個不同之處就是有暫存區的概念。
- 工作區
就是電腦裡能看到的目錄,比如上面建立的C:\Android\git-repositories\new_repository_1資料夾就是一個工作區。
- 版本庫
工作區中有一個隱藏目錄.git,就是Git的版本庫,版本庫裡存放了很多的東西,其中最重要的就是state(或者叫index)的暫存區,  
還有Git為我們自動建立的第一個分支master,以及指向master的一個指標叫HEAD。

前面講到,將檔案存入到Git版本庫裡,分兩步執行:
第一步:用git add命令將工作區的修改檔案新增到暫存區;  (多次操作)


第二步:用git commit命令將暫存區的所有修改內容提交到當前分支。(事務提交,包含第一步多次操作,注意,不在暫存區的修改不會被commit)

一旦事務提交之後,如果對工作區沒有做什麼修改,那麼工作區就是乾淨的。
因為建立Git版本庫的時候,Git自動建立了一個master分支,所以現在git commit 就是往master分支上提交事務。
Eg:

專案開發實戰-**app

1.  需要安裝的軟體:msysgit
2.  需要申請的賬號:
2.1 公司GitLab賬號:向公司GitLab管理人員申請 – ***
2.2 專案GitLab許可權:向本專案的建立/管理人員申請 – 比如**app管理者 ***
3.  進入到GitBash命令列操作:

在合適的位置點選右鍵,選擇GitBash Here

本機地址為:C:\Android\git-repositories,自己建立的git倉庫地址

關閉證書驗證:原因是因為本公司伺服器證書已經過期,所以直接關閉證書驗證即可

$ git config --global http.sslVerify false     

使用克隆命令將遠端倉庫的程式碼複製一份到本地,注意此處應該用https訪問

$ git clone https://***.***.***.***/android/salestool.git
(輸入使用者名稱和密碼之後,將開始下載遠端倉庫,這裡僅僅下的是主分支-master)    

進入到專案,即從命令列進入已經下載下來的git倉庫,saletool/表示本專案的目錄名

$ cd salestool/

檢視倉庫的分支情況

$ git branch –a
顯示如下:
* master
  remotes/origin/HEAD -> origin/master      HEAD-遠端倉庫的當前分支是主分支
  remotes/origin/dev                        dev分支(所有操作都會合併到該分支)
  remotes/origin/master                 master分支-主分支

建立本地倉庫的dev分支

$ git checkout -b dev

將遠端倉庫的dev分支程式碼複製到本地dev分支

$ git pull origin dev
(由於公司伺服器比較慢,所以你懂得... ...)

以上操作如下圖所示:

檢視本地git倉庫狀態

$ git status
On branch dev       -只有一個本地dev分支(但是內容已經是遠端倉庫dev的內容了)
nothing to commit, working directory clean      -此時沒有任何修改,工作區很乾淨

檢視分支狀態

$ git branch –a
上面顯示的是本地分支,綠色字型和”*”表示的是當前所在的分支,
下面紅色部分顯示的是遠端倉庫的分支。

建立自己的本地分支,並切換到該分支,自己在此分支上寫程式碼

$ git checkout -b dai

此時開始在Android studio中對該專案進行程式設計~~~

將所有修改檔案提交到本地暫存區(staged),等待提交

$ git add .        注意:確保此時在自己的分支上進行操作,eg:dai(我自己的名字)
$ git commit –m “”     將本地暫存區的程式碼提交到自己的分支上

切換到本地dev分支,並將遠端倉庫的dev分支的最新程式碼拉下來

$ git checkout dev
$ git pull origin dev
(此時,本地倉庫的dev分支已經確保是最新的了)

切換到自己的分支,將dev分支合併到自己的分支上

$ git checkout dai
$ git merge dev        將本地dev分支合併到自己的分支上
注意:此時已經將dev分支合併到本地的自己的分支上了,有時候可能需要解決程式碼衝突問題,解決完畢後進行下面的操作。

如果有衝突,則需要再次進行add,commit操作。

解決衝突完畢後,切換到本地dev分支,將合併完畢的自己的分支合併到本地dev

$ git checkout dev
$ git merge dai


以上操作的程式碼如下:

接下來的操作,就是將本地dev分支推到遠端倉庫的dev分支上了... ...

推送到遠端伺服器

$ git push origin dev

git進階

其他命令

1.  git remote –v   顯示遠端分支的名稱和url

忽略檔案

    有一些檔案並不能上傳到git上。
1.Android Studio自動生成配置檔案:不能上傳到git上,否則的話,如果你的同事下載下來,但是它的studio(gradle)版本和你的不一樣,  
或者其他配置的各種路徑不一樣,就需要重建專案,嚴重的話,根本無法重建專案,一片爆紅!網上的方法也解決不了。
2.儲存了資料庫密碼或者什麼不能上傳的檔案;
。。。
所以需要在專案的根目錄下建立一個名稱為.gitignore檔案,然後把要忽略的檔名填進去,Git就會自動忽略這些檔案。  
不需要從頭寫.gitignore檔案,GitHub已經為我們準備了各種配置檔案,只需要組合一下就可以使用了。

忽略檔案的原則是:
1.忽略作業系統自動生成的檔案,比如縮圖等;
2.忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,  
比如Java編譯產生的.class檔案;
3.忽略你自己的帶有敏感資訊的配置檔案,比如存放口令的配置檔案。

想知道忽略那些檔案嗎,很簡單,找個大神的github,看看他的專案中怎麼寫的,就ok了!!!
例如,下面是我從張鴻祥哪裡copy的,僅做參考:
/captures

# Built application files
*.apk
*.ap_

# Generated files
bin/
gen/

# Gradle files
.gradle/
/build
/*/build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Eclipse project files
.classpath
.project
.settings/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/

# System files
.DS_Store

下面是比較清晰的目錄結構:

GIT GUI簡單使用#

注意:個人建議使用命令列方式進行版本管理,但是可以使用圖形化介面看本次程式碼的改動,比較方便。   
1.  在所在專案,右鍵選擇git gui   


2. 介面如下,如果會使用命令列,那麼一看就明白了

3. 配置
UTF-8:Edit-Options:

如果之前設定好了,直接在專案中右鍵進入,那麼這些都不用設定:

4. Add commit push很快完成,不用輸i入命令

5. 檢視程式碼對比

如果想要檢視所有的改動歷史,可以:

就可以看到所有的程式碼改動歷史,而不用去網上看。注意,這裡能看到所有人的改動哦!!!非常強大!

6. 設定和遠端倉庫關聯(如果從專案根目錄進入,則自動關聯,不用設定)
如果需要設定,選擇remote-Add,參考如下:

7. 新建專案,從遠端倉庫克隆
右鍵選擇git gui:

選擇克隆已有版本庫:

linux命令

1. $ pwd       用於顯示當前目錄
2.$ ls –ah 用於顯示當前目錄下的所有子目錄和檔案(包含隱藏的)
3.$ clear  清屏
4.$ exit   退出linux模式

注意:通過cmd進入linux模式,命令是   adb s4.hell

注意事項
1.不要使用記事本開啟編輯任何文字檔案,可以使用Notepad++,預設編碼格式設定為UTF-8 無BOM;
2.開發Android studio專案,GitBash命令列和as中的Terminal,使用效果是一樣的。