Git使用入門

這篇文章是我學習git之后整理的思路,可大致快速聊解到git的基本使用,如想更加全面是學習到git,筆者推薦 廖雪峰git教程,百度搜索即可。

Git簡介:

git是linux之父為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。

學習git從這幾個方面來了解:

  1. 安裝
  2. 工作區(qū)、暫存區(qū)、倉庫的概念
  3. 創(chuàng)建倉庫
  4. 分支
  5. 遠程倉庫
一、安裝
  1. Linux 安裝
    linux安裝非常簡單,Ubuntu下通過一條 sudo apt-get install git 命令就能安裝成功。
    其他版本的linux可以直接通過源碼安裝。先從Git官網(wǎng)下載源碼,然后解壓,依次輸入:./configmakesudo make install 這幾個命令安裝就好了。
  2. Mac 安裝
    直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。


    Mac.jpg
  3. Windows 安裝
    windows安裝也很簡單,直接在官網(wǎng)(https://git-for-windows.github.io/)上下載一個 .exe 的安裝程序雙擊安裝即可,一切按照默認,點擊 next 即可。
    安裝完成之后在開始菜單中找到 Git Bash 彈出一個git自帶的命令行工具則安裝成功!
    Git_Bash.jpg

    安裝成功之后,需要一些設置,打開Git Bash,在命令行輸入
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

git是分布式的,有很多機器共同協(xié)作完成同一個項目,所以每一臺機子都得有自己的名稱標識。

二、工作區(qū)、暫存區(qū)、倉庫。

在了解這些概念之前我們先簡單的操作一遍。
首先,我們在電腦上任選一個地方,創(chuàng)建一個空文件夾。(我使用Git Bash,用命令創(chuàng)建)

$ cd D:                 //進入D盤
$ mkdir myGit           //穿件文件夾 myGit
$ cd myGit              //進入myGit
$ pwd                   //查看當前位置
/d/myGit              

注意:文件夾不能出現(xiàn)中文字符

第二步,通過 git init 將當前所在的目錄變?yōu)镚it可以管理的倉庫。

$ git init
Initialized empty Git repository in /d/myGit/.git/

這樣 git倉庫就創(chuàng)建好了,myGit目錄下就會多一個 .git 文件夾,這個文件夾就是git用來跟蹤管理倉庫的,我們千萬不要去修改這個文件夾。如果你沒有看到 .git 文件夾,打開在windows文件

Paste_Image.png

勾選 查看隱藏目錄 或者使用命令 ls -ah 就能查看到。
第三步,新建一個 readme.txt (一定是在myGit目錄或者其子目錄下), 內(nèi)容如下:

my first git.

用命令 git add readme.txt 把文件放到暫存區(qū)等待上傳,

$ git add readme.txt      //執(zhí)行這個命令沒有反應則表示成功。

在使用 git commit 命令將暫存區(qū)的內(nèi)容(這里只有readme.txt)提交到倉庫分支中

$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file 
1 file changed, 1 insertions(+) 
create mode 100644 readme.txt

-m 后面的內(nèi)容是本次提交的說明,可以任意輸入,也可以是中文,但是最好是有意義的說明。
為什么提交文件需要兩步呢?先使用 add 再使用 commit 因為commit可以一次性提交許多文件,先使用 add 添加多個,然后 一次性 commit .

  1. 倉庫(repository
    也叫版本庫,倉庫里面的所有文件,目錄都被git管理,每個文件的修改,刪除,git都能狗跟蹤到。倉庫包括暫存區(qū)和分支。
    上面操作中使用 commit 命令就是將文件從倉庫的暫存區(qū)提交到倉庫的分支中.
  2. 工作區(qū)(Working Directory
    電腦中能看到的存在代碼的文件夾就是工作區(qū),上面操作中的 myGit 文件夾就是一個工作區(qū),但是myGit中的.git文件夾不屬于工作區(qū),它是git倉庫.
  3. 暫存區(qū)(stage
    我們是用add 命令是將工作區(qū)的文件添加到暫存區(qū),使用 commit是將文件從暫存區(qū)提交到分支中。
    tu.jpg

現(xiàn)在,我們在工作區(qū)新增一個文件 LICENSE
先用git status查看一下狀態(tài):

$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# LICENSE
no changes added to commit (use "git add" and/or "git commit -a")

Git告訴我們,readme.txt。被修改了,而LICENSE還從來沒有被添加過,所以它的狀態(tài)是Untracked
使用兩次命令git add,把readme.txtLICENSE都添加后,用git status再查看一下:

$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: LICENSE
# modified: readme.txt
#
三、創(chuàng)建倉庫

這個已經(jīng)在上面的操作中講了,不在累贅。

四、分支

倉庫包括暫存區(qū)和分支(master)
其實每一次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master
分支。有一個HEAD(類似于指針那樣)就是指向master的,而master則指向最新的提交,就想這樣:

分支.png

我們也可以使用 git checkout -b dev 新建一個分支名字是dev

$ git checkout -b dev
Switched to a new branch 'dev'

這條命令的意識就是:創(chuàng)建分支dev 并切換到這個分支下。
輸入git branch 查看所有分支,其中* 號表示的是當前分支

$ git branch
* dev
  master

現(xiàn)在,我們就可以在dev 分支上正常提交,比如對 readme.txt做個修改,加上一行:

Creating a new branch is quick.

然后再做提交

$ git add readme.txt 
$ git commit -m "branch test"
[dev fec145a] branch test 
  1 file changed, 1 insertion(+)

現(xiàn)在的內(nèi)部情況就像這個圖一樣,HEAD指向最新dev分支上的修改

在dev分支上做的提交.png

下面我們在把在dev分支上的修改合并到master主分支上

$ git checkout master   //切換回master主分支
Switched to branch 'master'

執(zhí)行后內(nèi)部的結構就像這樣:

HEAH指向了master.png

開始合并dev分支到master主分支

$ git merge dev
Updating d17efd8..fec145a
Fast-forward 
 readme.txt | 1 + 
 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到當前分支。合并后,再查readme.txt的內(nèi)容,就可以看到,和dev分支的最新提交是完全一樣的。
合并完成后,就可以放心地刪除 dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

在實際開發(fā)中,我們應該按照幾個基本原則進行分支管理:

首先,master分支應該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個時候,比如1.0版本發(fā)布時,再把dev分支合并到master上,在master分支發(fā)布1.0版本;

你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。

五、遠程倉庫

Git是分布式版本控制系統(tǒng),同一個Git倉庫,可以分布到不同的機器上。怎么分布呢?最早,肯定只有一臺機器有一個原始版本庫,此后,別的機器可以“克隆”這個原始版本庫,而且每臺機器的版本庫其實都是一樣的,并沒有主次之分。
實際情況往往是這樣,找一臺電腦充當服務器的角色,每天24小時開機,其他每個人都從這個“服務器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務器倉庫里,也從服務器倉庫中拉取別人的提交。
完全可以自己搭建一臺運行Git的服務器,不過現(xiàn)階段,為了學Git先搭個服務器絕對是小題大作。好在這個世界上有個叫GitHub的神奇的網(wǎng)站,從名字就可以看出,這個網(wǎng)站就是提供Git倉庫托管服務的,所以,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。

  1. 第1步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa
    和id_rsa.pub
    這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"

可以在用戶主目錄里找到.ssh目錄,里面有 id_rsaid_rsa.pub
兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

  1. 第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
Paste_Image.png
  1. 第三步,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
Paste_Image.png

在Repository name填入myGit
,其他保持默認設置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的myGit倉庫下運行命令:

$ git remote add origin git@github.com:daiqiang838/myGit.git

請千萬注意,把上面的michaelliao替換成你自己的GitHub賬戶名,否則,你在本地關聯(lián)的就是我的遠程庫,關聯(lián)沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

  1. 第四步,就可以把本地庫的所有內(nèi)容推送到遠程庫上:
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git 
 * [new branch] master -> master
Branch master set up to track remote branch master from origin.

把本地庫的內(nèi)容推送到遠程,用git push命令,實際上是把當前分master推送到遠程。
推送成功后,可以立刻在GitHub頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣.

$ git push origin master

把本地master分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內(nèi)容