1. 程式人生 > >Git版本控制器的基本使用

Git版本控制器的基本使用

關於git

Git,是一個分散式版本控制軟體。最初本是為了更好的管理Linux核心開發而被林納斯·託瓦茲開發,後來因為專案開發中版本控制的強烈需求,而git也日趨成熟,最終成為了一個獨立的版本控制軟體。

git使用方法

建立遠端倉庫

建立遠端倉庫,說得白話一點就是在程式碼託管伺服器上給我分配一片可遠端訪問的空間。其實跟git的使用沒有直接的關係,但是為了更好的說明問題,咱就稍微囉嗦下。

目前支援git的程式碼託管服務很多,名氣最大的莫過於Github,其他還有GitLabBitbucketCSDN-CODE[email protected]等等。我們先來說說為什麼需要程式碼託管伺服器,無論我們開發的是個人專案還是團隊專案,從長遠來看,將程式碼託管到遠端伺服器上都是比較好的選擇。理由很容易想到:

  • 1、方便多人(有許可權)共享,團隊開發尤為重要;
  • 2、不怕更換電腦,公司和家裡或出差,只要有電腦就可以訪問;
  • 3、不怕硬碟損壞程式碼丟失;
  • 4、其他還有很多。

基於以上程式碼託管伺服器,建立一個遠端倉庫非常簡單,以Github為例,開啟https://github.com首頁登入進去後,頁面右上角有一個“+”圖示,滑鼠點上去就看到如圖所示的樣子:

New repository

點選紅框標示的那個連線,然後填寫關鍵資訊,根據提示就建立好了。

建立原生代碼庫(init)

原生代碼庫,其實就是我們的程式碼目錄,如果非要區別普通程式碼目錄和git倉庫目錄,那就是基於git的程式碼目錄裡面會多一個.git的目錄,這個目錄一般是不可見的。如何將一個普通程式碼目錄變成git工作目錄,其實很簡單。我們可以使用cmd

git bash或任何一個命令列工具,進入工作目錄,然後執行下面這行程式碼就可以了:

git init

當本地倉庫初始化好後,其實我們已經可以使用git工作了,比如將程式碼檔案新增到版本記錄,建立本地分支,合併本地分支程式碼等等。

繫結原生代碼庫與遠端倉庫(remote | clone)

如果僅僅使用git在本地搗鼓,那麼我們上面提到的遠端程式碼託管的優勢就完全沒有意義了,所以我們要把我們的本地倉庫和遠端倉庫繫結起來,這裡就要分情況了。

  1. 如果是現在本地已經開發的一個全新專案需要推送到遠端倉庫,你需要先這麼做:

    git remote add origin https://github.com
    /username/project.git
  2. 如果是在別人已經開發過的倉庫中繼續開發,我們不需要預先建立並初始化本地倉庫,直接執行下面這條命令就可以了:

    git clone https://github.com/username/project.git
    

檢視倉庫檔案狀態(status)

當我們已經擁有一個本地git倉庫或對我們的專案進行了修改後,我們可能迫不及待的想看看我們專案中各個檔案的當前狀態,我們只需在git bash中執行:

git status

通常情況下,我們可能看到一堆紅色標記的列表,包括以下資訊:

  1. Changes to be committed:等待提交的更改
    • new file:新增檔案
    • modified:有改動的檔案
    • deleted:刪除的檔案
  2. Untracked files:未新增到版本記錄的檔案

如果是一個全新倉庫,我們只能看到Untracked files項。

新增檔案並提交到暫存區(add & commit)

當我們通過git status看到有紅色檔案列表,而且其中有我們想要儲存到遠端倉庫中的檔案時,我們可通過git add <filename>命令,將相應檔案新增到暫存區,我們也可以通過git add .命令,新增所有新增或有更新的檔案,但這裡要注意刪除的檔案不會被新增。

新增刪除的檔案需要使用git add -u <filename>git add -u .命令。

接下來我們還需要執行一個命令git commit,才能將新增的檔案(變化)提交到暫存區。這個命令的用法也有幾種,常見的是直接執行git commit -m 'log info',還有一種是執行git commit開啟指定編輯器,編輯好日誌後關閉編輯器即可,一般用於日誌內容比較多的情況。

建立並切換分支(branch & checkout)

在實際開發過程中,我們需要考慮程式碼的穩定性,未經過測試的程式碼不能釋出到線上環境。這就意味著我們如果我們一直在一個分支上開發程式碼是很危險的,一步留神就可能把有bug的程式碼提交到了遠端倉庫,造成不必要的麻煩,所以一般情況下使用版本控制器,我們都會使用它的分支功能。即開發分支、主幹分支,當開發分支上的程式碼測試穩定後,再合併到主幹分支,將主幹分支提交到遠端倉庫,這樣出錯的概率就降低了很多。

使用git bash可以很方便的建立分支,我們只需執行git branch newbranch即可建立一個名為newbranch的分支,然後我們只需執行git checkout newbranch命令,即可將我們的工作環境切換到newbranch分支上。

還有一種更為簡便的方法,可以直接使用checkout命令,完成建立並切換到分支:

git checkout -b newbranch

合併分支(merge)

前面我們提到了,當開發分支上的程式碼測試穩定後,我們就可以合併到主幹分支上,並提交到遠端倉庫。那麼如何合併兩個分支的程式碼成了一個問題。難道要對比兩個檔案的差異,一行一行的copy程式碼?顯然git不會這麼笨,它是很智慧的,我們只需簡單的執行一條命令即可完成程式碼自動合併。我們設想開發分支(newbranch)將被合併到主幹分支(master)上,那麼首先我們要先將開發分支的程式碼提交到暫存區,然後切換到主幹分支,最後執行合併操作,完整的操作流程大致如下:

git add .
git commit -m 'newbranch 上的變動內容'
git checkout master
git merge newbranch

但是,我們在合併程式碼的時候,特別是多人開發的時候,偶爾出現衝突(兩個人同時改動了同一個地方)也是在所難免的,這種情況,我麼恐怕就需要人肉解決下了。不過問題不大,git將檔案衝突的地方都會以特殊的形式標明的。

# 衝突示例
<<<<<<< HEAD
aa  # 當前分支上的內容
=======
bb  # 被合併分支上的內容
>>>>>>> nb

將原生代碼推送到遠端倉庫(push)

當開發分支上的程式碼都被合併到主幹分支上,並且所有的衝突都解決好後,我們就可以將主幹分支的程式碼推送到遠端倉庫,提供給別人使用了。這一步很簡單:

git push origin master

還記得我們執行git remote add後面的origin嗎?這裡和那裡是一樣的哦,而最後那個master就是分支名稱了。如果遠端已經有該分支,便會先檢查遠端倉庫在最近一次更新之後發生過更改,如果有會提示先進行更新程式碼,然後再提交。如果未變動過,原生代碼則會直接提交至遠端程式碼倉庫。

將遠端倉庫中的程式碼更新到本地(pull & fetch)

然而,一般情況下,我們在執行git push之前,都會先更新一次遠端倉庫中的內容:

git pull origin master

這裡我們需要注意一下,和git merge命令一樣,pull命令是有可能導致程式碼衝突的。而pull命令從某種意義來講實際和fetch+merge命令一樣,這裡就不再對fetch做進一步說明了。

比較程式碼差異(diff)

通常我們在開發過程中涉及的檔案比較多,修改的地方也比較多,當我們需要提交程式碼的時候,往往想不起來我們修改了哪些內容,哪些問需被提交。這時候我們可能希望能檢視一下在前次提交程式碼之後我們對本地倉庫所做的改動,那麼你可以這麼做:

git diff

檢視working tree和index file的差別,也可以:

git diff --cached

檢視index file與commit的差別,還可以:

git diff HEAD

檢視working tree和commit的差別。

diff命令的使用,大致就是這個樣子,她們之間的細節差異,可以通過網路查詢更詳細的說明,也可以在實際使用中自己去觀察,這裡就不做贅述了。

程式碼回滾與日誌(reset & log)

當我們的專案開發到一定階段後,也許偶爾就發現該版本的升級存在問題,需要臨時將專案恢復到上一個穩定版本。但是,人肉的將升級程式碼改回去,顯然是不現實的,更科學的解決方法是使用git的reset命令:

git reset --hard commitId

將本地倉庫程式碼回滾到commitId對應的版本,或者:

git reset --hard HEAD~number

將最近number次的提交進行回滾,number為一個整數。那麼問題來了,當我們需要回滾到指定版本的時候,commitId從何而來?我們怎麼知道哪個commit是最近的穩定版本?

說到這裡,就該log命令出場了。我們可以使用log命令,檢視倉庫的提交歷史,以及每個提交的更改日誌,甚至更改的內容,其最基本的用法如下:

git log -2  # 檢視最近兩次的提交歷史
git log  # 預設會輸出所有的提交歷史,最近的在最上面

我們可以根據日誌內容,找到響應的穩定版本程式碼的commitId,然後再使用reset命令進行程式碼恢復。怎麼樣,是不是很強大?但是筆者要告訴你的是,reset和log命令非常強大,引數也比較多,特別是log命令,上面僅僅列舉了最最基本的使用方法,如果讀者還想了解更多,更深入的東西,還需要翻看更多,更全面的資料學習。由於筆者能力有限,且考慮到篇幅問題,就不再囉嗦了。

給程式碼庫打標籤(tag)

tag命令,是用來給我們的程式碼庫打標籤的。聽起來可能有些不太理解,其實日常使用中,通常是用來新增版本標記。

git tag v1.0.0

表明在這裡我們釋出了1.0.0版本。這樣就可以很方便的讓我們回顧專案每個版本的樣子,歷史就是這樣用血寫成的。我們也可以通過tag命令檢視已有的標籤,只需要執行:

git tag

這樣就行了。

打造自己的git命令

Git已然非常強大,而且git的命令也已經非常簡潔明瞭。但是,開發者們往往希望使用工具的同時能保留自己的個性,希望能符合自己的操作習慣。比如筆者就嫌checkout命令太長了,雖然各種自動補全,但用起來還是覺得不順手,那麼有沒有什麼辦法可以再簡潔些呢?答案是肯定的。下面給大家列出筆者的縮寫配置,當然也是曾經參考了很多網上大牛們的教程的。

git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.ci commit

配置好後再輸入git命令的時候就不用再輸入一大段了,例如我們要檢視狀態,只需:

git st

是不是很方便?這裡只列了一些最為簡單的配置,以拋磚引玉,更多更高大上的配置,就待讀者深入挖掘了。

總結

Git是一款非常強大的分散式版本控制工具,掌握git的使用,可以讓我們在工作中如虎添翼。本文僅僅在筆者能力範圍之內列舉了最基本的使用方法,如有不當之處,歡迎讀者朋友們熱心指正。如有興趣,推薦閱讀:

作者部落格:百碼山莊

相關推薦

Git版本控制器基本使用

關於git Git,是一個分散式版本控制軟體。最初本是為了更好的管理Linux核心開發而被林納斯·託瓦茲開發,後來因為專案開發中版本控制的強烈需求,而git也日趨成熟,最終成為了一個獨立的版本控制軟體。 git使用方法 建立遠端倉庫 建立遠端倉庫,說得白話一點就是在程式碼託管伺服器上給我分配一片

git版本控制器一些常用語句

檢視 pwd git config --list 檢視配置 ls 檢視倉庫的內容 ls -ah git status git config --global user.name 'Yondol' git config --global user.email '[email&#

利用VS2010的git版本控制器

轉載地址:http://blog.csdn.net/softwave/article/details/7957938 首先,安裝Git for Windows,下載地址為 這裡 。Git for Windows是Github官方的管理工具,但似乎更適合習慣Linux命令列

idea專案匯入myeclipse(基於git版本控制器)

2.在公共伺服器上建立遠端倉庫,將本地倉庫提交的程式碼推送到遠端倉庫 2.1 一般放在伺服器上的共享倉庫都建立為裸倉庫,我這裡沒有伺服器,所以代表性的在本地建立一個裸倉庫,作為遠端倉庫使用 2.2 將IDEA中的專案推送到遠端倉庫

細說GIT分布式版本控制器

set 指定 提前 隨著 過去 內容 軟件開發 分布式 commit 一.Git介紹 Git是目前世界上最先進的分布式版本控制器。Svn CVS 版本控制器:就是用來追溯自己書寫的代碼的記錄信息。好處:可以非常方便的記錄何時何地何人操作了哪些代碼。 什麽是分布式

Git分布式版本控制器安裝註意點及其常用命令

命令行 master 文件 initial nal email repos vim -name 將git按照默認選項下載安裝後,打開git bach版面進行git命令行操作(記住在安裝的過程中文件夾中不能存在中文):註:Windows下,路徑名不要包含中文,因為Git對中文

關於版本控制器git

版本控制著一概念也是最近開始和別的同學一起作響木材接觸到的概念,其實之前就有感覺如果要手動去備份實在是很複雜很麻煩的一件事情。git是一個使用很簡單而且應用廣泛的版本管理器。接下來就來研究一下版本管理器的前世今生吧。 關於版本控制 什麼是“版本控制”?我為什麼要關心它呢? 版本控制是一種記錄

版本控制器之-git的簡單用法

前言 作為開發人員,有必要了解下版本控制器用法,畢竟日常開發中經常接觸,使用,當下,android開發人員常用的版本控制器為git和svn,今天就來說下git的基本用法。關於git如何安裝下載註冊什麼的就不說了。當安裝好之後,我們需要配置一下使用者名稱和郵箱。

Git版本管理之旅(二)—— Git基本操作流程及相關命令

本章繼續上章的型別,介紹基於空專案的版本庫操作,本教程基於Ubuntu 建立版本庫 新增檔案 修改檔案 刪除檔案 版本回退 基本概念 管理以及撤銷修改 新增到遠端倉庫 從遠端倉庫克隆 建立版本庫 版本庫又名倉庫,英文名repository,可以

Git版本控制系統之基本使用

     最早是通過接觸著名的開源社群Github瞭解到Git的,但一直沒有系統學習過。這次下定決心從頭到尾系統的學一學,也將學習過程記錄於此,供大家批駁。本篇文章先從以下幾個方面簡單瞭解一下Git: Git的簡介以及Git與GitHub的關係 Git的下載

Linux下搭建版本控制器SVN

svn 版本回退 分支、多人協作 倉庫 關於版本控制器,大致可分為集中式和分布式兩種。 集中式的版本控制器通常會存在一個中央服務器,主要是用來存放版本庫的,(這裏暫且先不說分支的事)當我們工作之前,首先需要從中央服務器得到一份最新版本的代碼,修改完畢之後,再次推送到中央服務器。集

Git學習筆記2——Git版本庫的創建

文件添加 不但 提交 linu 記錄 例子 blog 所有 out 創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄: $ cd s: $ cd Git_Learing $ pwd s/Git_Learning pwd命令用於顯示當前目錄。在我的wind

Git版本控制

官網 新建 not one push commit git clone hub 添加 1.Git基礎命令的使用 git status:檢查當前文件的狀態。 如果當前沒有任何跟蹤文件,也沒有任何文件在上次提交後更新過,總的 來說就是沒有可提交的文件的時候,

git命令行基本操作

撤銷 合並 冒號 文件的 初始化 徹底 message rdquo only --------------------------------------------------------------------------------------------------

Git版本號控制:Git分支處理

rgb 方法 發現 速度 pip 命令 ria p s 你會 http://blog.csdn.net/pipisorry/article/details/46958699分支的意義創建分支能夠避免提交代碼後對主分支的影響,同一時候也使你有了相對獨立的開發環境。假設你準備

git版本號編譯進程序

.cn tab reflog 代碼 uil unix 作者 記錄 提交 問題的提出 不管是什麽版本管理工具,每一條提交記錄都會有一個對應的版本號,一般是一個整數,git是一個hash字符串。不管怎樣,這個版本號是唯一的,有時候我們在程序運行的時候會在日誌裏面輸出程序的版本

Git版本庫工作流程圖想

mas ima 更新 基本 方式 再次 ace image 技術 對照廖雪峰的教程,發現有很多難以理解的地方,畫了一個圖想方便以後參考 首先兩個基本命令反應了版本庫最本質的工作流程,後面的命令其實都基於此git add 把文件修改添加到暫存區git commit 在原版本的

git 的一些基本操作

str 一個 修改信息 rem 建倉 文件添加 nbsp init origin 獲取倉庫 git init:初始化一個倉庫,當前目錄下生成 .git 目錄,該目錄為倉庫。 git init --bare :生成裸倉庫,不存在 .git 目錄。 git clone (

細說SVN集中式版本控制器

阿裏 detail 好的 repo apache .com 行編輯 管理 內部 svn全稱Subversion,實現多人開發同一個項目時,對源代碼進行管理的工具。在公司裏邊,一個項目是由多人同時在開發,大家在本地自己電腦開發php代碼,完畢後就commit上傳給服務器運行。

git 版本演示

讀者 img images 建議 ima 版本 cnblogs 網址 演示 Git 版本演示,建議讀者直接上線操作試試! 網址:http://onlywei.github.io/explain-git-with-d3/#zen git 版本演示