1. 程式人生 > >Git的詳細使用教程——三部曲

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 ……