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,使用效果是一樣的。