天天看點

廖雪峰老師git學習筆記(2)

管理修改

作為一個版本控制系統,git管理的是檔案的修改,而非檔案。什麼意思呢?目前我們所接觸的所有的指令中,git add也好,git commit也好。它們執行的對象都是檔案的修改,當然檔案的修改包括檔案内容的修改和檔案的添加和删除。廖大舉了一個例子,他在git add指令前後分别對一個檔案進行了修改,但這兩個修改的狀态是不一樣的。指令之前的已經被添加到暫存區内,隻要執行git commit指令它就會被送出到目前分支中。而指令之後的修改還僅僅處于狀态一中,未被添加到暫存區,也就不會被git commit指令送出到目前分支上。因為git commit隻會送出已被添加到暫存區的修改。至于管理檔案的話又是什麼情況,我還不清楚。

撤銷修改

之前講到過我們可以從快照中讀取檔案進而避免誤操作帶來的影響。除此之外,我們還可以根據檔案修改所處的狀态進行不同的操作來撤銷修改。

一是當檔案修改後還未添加到暫存區内,這時你可以手動改回來,當然如果情況十分棘手,git checkout -- file指令可以挽救你于水火之中。這條指令可以将你工作區的檔案恢複到上一次git add or git commit的版本。

二是當檔案修改後被添加到暫存區但是還沒有送出。git reset HEAD file可以将該檔案存放于暫存區的修改撤銷,重新放回工作區中。這時檢視git status,會發現該檔案的修改還處于一狀态中。至于這個HEAD的作用我還不太清楚,暫存區中會存放曆史上添加的修改嗎?

删除檔案

建立檔案,修改檔案,自然也有删除檔案。對于一個已經送出到分支的檔案該如何删除呢?

當我們在工作區完成了一次修改,其中删除了一些檔案。此時git status會發現git提示你有些檔案被删除,你可以恢複它或者git rm file将删除操作添加到暫存區。然後git commit将其送出到目前分支。這樣目前版本中就删除了這個檔案。

遠端倉庫

之前進行的所有操作都是在自己的電腦上,然而git作為一個分布式版本控制系統,它把一份版本庫克隆到多台電腦之上。這也意味着除了我們自己電腦上的repository,還有遠端倉庫供我們使用。由于github網站提供免費的遠端倉庫,我們就從github開始。

首先我們需要一對ssh密鑰。在電腦使用者主目錄下,我們可以找個一個.ssh目錄(在我的電腦上這個目錄是隐藏的)。進去之後找找id_rsa和id_rsa.pub這兩個檔案,如果有的話就ok,如果沒有,我們執行ssh-keygen -t rsa -C "[email protected]"指令來生成。其中id_rsa是私鑰,id_rsa.pub是公鑰。

然後打開github網站,登入之後進入Settings,找到SSH keys,建立一個SSH key。title随意,key裡面放入id_rsa.pub的内容。然後點選添加即可。我們可以添加多個SSH key,如果需要在多個電腦上向一個遠端倉庫送出的話。

接下來是添加遠端庫,有了遠端庫,我們可以讓本地庫和遠端庫同步,這樣既可以備份代碼,又可以用來協作。一切都是按部就班,沒什麼好說的。

在github網站上點選new repository,輸入名字之後保持預設設定點選create repository即可。這時打開建立的遠端庫,會發現git給你的提示。由于我們想把自己的本地倉庫與之相關聯,是以在本地庫中輸入指令git remote add origin [email protected]:Mcrea/sugertown.git,這樣本地庫和遠端庫就關聯好了。然後運作指令 git push -u origin master将本地庫推送到遠端。因為這是我們第一次推送(遠端庫是空的),是以這裡有點細節:git push推送的實際上是目前的master分支,-u參數:Git不但會把本地的master分支内容推送到遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令。這是廖大的原話。

然後,就可以在github網站上看到我們從本地庫推送的檔案了。

之後我們再次推送分支的時候,就不需要-u參數了。