Git知識總覽(一) 從 git clone 和 git status 談起

本篇博客是整理git相關(guān)知識的第一篇,因為之前一直是用SourceTree對Git的命令行操作用的不是特別熟,于是乎過了一遍ProGit(鏈接:https://git-scm.com/book/zh/v1)。本篇博客以及后邊的將要發(fā)的幾篇博客是對之前看ProGit時的筆記的整理。當(dāng)然在整理時,根據(jù)具體示例來梳理了一下知識點,和ProGit上的講解順序有些區(qū)別。本篇博客聊了Git基礎(chǔ)操作的一部分,主要是基于Github上Fork的Masonry倉庫來做的,首先Clone相關(guān)倉庫,然后根據(jù)git status命令的提示引出了一系列的命令操作。

Git的原理就不做過多贅述了,ProGit上聊得挺好。不過還是要聊一下集中版本控制系統(tǒng)和分布式版本控制的區(qū)別。在版本管理中主要包含集中化的版本控制系統(tǒng)(Centralized Version Control Systems,簡稱?CVCS) 例如?CVS、Subversion?以及?Perforce?等 ,和分布式版本控制系統(tǒng)(Distributed Version Control System,簡稱?DVCS), 例如Git、Mercurial、Bazaar?以及?Darcs? 。DVCS的特點為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份。 其中文件的狀態(tài)主要包括已提交(committed)、已修改(modified)和已暫存(staged) 的。這些東西就不細(xì)說了,先看一下git的命令的一些操作。

備注:接下來的幾篇博客的終端操作都是在 Mac 上使用的 ITerm完成的,終端上裝的是oh-my-zsh?(https://github.com/robbyrussell/oh-my-zsh)。


一、獲取遠(yuǎn)程倉庫

為了方便做一些git相關(guān)的基礎(chǔ)操作,就是使用在github上Fork的Masonry的倉庫做實驗吧,然后基于此Fork的倉庫來展開接下來的相關(guān)內(nèi)容。


第一步要做的就是將遠(yuǎn)程倉庫中的代碼克隆到本地,git clone命令做的就是這件事情。其后邊跟的參數(shù)就是上述截圖中的地址,其具體操作如下所示:


在第一部分我們就先簡單的看一下 git clone 的演示操作。首先使用了git clone 命令將遠(yuǎn)端的代碼以及相關(guān)分支信息clone到本地,然后在本地進行了一次提交(git commit), 最后將提交push到遠(yuǎn)端。在接下來的幾篇博客中會陸陸續(xù)續(xù)的介紹到,在此就先不多說了。



二. 由 git status 命令引起的其他命令

我們可以使用?git status?命令來查看相關(guān)文件的狀態(tài),在下方的操作中首先我們對README.md文件使用vim編譯器進行修改并保存, 然后創(chuàng)建了一個名為NewCreateFile的文件。并使用git status命令來查看其相關(guān)的狀態(tài)。

從下方輸出的結(jié)果中不難看出README.md的文件狀態(tài)為 modified, 也就是被修改了,更詳細(xì)的提示為?“Changes not stagged for commit”, 也就是說文件被修改了,但是還沒有在提交(commit)前進行存儲(staged)。并且給了相關(guān)的提示,可以使用?git add <文件名>命令進行存儲,或者使用?git checkout -- <文件名>?命令放棄在工作目錄中的修改。

而我們剛創(chuàng)建的 NewCreateFile 文件處于Untracked (未被跟蹤的狀態(tài)),并且可以使用git add <文件名>來將該創(chuàng)建的NewCreateFile添加到可以被提交(commit)的內(nèi)容當(dāng)中去。并且還給出了一條建議,可以對?NewCreateFile 文件使用?git commit -a?來直接進行提交。

如果你對git的各種狀態(tài)比較熟悉了,也可以使用 git status -s 來查看簡寫的狀態(tài),這種簡寫的狀態(tài)和SVN上的差不多?M - 被修改,A - 被添加,D - 被刪除,R - 重命名,?? - 未被跟蹤 等等,下方遇到其他的狀態(tài)符號時在一一解釋。


根據(jù)上面git status命令的提示內(nèi)容,我們至少可以得到三種命令的使用方式:

暫存文件的命令:git add <文件名>

放棄未暫存文件的修改命令:git checkout -- <文件名>

將被修改的文件暫存并提交的命令:git commit -a?


1、git add

接下來我們可以看一下git add的命令,下方分別將上述兩個文件進行了add, 也就是將文件進行暫存。暫存后,使用了git status命令查看狀態(tài),提示這些修改可以被提交了,并且還可以使用?git reset HEAD <文件名>來取消相關(guān)文件的暫存。使用?git status -s?命令來查看 狀態(tài)標(biāo)記由原來的紅色改成了綠色,并且NewCreateFile的狀態(tài)標(biāo)記由??變成了 A? (新添加文件)。


2、git reset HEAD?

接下來我們根據(jù)提示,看一下?git reset HEAD <文件名>?命令的操作,下方分別對已經(jīng)暫存的兩個文件執(zhí)行了?git reset HEAD <文件名>操作,如下所示。從操作后的結(jié)果可以看出,兩個文件的狀態(tài)是一夜回到了解放前,又回到了之前暫存的狀態(tài)。


3、git checkout -- <文件名>

接下來我們在看一下對未暫存的修改文件進行回滾的操作命令:?git checkout -- <文件名>,根據(jù)上面的提示我們可以知道該操作可以放棄對某個為暫存的文件的修改。接下來我們就來看一下這個命令的操作。不過有一點需要注意,該操作如果生效了,再想找回被丟棄的內(nèi)容就找不回了。也就是說git checkout -- <文件名>是不可逆的,因為其回滾的內(nèi)容并沒有在git中進行暫存和記錄。從下方的操作我們可以看出被修改的README.md回到了未被修改的狀態(tài)之前。


4、git commit -a

接下來我們來看一下上面提到的命令git commit -a?的操作,首先我們再次對README.md進行修改,然后查看一下狀態(tài)。接著使用?git commit -a -m "提交說明"?來進行添加和提交。從該命令執(zhí)行后的狀態(tài)中我們可以看到,git commit -a 只對 狀態(tài)為M的文件有用,而對新增而為添加的問題是不起作用的,因為我們新添加的文件NewCreateFile仍然處于 Untracked 狀態(tài)中。


我們可以使用 git add 命令對 NewCreateFile 文件進行暫存,使用 git commit 命令對暫存的內(nèi)容進行提交。提交后,我們查看狀態(tài)時看到一個提示, 大概是說你的分支已經(jīng)領(lǐng)先遠(yuǎn)端的主分支2個提交,可以使用 git push 操作來發(fā)布你本地的提交。


5、git push

下方是git push操作的相關(guān)內(nèi)容,我本地是配了github的ssh-key的,不過之前clone的時候使用的是https的方式,需要在第一次PUSH的時候都要求輸入用戶名和密碼。每次都輸入用戶名和密碼挺麻煩的稍后我們將使用git的其他命令將其解決掉。


push完畢后,我們可以動github上相應(yīng)的倉庫中可以看到其相關(guān)的修改內(nèi)容了,具體如下:


由上面的內(nèi)容,不難發(fā)現(xiàn),從一開始的git status命令,根據(jù)相關(guān)提示,引出了其他相關(guān)命令。下方是對其相關(guān)命令的總結(jié):

git status?: 查看當(dāng)前倉庫中文件的狀態(tài)。

git status -s?: 文件狀態(tài)的簡寫(M - 修改, A - 添加, D - 刪除, R - 重命名,?? - 未追蹤)。

git add <文件名>?:將后方緊跟的文件進行暫存,以便commit使用。

git reset HEAD <文件名>?: 將已經(jīng)暫存的文件進行撤銷,回到未暫存的狀態(tài)。

git checkout -- <文件名>?:撤銷對尚未暫存文件的修改,該操作不可逆,慎用。

git commit -a?: 對那些被修改的文件單尚未暫存和提交的文件進行暫存和提交。注意:對未暫存的新增文件無效。

git commit?: 對暫存區(qū)的文件進行提交到本地倉庫。

git push?: 將本地倉庫已經(jīng)提交的內(nèi)容發(fā)布到遠(yuǎn)端。



三、查看和修改遠(yuǎn)端地址

1、添加遠(yuǎn)端倉庫地址

根據(jù)上面的操作可以看到,上面的遠(yuǎn)端鏈接是https的。因為我本地是賠了github的ssh-key的,所以也是支持ssh的鏈接的。下方我們將根據(jù) git remote 遠(yuǎn)程倉庫操作來添加上ssh的倉庫地址。下方是一系列的操作:

首先通過?git remote -v?命令來查看當(dāng)前倉庫的遠(yuǎn)端地址,從下方看到是 https格式的。

然后在通過?git remote add?遠(yuǎn)端倉庫地址別名 來添加一個新的倉庫地址,下方添加的是一個ssh的倉庫鏈接。

接著我們再次對遠(yuǎn)端倉庫的鏈接查看時,就會看到相應(yīng)的新添加的倉庫地址。

然后我們隊README文件做了點修改,并push遠(yuǎn)端。在 push 時我們選擇了后來添加的新的遠(yuǎn)端倉庫,可以看出使用的是別名。


下方是push后從github上對應(yīng)的倉庫看到的相關(guān)內(nèi)容,也是可以看到的修改的相關(guān)內(nèi)容的。


2、遠(yuǎn)端倉庫地址刪除和重命名

從上面的內(nèi)容不難看出,兩個倉庫地址其實是重復(fù)的?,F(xiàn)在我們沒必要都將其進行存儲了。我們要刪掉那個https的倉庫,下方是具體的操作步驟。

首先通過?git remote -v?來查看目前現(xiàn)有的遠(yuǎn)端倉庫。

然后通過?git remote rm origin?命令來刪除別名為 origin 的遠(yuǎn)端地址,刪除后,再次查看時,origin的倉庫地址就木有了。

緊接著使用?git remote rename origin_ssh origin?命令,將origin_ssh重命名為origin即可。

最后我們還可以使用?git remote show origin?命令來查看push到遠(yuǎn)端的那個分支上,具體操作步驟如下所示。


今天博客就先到這兒,下篇博客會繼續(xù)聊git命令的其他基礎(chǔ)操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,973評論 1 17
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,866評論 1 26
  • 今天坐享總是被睡意打攪,現(xiàn)在每天睡眠時間七個小時,還是感覺困,有時候睡的越多反而更困。 在坐享中,自動屏蔽所有雜事...
    多維度成長閱讀 153評論 0 0
  • 一再的跟自己說忠于自己的想法,一再的跟自己說做自己就好,一再的跟自己說不要太關(guān)心他人的生活。 其實我不得不承認(rèn)我是...
    葉輕筠閱讀 648評論 0 0
  • 每一次的抬頭,都會不自覺地被天空所吸引。它是那么的遙遠(yuǎn),那么的廣闊,像一面無邊的鏡子,正面一個世界,反面又是另外一...
    林先生好久不見閱讀 362評論 2 4

友情鏈接更多精彩內(nèi)容