git基礎(chǔ)知識(shí)

Git 基礎(chǔ)

第一章 下載以及使用

下載地址:

https://github.com/

1.1配置git

? 在命令行模式里輸入以下命令

? git config --gobal user.name "用戶名"

? git config --gobal user.email "郵箱名"

注:全英文,不能用中文

? 輸入完后檢查是否輸入成功

? git config --list

若:

img1
img1

? 顯示除了user.name 以及 user.email 即輸入成功;

1.2Git理論基礎(chǔ)

#####       1.三顆樹

? 工作區(qū)域 暫存區(qū)域 Git倉庫

img2
img2
    #####       2.Git的工作流程

? 1.在工作目錄中添加,修改文件

? 2.將需要進(jìn)行版本管理的文件放入暫存區(qū)域

? 3.將暫存區(qū)域的文件提交到Git倉庫

? Git管理的三種狀態(tài):

? 1.以修改 modified

? 2.以暫存 staged

? 3.已提交 committed

#### 1.3 創(chuàng)建Git項(xiàng)目

? 1.在磁盤中創(chuàng)建一個(gè)文件夾MyProject 用來存放你的Git項(xiàng)目

? 2.然后打開命令CMD 進(jìn)入存放MyProject 的磁盤 , 并用輸入 cd MyProject 進(jìn)入文件夾

? 3.輸入命令 git init 會(huì)顯示初始化了一個(gè)空的git倉庫(如圖):

?
img3
img3
    并且在文件夾中創(chuàng)建了一個(gè)git文件(如圖):

?
img4
img4

? 4.在當(dāng)前MyProject文件夾內(nèi)創(chuàng)建一個(gè)md類型的文本(文本名為README) 并以notepad++打開(為防止亂碼,可把notepad++內(nèi)的編碼格式改為 UTF-8無BOM編碼格式; (即工作流程中的第一步)

? 5.輸入命令: git add README.md (即工作流程中的第二步,將README文件添加至?xí)捍鎱^(qū)域)

? 回車之后再輸入: git commit -m "add a readme file" (commit 提交,即工作流程中的第三步,將暫存區(qū)域內(nèi)的README文件提交到git倉庫)

? 引號(hào)內(nèi)是寫入對(duì)這次提交做的一個(gè)說明(做了什么),

? 顯示如下圖:

img5
img5

?

1.4 git status

作用: 查看此時(shí) git 的狀態(tài)

? 輸入 git status 即可查看此時(shí)git的狀態(tài) (如圖):

?
img6
img6

? 在一個(gè)默認(rèn)的分區(qū) master 中

? 沒有需要提交的文件,當(dāng)前的工作目錄是干凈的

1.5添加協(xié)議 開源

? 1.在當(dāng)前文件夾創(chuàng)建一個(gè)md (文件名為 LICENSE) ,里面寫MIT的開源協(xié)議

? 將README內(nèi)的內(nèi)容進(jìn)行編輯;

? 此時(shí) 在 git status 下查看 ,可發(fā)現(xiàn):

?
img7
img7

? 此時(shí)發(fā)現(xiàn) , README.md 是已經(jīng)添加到了暫存區(qū)域并提交的

? 而 LICENSE.md 是未被跟蹤的狀態(tài) ( 即在工作區(qū)域內(nèi)的,圓括號(hào)內(nèi)代表git給我們的建議 );

?

? 2.將LECENSE添加至?xí)捍鎱^(qū)域并查看狀態(tài)

?
img8
img8

?

1.6 git reset HEAD

將LECENSE添加至?xí)捍鎱^(qū)域后,會(huì)提示出 是否使用 git reset HEAD 的操作(若不 操作則不用理他)

作用: 撤銷上一次的操作 ,返回上一個(gè)版本 HEAD表示當(dāng)前版本 上一個(gè)表示HEAD~

是將git倉庫中的內(nèi)容恢復(fù)到暫存區(qū)域中

一般 會(huì) HEAD(1100) 這樣寫

? git reset <版本快照 文件名/路徑> 也可以指定文件名

1.git reset --mixed HEAD~ (默認(rèn))

? -移動(dòng)HEAD的指向,將其指向上一個(gè)快照

-將HEAD移動(dòng)后指向的快照回滾到暫存區(qū)域
  1. git reset --soft HEAD~ (僅僅只是修改了HEAD指針,相當(dāng)于撤銷git commit 這一步而已

    -移動(dòng)HEAD的指向,將其指向上一個(gè)快照

    1. git reset --hard HEAD~ (同時(shí)影響了三顆樹)

? -移動(dòng)HEAD的指向,將其指向上一個(gè)快照

? -將HEAD移動(dòng)后指向的快照回滾到暫存區(qū)域

? -將暫存區(qū)域的文件還原到工作目錄

區(qū)別詳情請(qǐng)參考1.9的例1

1.7 git checkout

作用1: git checkout --<file> 將暫存區(qū)內(nèi)的文件內(nèi)容覆蓋工作目錄的文件內(nèi)容

作用2: git checkout 分支名 切換到指定分區(qū)

如在1.5的操作中,我們將LICENSE的這個(gè)文件提交到了暫存區(qū)域中,在使用git commit -m " add a license file" 命令將其提交到git倉庫;

之后,如果我們對(duì)LICENSE內(nèi)的內(nèi)容進(jìn)行編輯或者修改,如將LICENSE協(xié)議內(nèi)首行的<year>換為2017;

( 此時(shí)可以理解為LICENSE有倆個(gè)版本,一個(gè)是最開始在暫存區(qū)中的版本(即year),一個(gè)是工作目錄下的版本(即2017)

此時(shí),在輸入 git status 來查看git的工作狀態(tài),會(huì)提示出

  1. 是否將已改動(dòng)的文本添加至?xí)捍鎱^(qū)域中 ;

  2. 是否將暫存區(qū)域中對(duì)應(yīng)的這個(gè)文件內(nèi)容覆蓋工作目錄的文件內(nèi)容

    如下圖( README 和 LICENSE 倆個(gè)文件都是改動(dòng)過的 ):

img9
img9

此時(shí) 若輸入git add LICENSE.md 回車

? git commit -m " add a license file"

? 則將暫存庫里和工作目錄中的LICENSE 的內(nèi)容都修改了

? 若輸入 git checkout -- LICENSE.md

? 則暫存庫里的內(nèi)容沒被修改,并且工作目錄中的內(nèi)容也會(huì)變?yōu)闀捍鎺熘械膬?nèi)容

1.8 git log

作用: 查看歷史提交

 歷史提交 最新的提交在最頭上;

? git log --decorate --oneline 只顯示快照的說明 ID 不顯示作者,日期等其他信息(能精簡快照歷史信息)

? --graph 以圖形的方式顯示

? --all 顯示所有的分支

? 如下圖:有倆個(gè)分支master feature

?
img15
img15

? d1d14c6表示的是倆個(gè)分支共同擁有的

1.9 git reset 和 git checkout 的區(qū)別

img10
img10

? 不難看出

? checkout 是將工作區(qū)域內(nèi)的內(nèi)容恢復(fù)成暫存區(qū)域

? reset 是將git倉庫內(nèi)的內(nèi)容恢復(fù)成上一個(gè)版本

? 恢復(fù)文件:

? checkout 命令和 reset 命令都可以用于恢復(fù)指定快照的指定文件,并且他們都不會(huì)改變HEAD指針的指向.

? 區(qū)別是: reset 命令只將指定文件恢復(fù)到暫存區(qū)域(--mixed) , 而checkout 命令是同時(shí)覆蓋暫存區(qū)域和工作目錄.

? ( 如果你想使用 git reset --hard HEAD~ README.md 命令讓reset 同時(shí)覆蓋工作目錄,但git會(huì)告訴你不行,因?yàn)榇藭r(shí),reset不允許使用--soft或者--hard 選項(xiàng).SO 恢復(fù)文件上,reset要安全一些)

? 區(qū)別:

? 1.對(duì)于reset --hard 命令,checkedout 命令更安全,因?yàn)?checkedout 命令在切換分支前會(huì)先檢查一下當(dāng)前的工作狀態(tài),如果不是 "clean"的話,git不會(huì)允許你這樣做,而 resert --hard 命令則是直接覆蓋所有數(shù)據(jù);

? 2.如何更新HEAD指向, reset 命令會(huì)移動(dòng) HEAD所在分支的指向,而 checkout 命令只會(huì)移動(dòng)HEAD自身來指向另一個(gè)分支.

例1:

? 1.在master 中創(chuàng)建3個(gè)txt , 1.txt 2.txt 3.txt 并添加到git 倉庫,

? 2.git checkout -b feature 創(chuàng)建一個(gè)分支feature并將指針指向它,

? 3.在分支feature中創(chuàng)建1個(gè)名為 feature1.txt 的文件并添加到git倉庫,

? 4.使用 git checkout master 跳回到 master中,再在master中創(chuàng)建1個(gè)名為 master1.txt 的文件并添加到git倉庫中,

? 5.再執(zhí)行 git reset --hard feature 此時(shí)查看git log 對(duì)比第4步和第5步

?
img17
img17

? 說明: git reset --hard feature命令將HEAD 指向的分支(即master)以及HEAD本身都切到了feature分支里,換句話說,原來的快照已經(jīng)消失了(master1.txt那個(gè)快照不見了).

? 6.此時(shí)執(zhí)行 git reset --soft HEAD~ 和 git reset HEAD~

?
img18
img18

? 說明 : --soft 僅僅將指針HEAD指向了上一個(gè)快照, --mixed 也會(huì)將指針HEAD指向上一個(gè)快照, mixed還會(huì)將HEAD指針移動(dòng)后的快照回滾到暫存區(qū)域 此時(shí)查看git status:

?
img19
img19

? 說明: 回到了" 還沒有將3.txt 添加到暫存區(qū)域 " 時(shí)

例子

  1. 在E盤創(chuàng)建文件夾MyProject,

  2. 在CMD 進(jìn)入E盤中的MyProject文件夾內(nèi): E: 回車 cd MyProject ;

  3. 創(chuàng)建空的git倉庫: git init

  4. 在MyProject 文件夾內(nèi)創(chuàng)建README.md 文件

  5. 將README.md文件添加到暫存區(qū)域: git add README.md

  6. 將README.md文件提交到git倉庫: git commit -m " add a readme file";

  7. 在MyProject文件夾內(nèi)創(chuàng)建LICENSE.md文件,并寫上MIT協(xié)議

  8. 將LICENSE.md文件添加到暫存區(qū)域: git add LICENSE.md

  9. 修改LICENSE.md文件內(nèi)的year 改為2017

  10. 執(zhí)行 : git status 彈出: 1. use " git add <file>.." 2. use " git checkout -- <file>.."

  11. 執(zhí)行 : git add LICENSE.md 和 git commit -m " add a license file";

  12. 執(zhí)行 : git log 查看歷史記錄:

    img11
    img11

結(jié)構(gòu)模型:

img12
img12
  1. 執(zhí)行 git reset HEAD~ 回車 git status

    ![img13](https://github.com/LinDaiDai/guidebooks-to-git/blob/master/basisGitImg/img13.png?raw=truef git\img13.png)

結(jié)構(gòu)模型

img14
img14

此時(shí),git會(huì)檢測(cè)到工作區(qū)域內(nèi)的LICENSE版本比暫存區(qū)域內(nèi)的版本新,所以會(huì)有提示,是否要更新

第二章 版本對(duì)比

1. git diff

a、查看尚未暫存的文件更新了哪些部分,不加參數(shù)直接輸入
? git diff
此命令比較的是工作目錄(Working tree)和暫存區(qū)域快照(index)之間的差異
也就是修改之后還沒有暫存起來的變化內(nèi)容。

b腋妙、查看已經(jīng)暫存起來的文件(staged)(即git倉庫中的快照)的差異
? git diff --cached 快照ID 沒加ID名就是和上次提交時(shí)的快照之間(HEAD)最新的git倉庫中的快照的差異
? git diff --staged 快照ID
顯示的是下一次commit時(shí)會(huì)提交到HEAD的內(nèi)容(不帶-a情況下)

c 比較倆個(gè)歷史版本之間的快照

git diff STAID1 STAID2

d.比較 工作目錄(Working tree) 和git倉庫中的快照

git diff STAID(要比較的那個(gè)快照的ID名)

第三章 實(shí)用小技巧

1.修改最后一次提交

? 情景一: 版本剛一提交(commit)到倉庫,突然想起漏掉倆個(gè)文件還沒有添加(add);

? 情景二: 版本剛一提交到倉庫,突然想起版本說明寫得不夠全面,

執(zhí)行帶 --amend 選項(xiàng)的commit操作 Git就會(huì)"更正"最近的一次提交: git commit --amend

? 進(jìn)入更正界面 大寫I 將要修改的地方修改 esc shift + s 保存并退出 此時(shí)查看歷史,發(fā)現(xiàn)快照并沒有增加一個(gè),而是在原本的快照基礎(chǔ)上進(jìn)行了修改

? 若不想修改 大寫Q 輸入q! 回車 退出當(dāng)前更正界面

2.恢復(fù)刪除的文件

? 若在文件夾中不小心將文件刪除,

? git checkout -- <file> 即可看到文件又恢復(fù)到了文件夾中

3.從git中刪除文件

? 情形一:

? 若一個(gè)文件你已經(jīng)提交到了git倉庫,想讓它刪除掉并且沒有任何記錄

? 先執(zhí)行:

? git rm <file>

? 該命令刪除的只是工作目錄和暫存區(qū)域的文件,也就是取消跟蹤,在下次提交時(shí)不納入版本管理.(但在git倉庫還是會(huì)有快照的歷史記錄)

? 再執(zhí)行:

? git reset --soft HEAD~

? 此時(shí)再查看git log 就發(fā)現(xiàn)歷史記錄中并沒有剛剛刪除的那個(gè)快照;

? 情形二:

? 若一個(gè)文件你添加到了暫存區(qū)域,之后又對(duì)工作區(qū)域的文件進(jìn)行的修改,

? 執(zhí)行: git rm <file> 時(shí),git 會(huì)提示你 此時(shí) 暫存區(qū)域和工作區(qū)域有倆個(gè)版本的文件,問要?jiǎng)h除哪一個(gè);

? 若執(zhí)行: git rm -f <file> git 會(huì)將倆個(gè)版本都刪除(一個(gè)-)

? git rm --cached <file> git會(huì)刪除暫存區(qū)域, 保留工作區(qū)域(倆個(gè)-)

#### 4.git重命名文件

? git mv <原來的文件名> <改之后的文件名>

? 例: git mv game.html workgame.html

第四章 Git分支

#### 1:創(chuàng)建分支

? git brance 分支名

? ![](E:\每日筆記\course of git\img16.png)

#### 2:切換分支

? git checkout 分支名

? git checkout -b feature2 創(chuàng)建并切換到feature2的分支

3.合并分支

? git merge 分支名

? 如此時(shí)再master分支中,想將feature 的分支合并過來: git merge feature

? 若不同分支中有相同名稱的文件,文件內(nèi)容卻不同,此時(shí)合并時(shí)git會(huì)提示有沖突CONFLICT,需要我們?nèi)藶槿ズ喜?/p>

? 打開文件將HEAD 內(nèi)的內(nèi)容和feature的內(nèi)容合并起來保存并退出

? 此時(shí)再執(zhí)行 git status 操作, 可發(fā)現(xiàn)git提示你git add <file> 執(zhí)行g(shù)it add <file>后,執(zhí)行 git commit -m " add fixed file";

? 執(zhí)行g(shù)it log --decorate --oneline --graph --all

? 會(huì)發(fā)現(xiàn)倆分支合并到了一起

4.刪除分支

? git brand -d 分支名

第五章: 將本地項(xiàng)目上傳到GitHub

? 1.在GitHub上創(chuàng)建一個(gè)git 倉庫 : 點(diǎn)Great a new repository;

? 2.在Github上設(shè)置好SSH密鑰并創(chuàng)建好git遠(yuǎn)程倉庫后,就可以和本地關(guān)聯(lián)了 在本地git倉庫的命令欄中輸入:

? $ git remote add origin <GitHub上創(chuàng)建好的倉庫的地址>

? 3.將本地庫里的所有內(nèi)容推送到遠(yuǎn)處倉庫(也就是GitHub上了)通過:

? $ git push -u origin master

? 4.由于新建的遠(yuǎn)程倉庫是空的 所以第一次推送要加上 -u 等遠(yuǎn)程倉庫有了內(nèi)容之后就可以直接通過:

? $ git push origin master

? 注: 這里有個(gè)坑需要注意一下,就是在上面第七步創(chuàng)建遠(yuǎn)程倉庫的時(shí)候讯榕,如果你勾選了Initialize this repository with a README(就是創(chuàng)建倉庫的時(shí)候自動(dòng)給你創(chuàng)建一個(gè)README文件)骤素,那么到了第九步你將本地倉庫內(nèi)容推送到遠(yuǎn)程倉庫的時(shí)候就會(huì)報(bào)一個(gè)failed to push some refs to https://github.com/guyibang/TEST2.git的錯(cuò)。

? 這是由于你新創(chuàng)建的那個(gè)倉庫里面的README文件不在本地倉庫目錄中愚屁,這時(shí)我們可以通過以下命令先將內(nèi)容合并以下:

$ git pull --rebase origin master

? 然后你在執(zhí)行 push 就可以了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末济竹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霎槐,更是在濱河造成了極大的恐慌送浊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栽燕,死亡現(xiàn)場離奇詭異罕袋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碍岔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門浴讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔼啦,你說我怎么就攤上這事榆纽。” “怎么了捏肢?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奈籽,是天一觀的道長。 經(jīng)常有香客問我鸵赫,道長衣屏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任辩棒,我火速辦了婚禮狼忱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘一睁。我一直安慰自己钻弄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布者吁。 她就那樣靜靜地躺著窘俺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪复凳。 梳的紋絲不亂的頭發(fā)上瘤泪,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天灶泵,我揣著相機(jī)與錄音,去河邊找鬼对途。 笑死丘逸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀宋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仲锄,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼劲妙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起儒喊,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤镣奋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后怀愧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侨颈,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年芯义,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哈垢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扛拨,死狀恐怖耘分,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绑警,我是刑警寧澤求泰,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站计盒,受9級(jí)特大地震影響渴频,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜北启,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一卜朗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暖庄,春花似錦聊替、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肩钠,卻和暖如春泣港,著一層夾襖步出監(jiān)牢的瞬間暂殖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工当纱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呛每,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓坡氯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親箫柳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子手形,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • 安裝Git(Debian或Ubuntu Linux) Debian或Ubuntu Linux,通過一條 sudo ...
    Sherry鳳閱讀 254評(píng)論 0 0
  • 本文包括git的簡介悯恍、基本使用方法库糠、部分原理這么好用的工具必須安利大家使用,真的是越使用越覺得其強(qiáng)大的功能涮毫。用過圖...
    Q琴酒閱讀 801評(píng)論 0 1
  • 春意徘徊在窗臺(tái)上 手指按住了一線陽光 牽住了太陽的光芒 自此沒有了日夜更替 陰陽流轉(zhuǎn) 失了此岸彼岸 歲月在水中蕩漾...
    宴云閱讀 293評(píng)論 0 0
  • “走吧瞬欧。” 西寧搖了搖頭罢防,將頭埋進(jìn)了一頭烏黑長發(fā)艘虎,讓人看不到她的表情,一時(shí)間篙梢,我琢磨不透她在想什么顷帖。 我沒有說話。...
    方巛閱讀 220評(píng)論 0 1
  • 我是一棵樹 佇立在黃河邊 一片汪洋不見 遠(yuǎn)眺中條山 隔望鸛雀樓 春來秋往常相伴 孤獨(dú) 如你我 在此守望 那可愛的人...
    妙心閱讀 190評(píng)論 0 1