Git常用指令及流程詳解

Git基本概念了解

為了方便以及我們之后正確的了解Git的各個指令的操作含義,我們需要了解幾個概念

Git和SVN的差異,以及Git的優(yōu)勢.

SVN 是集中式管理, 所以如果最為公共倉庫的的中央服務器出問題, 所有的工作者都將受到影響.

SVN無法做到本地分支處理, 所以當你去實現(xiàn)一個需要長時間的,創(chuàng)新性的,需要不斷探索的功能的時候,就有可能陷入兩難的局面: 1.如果提交代碼可能會影響到項目的其他模塊以及他人工作. 2. 不提交代碼就無法很好的保護代碼版本, 當你自己想要回到某個代碼片段的時候就無法做到.

Git 是分布式管理, 作為客戶端不止是提取了公共倉庫的文件快照, 而是把代碼完整的鏡像下來, 所以.如果協(xié)同工作的服務器出現(xiàn)了什么故障, 也可以時候通過本地鏡像文件去很好的恢復.

另外因為Git是提供本地的倉庫管理系統(tǒng), 所以對于網(wǎng)絡的依賴度并不高. 就算沒有網(wǎng)也依然可以繼續(xù)工作.等到有網(wǎng)絡的時候再推送到公共服務器即可.

Git的文件狀態(tài) (Git可以整體把文件分為已跟蹤,和未開始跟蹤的兩種狀態(tài))

已修改(modifired): 表示修改了文件, 但是還沒有保存到本地數(shù)據(jù)庫中.(即文件的修改部分是Git的未跟蹤狀態(tài))

已暫存(staged) : 表示對一個已修改文件的當前版本做了標記, 使之包含在下次可以提交的內(nèi)容中去

已提交(commit) : 表示數(shù)據(jù)已經(jīng)安全的保存在了本地數(shù)據(jù)庫中.

基本的Git 工作流程

在工作目錄中修改文件

暫存文件, 將文件的快照放入暫存區(qū)域

提交更新, 找到暫存區(qū)域的文件,將快照永久性存儲到Git倉庫目錄

因為現(xiàn)在我們在使用Git的時候一般都是會關聯(lián)一個遠程倉庫的, 所以在鏈接遠程倉庫的前提下,如果你想將本地的代碼提交到遠程公共倉庫, 即在這三步之后先更新代碼,然后將代碼推送到遠程倉庫即可.

這里也要給一個小的提示,我們在配置Git倉庫的時候一定要配置忽略文件.因為其他文章寫的都挺不錯的, 所以這篇文章就不在做多余的贅述 , 下面給出幾個忽略文件配置的參考文章Git忽略文件的具體配置,Git忽略文件配置

常用Git指令

git help

查看git指令幫助說明文檔, 后續(xù)可以跟具體的指令來查看指定的幫助.

git status

查看文件狀態(tài), 可以看到你的哪些文件做了更改以及新增了哪些文件, 是否已經(jīng)提交到了本地倉庫,以及是否有需要上傳到遠程的文件.

建議經(jīng)常使用.你可以在你提交文件之前先查看一下你的文件狀態(tài), 查看有哪些文件沒有提交, 以及提交之后時候有沖突之類.

git status 文件名

查看指定文件的狀態(tài)

下面舉例一下各種狀態(tài)下status 的輸出情況:(下面舉例中的XXXX都用來表示為項目中的文件)

如下的情況說明你的Git文件當前狀態(tài)是十分干凈的,沒有什么文件改動, 也沒有什么未跟蹤的文件.并標示出來當前所處分支

$ git statusOn branch masternothing to commit, working directory clean

而如果出現(xiàn)如下情況, 即有Untracked files:, 并且其下面有內(nèi)容, 則表示有新文件沒有被跟蹤到, 需要先加入到暫存當中,才能在下次提交中提交該文件

$echo'My Project'> README$ git statusOn branch masterUntracked files:? (use "git add ..." to include in what will be committed)? ? XXXXnothing added to commit but untracked files present (use "git add" to track)

或者說是修改了一個已經(jīng)被跟蹤的文件,則他的再次更改的部分就可以理解成為是沒有被標記跟蹤的狀態(tài), status會有以下大概輸出格式Changes not staged for commit:

$ git statusOn branch masterChanges not staged for commit:? (use "git add ..." to update what will be committed)? (use "git checkout -- ..." to discard changes in working directory)? ? modified:? XXXX

當已經(jīng)有文件已經(jīng)添加入暫存區(qū), 但是還未提交時, status會做如下顯示, 即Changes to be committed:會顯示,并在下方會有內(nèi)容

$ git statusOn branch masterChanges to be committed:? (use"git reset HEAD ..."to unstage)newfile:? XXX? ? modified:? XXXX

其實你會發(fā)現(xiàn)以上的status輸出中, Git都是會給出我們操作提示的, 比如在第一種情況下,有文件添加的時候, Git會在下方提示(use "git add ..." to include in what will be committed). 就是來提示你可以使用git add xxxx的指令來進行操作

git status -s或者git status -- short

如果你覺得上面status的輸出格式不夠簡潔,太過繁雜的話, 可以使用這個指令.轉換為一種緊湊型的status格式輸出. 用一下舉例

$ git status -sM READMEMM RakefileA? lib/git.rbM? lib/simplegit.rb?? LICENSE.txt

其中 :

??表示了這個文件尚未被標記跟蹤,

A表示新添加到暫存區(qū)的文件

M表示修改的文件.

如果你仔細觀察就會發(fā)現(xiàn)M出現(xiàn)的位置是會有差異的,? 當M出現(xiàn)在靠右的位置的時候,代表了這個這個文件的修改部分還沒有加入到暫存區(qū), (即下次的提交是無法提交這個文件的修改部分, 如果提交就需要先放入暫存區(qū)). 而靠左邊的M則表示了文件的修改部分已經(jīng)放入到了修改區(qū)域.

而像上圖示例中的Rakefile文件. 左右兩個位置都標識出來了M, 則表示之前add到暫存區(qū)了一份修改之后, 本地又再次做了一些修改, 所以一部分修改在暫存區(qū)沒有提交, 還有一部分修改尚未添加到暫存區(qū).這里我們就要注意到, 我們實際上提交的文件, 是以加入到暫存區(qū)的修改文件為最后的提交文件的,而不是你最后的提交時間為止的修改文件, 所以一定要注意如果在將文件加入暫存區(qū)之后又做了修改不要忘記將其放入暫存區(qū)

獲取/創(chuàng)建項目

git init

在當前文件路徑下初始化一個git倉庫

git init 路徑名稱

在指定的路徑下初始化倉庫

git clone 遠程倉庫地址

建立Git本地倉庫管理,關聯(lián)遠程倉庫,并將內(nèi)容拉取下來.

其實這個指令是幾個指令的一個封裝來實現(xiàn)效果的, 它創(chuàng)建了一個新的目錄, 切換到新目錄.然后git init來初始化一個空的Git倉庫,之后關聯(lián)你指定的遠程倉庫 (git remote add), 再對遠程倉庫git fetch, 最后通過git checkout將遠程倉庫的最新提交檢出到本地的工作目錄

一般情況下,如果遠程倉庫有一個已經(jīng)在制作的項目, 而你需要本地從零開始跟進這個項目,可以直接用這個指令將項目拉取下來進行跟進.

Git倉庫配置

git config

git的配置信息. 單獨這樣配置, 作用域只是你當前的這一個git項目

git config user.name xxx

配置你的個人用戶名稱. 這個比較重要一點, 用來查看說明是誰提交了更新.

git config user.email xxx

配置你的郵箱信息.

git config -l或者git config --list

查看你的git配置信息

git config --global

配置全局的Git信息. 可以理解為將作用域擴大到了你的整個電腦. 這樣當你全局配置了一些通用信息之后 新的git項目就可以不用再次手動配置, 建議 用戶名以及郵箱 如果沒有特殊需求可以直接這樣配置即可, 省事兒.

用法也只是在中間加了--global. 后面的指令使用和 之前的一樣, 比如你要設置全局的用戶名, 即git config --global user.name xxx

提交/添加/撤銷

git add 文件名或者git add .

add指令是一個多功能指令它可以有以下功能:

1.給指定文件添加跟蹤放入暫存區(qū)

2.把已經(jīng)跟蹤的文件放到暫存區(qū)

3.把合并時有沖突的文件標記為已解決狀態(tài)

在Git當中, 我們不能把add理解成添加文件到下一次的提交, 而要把他理解成添加了內(nèi)容到下一次的提交當中.可能當你從SVN轉過來之后可能剛開始會有點疑惑, 為什么有的文件你已經(jīng)add過了, 你依然需要使用add 指令將其加入暫存區(qū). 因為你使用add指令添加的是內(nèi)容, 而不是內(nèi)容,這么想的話,可能會更好理解一點吧.

如果你需要add的文件很多, 或者你懶得去打文件名.? 你可以使用git add.( 注意, 后面跟的是一個.)

這個指令可以自動將所有未標記跟蹤的內(nèi)容加入暫存區(qū).

git commit 文件名 -m 提交信息/備注

將暫緩區(qū)的文件提交到當前的本地分支倉庫.

注意!,一定要跟提交信息, (可以用-m或者-F). , 只有寫了信息才會提交成功,如果你提交的時候沒有編寫信息會進入vim編輯讓你編輯提交信息, 如果你對vim不熟的話還是直接 用:q退出后重新提交吧.

這邊需要注意的是 如果你使用 -m 指令后面直接跟信息的話, 如果信息是英文, 則需要用''將信息包裹, 否則git會不識別, 并會報一下錯誤. 猜測在純英文狀態(tài)下無法識別為字符串吧

fatal: Pathswith-a doesnotmake sense.

git commit -a -m 提交信息/備注或者git commit --all -m 提交信息/備注

將已經(jīng)標記的文件修改跳過暫存區(qū), 直接提交上去 . 其實就是減少了我們的工作流程, 減少了add的這一步

但是需要注意的是:

這個指令是對已經(jīng)處于標記的文件有效,(即本身文件在Git倉庫中存在, 只是做了內(nèi)容修改的文件) 如果有新增的文件, 則不能夠直接用commit -a去省略操作了.還是需要將新添文件加入(add .)暫緩區(qū),添加git標記,使git能夠跟蹤才可以

git push [remote-name] [branch-name]

將本地文件中你所指定的分支(branch-name)內(nèi)容, 推送到指定遠程倉庫(remote-name).

需要注意的是,如果遠程倉庫中有數(shù)據(jù)是你沒有拉取下來的,那么你需要先執(zhí)行git pull指令將數(shù)據(jù)拉取下來,然后再push.否則會報錯.和SVN使用的時候需要先update 再commit同理.

remote-name:是你對遠程倉庫的簡寫名 .如果你沒有特殊設置的話.默認名為origin.如果你是使用了clone指令克隆的一個遠程倉庫的話,那么Git會默認設置成origin.

branch-name是你的分支名稱, 如果你是在默認分支上, 而你有沒有特別命名的話, 默認名為master

git push [remote-name]

如果你所在分支于遠程倉庫分支存在標記跟蹤關系, 則可以省略后面的[branch-name],git會默認推送當前所在分支到遠程倉庫所在分支

git push

如果你所在分支僅存在一條標記追蹤關系, 則[remote-name]嵌纲、[branch-name]都可以省略. git會默認推送當前分支到對應的遠程倉庫分支.

我們通常的提交操作可以使用如下流程指令:

git status查看狀態(tài),如果有新增文件 則執(zhí)行git add .

git commit -a -m [提交信息]提交到本地倉庫

如果需要推送到遠程倉庫則執(zhí)行git push(在你沒有更改默認remote-name以及分支名的情況下)

git status查看是否完整成功提交代碼.

遠程倉庫相關

git remote

通常在我們執(zhí)行對遠程倉庫的相關操作的時候, 都會以此命令作為前綴

git remote add [remote-name] [URL]

給Git倉庫新添一個遠程倉庫, 你可以給同一個項目添加多個遠程倉庫, 來處理不同的需求,和他人合作.

[remote-name]是你對這個遠程倉庫設置的一個簡稱, 你可以在后續(xù)的操作中用這個簡稱指代這個遠程倉庫. 通常沒有什么特別的需求且你這個Git倉庫只需要鏈接一個遠程倉庫的話,那么你的這個遠程倉庫可以設置為默認名origin.

[URL] 即為你的遠程倉庫地址.

git remote -v

查看當前項目所連接的所有遠程倉庫

如果你有多個遠程倉庫, 你會受到一個類似于下方的輸出

$ git remote -vbakkdoor? https://github.com/bakkdoor/grit (fetch)bakkdoor? https://github.com/bakkdoor/grit (push)cho45? ? https://github.com/cho45/grit (fetch)cho45? ? https://github.com/cho45/grit (push)defunkt? https://github.com/defunkt/grit (fetch)defunkt? https://github.com/defunkt/grit (push)#fetch : 標識了你的拉取地址#push : 標識了你的推送數(shù)據(jù)的地址

git remote show [rename-name]

查看指定的遠程倉庫的信息.

可以看到遠程倉庫都有哪些倉庫, 這些倉庫本地是否已經(jīng)標記跟蹤. 從遠程倉庫的拉取的數(shù)據(jù)會和本地的哪一個分支合并數(shù)據(jù). 本地分支的數(shù)據(jù)會推送給遠程倉庫的哪一個分支等. 具體可以看到以下示例.

$ git remote show origin* remote origin? Fetch URL: https://github.com/schacon/ticgitPush? URL: https://github.com/schacon/ticgitHEAD branch: master? Remote branches:? ? master? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tracked? ? dev-branch? ? ? ? ? ? ? ? ? ? ? ? ? tracked? Local branch configuredfor'git pull':? ? master mergeswithremote master? Local ref configuredfor'git push':? ? master pushes to master (up to date)

git remote rename [remote-old-name] [remote-new-name]

對遠程倉庫的進行重命名,[remote-old-name]表示的是你的遠程倉庫當前的簡稱.[remote-new-name]表示的是需要改成的名字.

git remote rm [remote-name]

移除遠程倉庫的關聯(lián)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钳榨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子累魔,更是在濱河造成了極大的恐慌荡陷,老刑警劉巖态罪,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黎茎,死亡現(xiàn)場離奇詭異地消,居然都是意外死亡炉峰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門脉执,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疼阔,“玉大人,你說我怎么就攤上這事∑爬龋” “怎么了迅细?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淘邻。 經(jīng)常有香客問我茵典,道長,這世上最難降的妖魔是什么宾舅? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任统阿,我火速辦了婚禮,結果婚禮上贴浙,老公的妹妹穿的比我還像新娘砂吞。我一直安慰自己,他們只是感情好崎溃,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布蜻直。 她就那樣靜靜地躺著,像睡著了一般袁串。 火紅的嫁衣襯著肌膚如雪概而。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天囱修,我揣著相機與錄音赎瑰,去河邊找鬼。 笑死破镰,一個胖子當著我的面吹牛餐曼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲜漩,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼源譬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孕似?” 一聲冷哼從身側響起踩娘,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喉祭,沒想到半個月后养渴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泛烙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年理卑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔽氨。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡傻工,死狀恐怖霞溪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情中捆,我是刑警寧澤鸯匹,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站泄伪,受9級特大地震影響殴蓬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟋滴,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一染厅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧津函,春花似錦肖粮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至允坚,卻和暖如春魂那,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稠项。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工涯雅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人展运。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓活逆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拗胜。 傳聞我的和親對象是個殘疾皇子蔗候,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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