Git的詳細使用教程——三部曲
Git詳細使用三部曲
作為一名開發人員,在我們平時的開發中會經常遇到版本管理工具,今天我們就來說說Git的使用,最近我膜拜了蔣鑫的《Git權威指南》一書,收益良多,在此和大家交流交流。
Git是一種分散式版本管理工具,每個人參與開發人員的電腦都是一臺程式碼的倉庫,使用起來特別靈活,這裡我們就不對Git的安裝和配置做說明了,網上相關內容很多。Git的優點也就不多說了,直接開始使用吧。
Git的使用可以說主要分為三部曲來說明,其餘的所有命令都是為這三個命令服務的。下面我會對其做詳細說明。
三部曲 | 命令 |
---|---|
新增到暫存區 | git add |
提交到版本庫 | git commit |
提交到遠端 | git push |
以上三個命令是最主要的命令了,其他的命令都是為其服務的,可以將其功能和命令的列舉出來。
輔助功能 | 命令 |
---|---|
初始化倉庫 | git init |
克隆程式碼 | git clone |
比較差異 | git diff |
檢視狀態 | git status |
檢視日誌 | git log |
檢出程式碼 | git checkout |
重置程式碼 | git reset |
恢復進度 | git stash |
里程碑 | git tag |
回滾操作 | git revert |
獲取(不合並) | git fetch |
合併操作 | git merge |
獲取併合並(fetch+merge) | git pull |
rebase命令(可以處理衝突和合並提交) | git rebase |
上面常用的命令都已經寫出來了,在真正進入正題之前,我們先簡單說一下git版本管理的三個儲存程式碼的地方,其中有一個工作區,就是我們寫程式碼的地方;第二個是暫存區(Index),聽名字就知道是暫時儲存程式碼的地方;還有一個是版本庫,就是我們本地提交程式碼後代碼儲存的地方,也是向遠端倉庫提交程式碼的地方。在後面的講解中會經常遇到HEAD,git是一個支援多分支的程式碼管理工具,HEAD頭指標只要不是處於分離頭指標狀態(分離頭指標是指它指向的是一個具體的commit ID),那麼就會指向其中某一個分支,而這立的某一個分支可以理解為master分支,master分支的指標會指向最新的提交ID。其實HEAD就可以理解為一個遊標,在所有分支之間靈活切換,但是指向的是當前分支的最新提交。
我們用AndroidStudio建立一個專案名字為Git的專案來舉例說明這些命令的作用吧,其實都一樣,哪怕你隨便建立一個資料夾在裡面寫東西也可以,主要是學習這些命令的意義和作用。
- 建立一個專案名字為Git的專案
- 在專案的根目錄下點選右鍵執行Git bash here,使用git init 命令初始化git倉庫,就會在目錄下出現一個名字為.git的隱藏資料夾,接下來我們就可以對程式碼進行追蹤和版本管理了。
- 接下來我們修改專案中的程式碼(大家不要擔心,我們這個專案不會執行,因為執行沒什麼意義),首先看一下修改之前MainActicity.java的程式碼,這裡需要注意一個問題,git版本管理工具只能管理已經追蹤(tracked)的檔案,就是說沒有新增(add)的檔案是追蹤不了的,這裡我們只是使用git init初始化了一個空的倉庫,上面的執行資訊也很明顯說的是Initialized empty Git responsitory。所以我們正好先了解一下git add命令
1.git add命令
git add 命令 | 意義 |
---|---|
git add .(這裡是個點) | 將工作區的變化提交到暫存區,包括檔案修改和新增,但是不包括刪除的檔案 |
git add -u | 將工作區的變化提交到暫存區,包括檔案修改和刪除,但是不包括新增的檔案 |
git add -A | 將工作區的變化提交到暫存區,包括新增,刪除和修改的所有內容 |
git add -i | 將工作區的變化提交到暫存區,進入互動模式選擇檔案進行操作 |
git add [filename] | 將工作區的變化提交到暫存區,選定某一個檔案進行提交 |
為了後面的學習不和這裡混淆,這裡我先將專案的所有內容直接使用git add -A命令然後使用git commit -m "initial commit"提交一次,然後進行這次內容的學習,這裡大家不懂的可以先這麼做,後面就慢慢講到。我們使用git log命令檢視一下提交記錄就會看到剛才的提交資訊:
- 這時候我們開始修改程式碼,在MainActivity中加入一個方法getName();我們使用命令git diff檢視一下,增加了一行程式碼;
這裡有幾個符號需要注意,其中三個減號指的是修改之前原來檔案,三個加號值得是現在檔案的內容,看資訊很容易看出來是新加了一行程式碼;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void getName(){}
}
剛才說過了,其他的所有命令可以說都是為了三部曲命令服務的,這裡的git diff命令也不例外,這裡先對git 命令做一個詳細的說明,就知道上面git diff的含義了:
git diff 命令 | 意義 |
---|---|
git diff | 比較工作區和暫存區差異 |
git diff --cached | 比較暫存區和版本庫之間差異 |
git diff HEAD | 比較工作區和HEAD頭指標指向的分支之間的差異 |
git diff [ID] | 工作區和某一個提交的分支進行對比 |
git diff --cached [ID] | 暫存區和某一個分支比較 |
所以上面的git diff就是工作區和暫存區進行比較了,我們在工作區加入一行程式碼,沒有add,所以暫存區沒有。這時候執行git diff HEAD效果和git diff雖然意義不一樣,但是效果一樣,因為程式碼還在工作區,,既沒有新增到暫且區也沒有新增到版本庫中,如下圖:
- 這時候我們執行一下git status -s命令檢視一下,顯示如下,我們看到列印資訊前面顯示了一個大寫的紅色M但是沒有最頂格寫,它的意義有兩點,第一M代表的是修改的意思,也就是我們是在原來基礎上修改的這個檔案,並不是新增的(因為之前有一次提交);第二紅色以及大寫代表是還沒有新增到暫存區;等會我們新增後再來對比一下。
- 這時候我們將其git add -A新增到暫存區,執行git status -s命令:檢視對比剛才的,這時候會發現add之後,執行git status -s命令,大寫M頂格寫了,而且顏色也變為綠色的了,這就給了我們一個好的啟示,因為執行git diff可能資訊量太大,那麼我們就可以執行git status命令檢視,不僅知道哪個檔案修改了,而且還知道是否新增到暫存區了。
- 這時候執行git diff會發現沒有變化了,但是執行git diff --cached和git diff HEAD有變化,因為修改已經提交到暫存區,工作區和暫存區一致,但是沒有提交到版本庫中,如下圖:
好了,git add命令講解就到這裡。下面我們講解git commit 命令。
2.git commit命令
-
現在我們將修改已經提交到暫存區了,下一步就該提交版本庫了,需要使用git commit命令
git commit命令|意義
-|-
git commit -m “msg”|將修改從暫存區提交到版本庫中,msg指的是本次提交的資訊
git commit --amend|修改上次提交的資訊,會出現一個互動介面,相當於本次提交和上次提交合併為一個提交
git commit --amend -m “msg”|修改上次提交的資訊,不會出現一個互動介面,相當於本次提交和上次提交合併為一個提交
git commit --allow-empty -m “msg”|看意思就是說允許空白提交,多用來測試時候使用 -
瞭解了以上命令的意思,我們就直接使用一下吧,git commit -m “add method getName()”,如下:檢視一下log資訊
這裡也將git log的命令展示出來:
git log命令 | 意義 |
---|---|
git log | 展示commit的詳細資訊,包括commit SHA1值,date author和提交資訊 |
git log --oneline | 僅僅展示提交的簡單資訊,有SHA1值前幾位,和提交資訊 |
git log --graph | 用圖表鏈的形式詳細展示提交資訊 |
git log --oneling --graph | 用圖表鏈的形式簡單展示提交資訊 |
3.git push
git push命令 | 意義 |
---|---|
git push origin [branch] | 將程式碼提交到遠端branch分支上 |
git push origin [brchan] -f | 將程式碼覆蓋遠端的branch分支,此命令比較危險,慎用,確保此分支只有你個人工作時候可以 |
最後就是提交了,假如是真正的專案的話,使用git push origin [branchname]就可以提交了。預設情況下,如果你是從遠端clone來的程式碼的話預設是遠端的master分支,這個得根據專案的實際分支模型,也可能是develop分支,假如是develop分支clone來的話就可以使用git push origin develop來將版本庫程式碼push到遠端建立一個新的分支,等別人review後沒問題,就可以合併到主分支了,這裡我們push肯定是不會成功的。顯示不能從遠端倉庫讀取,如下圖:
如果想測試的話,可以在建立Git專案的時候就先把專案VCS->Import into Version Control->share Project on GitHub,這樣的話就在遠端有一個引用指向當前的專案,就可以push成功了。這裡因為push比較簡單,主要是說明其他一些命令的使用,但是push命令很重要,切記不要隨便使用-f命令。
好了,今天的交流就結束了,還有很多重要的的命令,比如rebase checkout reset revert等,我會在後面的部落格中慢慢寫出來,如部落格中有不對的地方,歡迎斧正。
相關推薦
Git詳細教程
變量 版本控制 為什麽 點擊 臨時 每次 ase 出現 註意 分布式版本控制系統--git 一.什麽是Git 1.Git是什麽 Git是目前世界上最先進的分布式版本控制系統(沒有之一)。 實際上版本控制系統有如下幾個: 1) CVS 2) SVN 3) Git 這個概念中
Git詳細教程(3)---結合gitHub使用
之間 方便 結果 最新 strong ini 編輯 repos github 1.GitHub的基本使用 GitHub就是一個網站,本身是基於Git,可以完成版本控制,可以托管代碼。 英文版的。 在使用GitHub之前,首先需要註冊一個賬號。 登錄,就可以完成相關的
git詳細教程(附操作圖)
第一次從遠端倉庫拉程式碼 #檢視版本 git --version #設定姓名和郵箱 git config --global user.name "你的姓名" git config --global user.email "你的郵箱" #目錄操作 pwd 當前目錄
Git的詳細使用教程——三部曲
Git詳細使用三部曲 作為一名開發人員,在我們平時的開發中會經常遇到版本管理工具,今天我們就來說說Git的使用,最近我膜拜了蔣鑫的《Git權威指南》一書,收益良多,在此和大家交流交流。 Git是一種分散式版本管理工具,每個人參與開發人員的電腦都是一臺程式碼的
從Git到GitHub,詳細教程
文件夾 想象 可能 機制 安裝完成 公開 style run 離線 眾所周知,一個稍微有點規模的項目,都不可能是一個人單打獨鬥完成的(能完成的大神別打我),所以,一個高效的項目團隊就需要一個NB的工具來進行有效的交流(曾經有人問我企鵝不就可以嗎,我竟無言以對),今天就把我學
git下載教程、詳細安裝教程
1、百度git 2、點選Git - Downloads進入下載頁面 3、選擇Windows,點選進入 4、選擇64-bit Git for Windows Setup. 詳細安裝教程: https:
git使用教程(附有“最詳細、易懂的git使用教程”連結)
筆者剛使用git不久,本文用來主要記錄使用git過程中遇到的問題及一些常用命令 git使用教程(超詳細,易上手)[link](https://mp.weixin.qq.com/s?__biz=MzIwMTY0NDU3Nw==&mid=2651936846&idx=1&am
Git使用教程:最詳細、最傻瓜、最淺顯、真正手把手教!
作者:塗根華 原文出處:https://www.cnblogs.com/tugenhua0707/p/4050072.html 導讀:因為教程詳細,所以行文有些長,新手邊看邊操作效果出乎你的預料。GitHub雖然有些許改版,但並無大礙。 一:Git是什麼?
適合初次使用git的詳細教程和idea的結合使用
溫馨提醒:本教程巨長,最好跟著做,單看不跟著練習操作容易睡著(新手來說) 一:上傳專案到github 首先是git軟體的安裝,git 官網下載連結 ,然後是安裝,全部下一步下一步就好了。這裡就不贅述了 在idea上面配置好你的git,files->settings->
git 和 tortoise git 安裝的詳細教程(windows)
背景 git是一個版本控制工具. 主要解決三個問題: 程式碼被"喵星人"吃掉了. 產品經理反覆修改需求, 需要同時維護多個版本程式碼. 多人協同開發. 安裝git for windows: 這個是一個git的windows系統的命令列版本 下載網址:
Git使用教程:簡單詳細傻瓜式教程
一、 git config --global user.name "xxx"; git config --global user.email "xxx"; git config --global 引數,有了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然
Git入門-超詳細教程
從廖老師網站上總結的Git筆記,對常見操作進行了總結。 一 版本庫、檔案操作 1. 建立版本庫 GitBash中 cd 到需要作為版本庫的目錄,執行git init,建立成功後會生成.git資料夾 2. 新增檔案到版本庫 首先,檔案必須放在在版本庫對
git操作詳細教程
預警:因為詳細,所以行文有些長,新手邊看邊操作效果出乎你的預料) 一:Git是什麼? Git是目前世界上最先進的分散式版本控制系統。 工作原理 / 流程: Workspace:工作區 Index / Stage:暫存區 Repository:倉庫區(或本地倉庫) Remote:遠端倉庫 二:SV
Git Bash使用詳細教程
一:Git是什麼? Git是目前世界上最先進的分散式版本控制系統。 二:SVN與Git的最主要的區別? SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央伺服
git詳細使用教程入門到精通(史上最全的git教程)
一:Git是什麼? Git是目前世界上最先進的分散式版本控制系統。二:SVN與Git的最主要的區別? SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活, 幹完後,需要把自己做完的活推送到中央伺服
Git的基本使用方法(0基礎小白也能看懂)詳細教程(含視訊講解)
git指令介紹,下面有詳解指令可以先跳過直接看下面的詳解 $ mkdir learngit //建立一個learngit資料夾 $ cd learngit //進入learngit資料夾 $ pwd //用於顯
超詳細的 Git 實戰教程
導讀:因為教程詳細,所以行文有些長,新手邊看邊操作效果出乎你的預料。GitHub雖然有些許改版,但並無大礙。 一、Git是什麼? Git是目前世界上最先進的分散式版本控制系統。 工作原理 / 流程: Workspace:工作區 Index
Git使用詳細教程
轉自:http://www.admin10000.com/document/5374.html一:Git是什麼? Git是目前世界上最先進的分散式版本控制系統。 二:SVN與Git的最主要的區別? SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,
mac os 利用ssh 搭建git server伺服器詳細教程,以及git基本用法(上)
上半部分轉載至 http://www.cnblogs.com/whj198579/archive/2013/04/09/3009350.html SSH開啟 在osx中開啟ssh訪問非常簡單,只需要開啟“系統偏好設定”並且點選“共享”圖示即可。 選中下圖中的ch
Git 上傳專案到碼雲---cmd截圖詳細教程
ssh-keygen –t rsa –b 4096 –C “licongcong” 具體;SHA256: kwF…….. Git clone ……