Git基礎(chǔ)



Git是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。
Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務(wù)器端軟件支持。


Git與SVN區(qū)別

  • 1、GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統(tǒng),例如SVN,CVS等,最核心的區(qū)別。
  • 2、GIT把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而SVN是按文件:所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類似.svn,.cvs等的文件夾里。
  • 3、GIT分支和SVN的分支不同:分支在SVN中一點(diǎn)不特別,就是版本庫中的另外的一個(gè)目錄。
  • 4、GIT沒有一個(gè)全局的版本號(hào),而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個(gè)特征。
  • 5、GIT的內(nèi)容完整性要優(yōu)于SVN:GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時(shí)降低對版本庫的破壞。

文章目錄

一、Git安裝配置
二、Git基本操作
三、Git分支管理
四、Git.遠(yuǎn)程倉庫


一、Git安裝配置

Git目前支持Mac、Windows、Linux/Unix和Solaris平臺(tái)。
各平臺(tái)安裝包下載地址:http://git-scm.com/downloads

Windows平臺(tái)安裝

下載安裝包之后根據(jù)提示進(jìn)行安裝



安裝完成后就可以使用命令行的git工具了(自帶ssh客戶端),和一個(gè)帶圖像界面的git項(xiàng)目管理工具(Git GUI)。
可以通過桌面圖標(biāo)或者開始菜單找到->"Git"->"Git Bash",點(diǎn)擊會(huì)彈出Git命令窗口,可在該窗口進(jìn)行Git操作。


Mac平臺(tái)下的安裝

1.下載git客戶端,地址:https://git-scm.com/download/mac
mac平臺(tái)下的圖像化git安裝工具,地址:http://sourceforge.net/projects/git-osx-installer/

2.打開安裝包,進(jìn)行安裝。



Linux平臺(tái)安裝

Linux操作系統(tǒng)git安裝命令參考:https://git-scm.com/download/linux

  • Ubuntu安裝命令:
$ apt-get install git
  • 若提示需要權(quán)限則輸入:sudo passwd root,首先輸入登陸密碼,然后設(shè)置新的root密碼,接著輸入suEnter鍵,輸入設(shè)置好的root密碼獲取root權(quán)限。

安裝過程需要輸入幾次y+回車,之后等待自動(dòng)下載安裝。

  • 輸入git --version查看git版本
    安裝完成

二、Git基本操作

配置用戶信息

  • 以下兩條命令用于配置個(gè)人用戶名稱和電子郵件地址:
git config --global user.name "XXX"
git config --global user.email xxxx@gmail.com

--global:添加了此命令,那么更改的配置文件就是位于用戶主目錄下的,以后的項(xiàng)目都將默認(rèn)使用此用戶信息。若需要為某個(gè)項(xiàng)目使用其他用戶信息,只需要去掉--global重新配置即可,新的配置保存在當(dāng)前項(xiàng)目的.git/config中。

  • 查看配置信息命令:
git config --list   //也可以將--list換為具體的某個(gè)環(huán)境變量如:user.name

創(chuàng)建倉庫

Git的很多命令都需要在Git倉庫中運(yùn)行,所以我們最先做的就是創(chuàng)建一個(gè)倉庫。

  • 我們可以使用一下命令將當(dāng)前目錄作為git倉庫,并初始化:
git init
  • 或者使用指定目錄作為倉庫:
git init newrepo
  • 初始化后,目錄下會(huì)生成一個(gè)名為.git的目錄,我們要將當(dāng)前目錄下的幾個(gè)文件納入git版本控制下,需要先用git add讓git對文件開始跟蹤,之后提交。
git add *.c                    //將以.c結(jié)尾的文件提交到倉庫
git add README                 //將README文件提交到倉庫
git commit -m '初始化項(xiàng)目版本'

克隆倉庫

使用git clone命令從現(xiàn)有Git倉庫中拷貝項(xiàng)目,類似于svn checkout。

  • 克隆倉庫的命令:
git clone <repo>                //repo:Git倉庫地址
  • 克隆到指定目錄:
git clone <repo> <directory>    //directory:本地目錄

基本快照

Git 的工作就是創(chuàng)建和保存你的項(xiàng)目的快照及與之后的快照進(jìn)行對比。

git status
git status 可以查看在你上次提交之后是否有修改。

  • 使用git status命令查看項(xiàng)目當(dāng)前狀態(tài):
git status -s                  //-s:簡短輸出

??: 未添加到緩存
A: 已添加到緩存
M: 有改動(dòng)
AM: 添加到緩存后又有改動(dòng)

git diff
git status 顯示你上次提交更新后的更改或者寫入緩存的改動(dòng), 而 git diff 一行一行地顯示這些改動(dòng)具體是啥。

  • 使用git diff命令查看git status執(zhí)行結(jié)果的詳細(xì)信息:
git diff            //尚未緩存的改動(dòng)
git diff --cached   //已緩存的改動(dòng)
git diff HEAD       //已緩存和未緩存的所有改動(dòng)
git diff --stat     //顯示摘要

git commit
使用 git add 命令將想要快照的內(nèi)容寫入緩存區(qū), 而執(zhí)行 git commit 將緩存區(qū)內(nèi)容添加到倉庫中。

  • 將內(nèi)容添加到倉庫:
git commit -m '第一次提交版本'   

-m:提交注釋,如果不設(shè)置-m選項(xiàng),那么git會(huì)嘗試打開一個(gè)編輯器以填寫提交信息,默認(rèn)vim。效果如下:


  • 如果覺得git add提交緩存比較麻煩,也可以使用-a跳過:
git commit -a
git commit -am '第二次提交版本'

git reset HEAD
git reset HEAD 命令用于取消已緩存的內(nèi)容。

git reset HEAD    //也可以使用 --文件名 的形式指定具體文件

git rm
git rm 會(huì)將條目從緩存區(qū)中移除。這與 git reset HEAD 將條目取消緩存是有區(qū)別的。 git reset HEAD是將緩存區(qū)恢復(fù)為做出修改之前的樣子。git rm file 會(huì)將文件從緩存區(qū)和你的硬盤中(工作目錄)刪除。

  • 不從工作區(qū)刪除文件:
git rm --cached 文件名

git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盤上的文件,然后再執(zhí)行 git add 把新文件添加到緩存區(qū)。

git mv 原文件名 修改后文件名

三、Git分支管理

幾乎每種版本控制系統(tǒng)都支持類似的分支,使用分支從開發(fā)主線中分離,在不影響主線的同時(shí)繼續(xù)工作。Git的分支模型是最贊的

  • 創(chuàng)建分支命令:
git branch (branchname)
  • 切換分支命令:
git checkout (branchname)

切換分支時(shí),Git會(huì)用該分支最新的快照替換工作目錄的內(nèi)容,所以多個(gè)分支只需要一個(gè)目錄。

  • 列出分支命令:
git branch        //沒有參數(shù)時(shí),會(huì)列出本地的分支

當(dāng)執(zhí)行g(shù)it init 時(shí),Git會(huì)默認(rèn)創(chuàng)建"master"分支。
當(dāng)我們創(chuàng)建了一個(gè)分支,在該分支的的上下文中新增刪除了一些文件后,切換回主分支,那些修改的東西都不見了。
使用分支就可以讓我們在不同的上下文中工作,來回切換,而不影響主線。

  • 刪除分支命令:
git branch -d (branchname)
  • 合并分支命令:
git merge

合并沖突
合并并不僅僅是簡單的文件添加、移除的操作,Git 也會(huì)合并修改。
我們可以在master分支中創(chuàng)建文件test.txt,并寫入github.com,提交到倉庫。
然后創(chuàng)建一個(gè)change_site分支,并切換過去。

git branch change_site
git checkout change_site

修改test.txt文件內(nèi)容為 https://github.com ,提交后切換回master分支。

git commit -am 'merge test 1'
git checkout master

將change_site分支合并到master分支。

git merge change_site

此時(shí)會(huì)提示我們文件沖突,需要我們手動(dòng)修改。



修改完成后可以通過git add告訴Git文件沖突已解決。

git add test.txt
git commit

Git查看提交歷史

在提交了多次更新后,想要查看提交歷史,可以使用以下命令:

git log

輸出結(jié)果:


查看歷史記錄簡介版本:

git log --oneline

輸出結(jié)果:


使用--graph查看什么時(shí)候出現(xiàn)了分支、合并:

git log --oneline --graph

輸出結(jié)果:


其他log命令:https://git-scm.com/docs/git-log

--reverse 逆向顯示日志
--author 指定具體某一個(gè)作者
--since 和 --before 指定日期
--decorate 查看標(biāo)簽


Git 標(biāo)簽

如果你想要記住或標(biāo)記某個(gè)重要的快照,就可以使用標(biāo)簽。

  • 比如我們提交了項(xiàng)目v2.0版本,可以使用以下命令:
git tag -a v2.0
  • -a是創(chuàng)建一個(gè)帶注解的標(biāo)簽,記錄標(biāo)簽作者、生成時(shí)間等.
  • 使用了-a,Git會(huì)打開一個(gè)編輯器讓你輸入標(biāo)簽注解,就和寫提交注解一樣。
  • 使用命令git tag可以查看所有標(biāo)簽。
  • 如果想給已提交的某個(gè)快照追加標(biāo)簽,可以使用如下命令:
git tag -a v1.0 64ff8e3    //64ff8e3是上圖日志最后一行

快速指定標(biāo)簽信息:

git tag -a v3.0 -m 'author:噫那里有條咸魚'

四、Git遠(yuǎn)程倉庫(Github)

添加遠(yuǎn)程倉庫

由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗(yàn)證信息:

1.創(chuàng)建ssh

  • 檢查ssh
    打開終端,運(yùn)行 cd ~/.ssh
    如果路徑下無文件跳過下一步操作,如果有文件代表已有ssh key,需要進(jìn)行備份
  • 備份已有ssh
mkdir key_backup
mv id_rsa* key_backup
  • 生成ssh key
ssh-keygen -t rsa -C xxxx@gamil.com   //注冊的main郵箱

執(zhí)行后終端會(huì)顯示

2.將ssh key添加到github上

  • 在終端輸入,mac平臺(tái):open ~/.ssh id_rsa.pub,Windows平臺(tái):start ~/.ssh id_rsa.pub,打開文件id_rsa.pub,拷貝key值。
  • 打開https://github.com/官網(wǎng),登錄后,點(diǎn)擊賬戶-ssh公鑰,輸入拷貝的key值,提交。

3.測試鏈接是否成功

  • 在終端輸入ssh -T git@github.com
    這里會(huì)要求你輸入SSH key密碼,如果剛才生成SSH key時(shí)未輸入密碼,密碼就為空。
  • 看到:Hi 用戶名! You’ve successfully authenticated說明配置成功。

配置成功后SSH會(huì)由黑色變?yōu)榫G色。


4.New repository(新建倉庫)
登錄Github點(diǎn)擊New repository,之后在repository name填入test(遠(yuǎn)程倉庫名),其他設(shè)置默認(rèn)即可,之后點(diǎn)擊Create repository,就成功創(chuàng)建了一個(gè)Git倉庫。

5.本地上傳文件到遠(yuǎn)程庫
依次執(zhí)行以下命令:

mkdir test                                        //創(chuàng)建測試目錄
cd test                                           //進(jìn)入測試目錄    
echo "git測試" >> README.md                   //創(chuàng)建README.md文件并寫入內(nèi)容
git init                                          //初始化
git add README.md                                 //添加文件到緩存
git commit -m "添加 README.md 文件"                //提交并添加備注
git remote add origin git@github.com:賬戶名/倉庫名  //提交到遠(yuǎn)程倉庫
git push -u origin master 

查看遠(yuǎn)程庫

實(shí)例:-v參數(shù)—— 查看每個(gè)別名的實(shí)際鏈接地址

$ git remote       
origin
$ git remote -v    
origin  https://github.com/賬戶名/test (fetch)
origin  https://github.com/賬戶名/test (push)

提取遠(yuǎn)程倉庫

  • 從遠(yuǎn)程倉庫下載新分支與數(shù)據(jù):
git fetch
  • 從遠(yuǎn)程倉庫提取數(shù)據(jù)并嘗試合并到當(dāng)前分支:
git pull

當(dāng)我們需要提取更新的數(shù)據(jù),可以先執(zhí)行 git fetch[別名]讓Git去獲取本地沒有的數(shù)據(jù),然后執(zhí)行git merge[別名]/[branch]將更新的數(shù)據(jù)合并到當(dāng)前分支。

實(shí)例:
通過在線修改README.md文件:

在本地提取更新:


將更新同步到本地:


查看README.md文件內(nèi)容:


刪除遠(yuǎn)程倉庫

  • 刪除遠(yuǎn)程倉庫命令:
git remote rm [別名]

實(shí)例:

新建倉庫origin2:git remote add origin2 git @github.com:別名/test
查看倉庫:git remote -v
刪除倉庫origin2:git remote rm origin2


Git命令練習(xí):點(diǎn)我


2017-04-07 施工ing

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

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