Git介紹及基本操作

來源:互聯網
上載者:User

標籤:

Git基本概念

在Git中,我們將需要進資料列版本設定的檔案目錄叫做一個倉庫(repository),每個倉庫可以簡單理解成一個目錄,這個目錄裡面的所有檔案都通過Git來實現版本管理,Git都能跟蹤並記錄在該目錄中發生的所有更新。

現在我們已經知道什麼是repository(縮寫repo)了,假如我們現在建立一個倉庫(repo),那麼在建立倉庫的這個目錄中有一個“.git”的檔案夾。這個檔案夾非常重要,所有的版本資訊,更新記錄,以及Git進行倉庫管理的相關資訊全部儲存在這個檔案夾裡面。所以,不要修改/刪除其中的檔案,以免造成資料的丟失。

進一步的講解請參考下面一張圖,大概展示出了我們需要瞭解的基本知識。

 根據上面的圖片,下面給出了每個部分的簡要說明:

  • Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。
  • WorkSpace:需要通過Git進資料列版本設定的目錄和檔案,這些目錄和檔案組成了工作空間。
  • .git:存放Git管理資訊的目錄,初始化倉庫的時候自動建立。
  • Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo之前,我們可以把所有的更新放在暫存區。
  • Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。
  • Stash:是一個工作狀態儲存棧,用於儲存/恢複WorkSpace中的臨時狀態。

 有了上面概念的瞭解,下面就開始在本地repo上進行Git操作了。

建立倉庫

通過“Git Bash”命令列視窗進入到想要建立版本倉庫的目錄,通過“git init”就可以輕鬆的建立一個倉庫。

這時,我們的倉庫中會自動的產生一個“.git”檔案夾,這個就是我們前面提到的Git管理資訊的目錄。

添加

現在我們在倉庫中建立一個“test.txt”的文字檔,內容如下。

123123

通過"git status"可以查看WorkSpace的狀態,看到輸出顯示"test.txt"沒有被Git跟蹤,並且提示我們可以使用"git add <file>..."把該檔案添加到待提交區(暫存區)。

注意,如果添加到暫存區,這時的更新只是在WorkSpace中。

使用"git add test.txt"或者"git add .",然後繼續查看WorkSpace的狀態。這時發現檔案已經被放到暫存區。

這時的更新已經從WorkSpace儲存到Stage中。

最後,我們就可以通過“git commit -m”來提交更新了。-m後面跟的是對commit的描述(message)。

這時的更新已經從Stage儲存到了Local Repo中。

通過上面的操作,檔案"test.txt"就成功的被添加到了倉庫中。

更新

假設現在需要對"test.txt"進行更新,修改檔案後,查看WorkSpace的狀態,會發現提示檔案有更新,但是更新只是在WorkSpace中,沒有到暫存區中。

莫語常言道知足,萬事至終總是空。理想現實一線隔,心無旁騖腳踏實。 誰無暴風勁雨時,守得雲開見月明。花開複見卻飄零,殘憾莫使今生留。

同樣,通過add、commit的操作,我們可以把檔案的更新先放到暫存區,然後從暫存區提交到repo中。

注意,只有被add到暫存區的更新才會被提交進入repo。提交前,如果對WorkSpace的檔案進行修改,而沒有被添加到暫存區,那麼提交進repo中的只是暫存區的更新,WorkSpace修改的部分不會提交進repo中的。

 git diff

"git diff"是個很有用,而且會經常用到的命令,用於顯示WorkSpace中的檔案和暫存區檔案的差異。先將我們之前的test.txt檔案中的內容改成純數字然後提交到repo中,中文字元運行該命令會顯示亂碼。

123123

接下來修改成下面內容,我們通過"git diff"可以查看WorkSpace和Stage的diff情況,當我們把更新add到Stage中,diff就不會有任何輸出了。

123123456456

當然,我們也可以把WorkSpace中的狀態和repo中的狀態進行diff,命令如下。

git diff HEAD~n
撤銷更新

根據前面對基本概念的瞭解,更新可能存在三個地方,WorkSpace中,Stage中和repo中。下面就分別介紹一下怎麼撤銷這些更新。

撤銷WorkSpace中的更新

接著上面的例子,先將test.txt中的文本設定如下內容,並提交。

abcabc

然後將test.txt中的內容進行修改:

abc123bca321

我們可以使用"git checkout --<file>..."來撤銷WorkSpace中的更新。執行test.txt中的文本會變成兩行"abc"。

注意:使用這種方法撤銷更新的時候一定要謹慎,因為通過這種方式撤銷後,更新將沒有辦法再找回。

撤銷Stage中的更新

由於上個步驟,我們將test.txt修改撤銷了。這裡再次修改為下面內容,並且使用了"git add"把這個更新提交到了暫存區。這時,"git status"的輸出中提示我們可以通過"git reset HEAD <file>..."把暫存區的更新移出到WorkSpace中。

如果想繼續撤銷WorkSpace中的更新,請參考上面一步。

abc123cba321

撤銷repo中的更新

介紹撤銷repo中的更新之前,我們先看一下"git log"這個命令,通過這個命令我們可以查看commit的記錄。

撤銷提交有兩種方式:使用HEAD指標和使用commit id

在Git中,有一個HEAD指標指向當前分支中最新的提交。目前的版本,我們使用"HEAD^",那麼再錢一個版本可以使用"HEAD^^",如果想回退到更早的提交,可以使用"HEAD~n"。(也就是,HEAD^=HEAD~1,HEAD^^=HEAD~2)

git rest --hard HEAD^git rest --hard HEAD~1git rest --c2760c5512bc67a8b990c1da508d40cca623f23

再次查看,發現最新的提交已經被撤銷了,查看test.txt中的檔案,發現內容又變成兩行"abc"文本。

那麼問題就來了,我現在又想恢複被撤銷的提交,當然Git是支援這樣的操作。

下面來看看"git reflog"這個命令。"git log"只是包括了當前分支中的commit記錄,而"git reflog"中會記錄這個倉庫中所有的分支的所有更新記錄,包括已經撤銷的更新。

有了這個,我們就可以恢複撤銷操作。

git reset --hard [email protected]{1}git reset --hard f752570

再次查看,發現我們撤銷的內容已經回來了。

--hard和--soft

前面在使用reset來撤銷更新的時候,我們都是使用的"--head"選項,其實與之對應的還有一個"--soft"選項,區別如下:

--head:撤銷並刪除相應的更新

--soft:撤銷相應的更新,把這些更新的內容放到Stage中

刪除檔案

在Git中,如果我們要刪除一個檔案,可以使用下面的命令,"git rm"相比"rm"只是多了一步,把這次刪除的更新發到Stage中。

rm <file>
git rm <file>

 

Git介紹及基本操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.