Git入門私房菜

昨天下午參考廖雪峯的博客和其餘一些文章,簡單瞭解了一下傳說中的Git,發現常見用法入門仍是挺容易上手的,在此作一些筆記,方便之後查閱和複習。
Githtml

Git安裝

Linux

sudo apt-get install git命令安裝Gitlinux

Windows

官網下載 安裝便可,不贅述。git

注:安裝時注意一步:選擇第二項,將git添加到path中。github

建立版本庫

  1. 建立項目文件夾,例如:demowindows

  2. 進入demo目錄下:git init命令將這個目錄變成git能夠管理的倉庫(repository)。將倉庫建好後,倉庫目錄下會多了一個.git隱藏文件夾。能夠用ls -ah查看隱藏文件。緩存

  3. 向庫裏添加一個readme.txt文件:ssh

  4. git add告訴git,要把文件添加到倉庫:fetch

    git add readme.txt

    執行命令,其實,這一步的做用就是將文件添加到stage(暫存區)。指針

    • git add .將全部文件添加到暫存區。code

    • git add -u將全部文件添加暫存區,同時,將刪除的文件從倉庫中刪除。

  5. git commit命令,將文件提交到倉庫。

    git commit -m "wrote a readme file"

    注:-m是對本次提交的說明,不應偷懶省去。

  6. git status查看當前版本庫的狀態。

  7. git diff顯示具體的還沒有緩存的改動記錄。

  8. git log記錄每次commit的信息。git log --pretty=oneline將每次commit的記錄打印成一行,內容精簡。

  9. git reset修改命令:

    • git reset HEAD廢除此次修改記錄,當前文件回到上一次提交的狀態。

    • `git reset --hard [commit id]

  10. git rm慎用。這個命令會將全部版本庫記錄刪除。

遠程倉庫

建立SSH Key。在相似C:\Users\xiang_000\.ssh這樣的主目錄下,查看是否有id_rsaid_rsa.pub文件。若是有了,直接能夠將公鑰添加到github帳戶上。若是沒有,打開Shell(windows下的Git Bash):

ssh-keygen -t rsa -C "youremail@example.com"

id_rsa.pub是公鑰,能夠放心的告訴任何人。

在github的Account settings裏,Add SSH Key。

從遠程庫克隆

若是從零開發,推薦的方式是先在github上建立遠程倉庫。而後,從遠程庫克隆

在github建立名爲:learngit的新倉庫。勾選添加README.md

git clone克隆一個本地庫:

git clone git@github.com:michael728/learngit.git

添加(關聯)遠程庫

建完本地庫,又想在github建立一個git倉庫,讓兩個倉庫進行遠程同步。

在github建立新的repo,名字爲:demo

根據github的提示,在本地的demo倉庫下運行命令:

git remote add origin git@github.com:michae728/demo.git`
  • 請千萬注意,把上面的michae728替換成你本身的GitHub帳戶名,不然,你在本地關聯的就是個人遠程庫,關聯沒有問題,可是你之後推送是推不上去的,由於你的SSH Key公鑰不在個人帳戶列表中。

  • 添加後,遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫。

將本地庫的全部內容推送到遠程庫上:

git push -u origin master

把當前分支master推送到遠程。因爲以前遠程庫是空的,第一次推送master分支時,加上了-u參數。git不但把本地的master分支內容推送到遠程新的master分支,還會把本地master分支和遠程的master分支關聯起來,之後推送或者拉取就能夠簡化命令。

從如今起,本地提交,可經過命令:

git push origin master

分享與更新項目

git push:

  • git push origin dev表示提交到遠程的dev分支。

  • 一般在本地的dev分支推送到遠程的dev分支,注意兩地分支命名要相同,保證不發生混亂

git pull:

  • git pull origin dev表示拉遠程dev分支到本地,並和本地dev分支合併

git fetch(不經常使用):

  • git fetch origin dev表示拉遠程dev分支到本地,可是,不和本地dev分支合併

git remote:

  • git remote add github git@github.com:michael728/test.git將本地倉庫推送到github上名爲test的倉庫裏

分支管理

建立於合併分支

建立dev分支,而後切換到dev分支:

git checkout -b dev

至關於下面兩條命令:

git branch dev
git checkout dev

git branch命令用於查看當前分支。當前分支前面會有*:

  • git branch查看本地分支

  • git branch -a查看本地和遠程全部分支

  • git branch -r查看遠程分支

  • git branch -d刪除本地分支

  • git push :origin dev刪除遠程dev分支

  • git checkout master命令用於dev分支完成工做後,切換回master分支。

git merge用於本地的指令。若是當前分支是master,本地另外一個分支是dev,用下面命令將分支合併到master:

git merge dev

後悔藥

版本回退

git log來查詢歷史記錄。git log --pretty=oneline顯示精簡信息。

git中,HEAD表示當前版本,上一個版本就是HEAD^,上上個版本HEAD^^,上100個版本,寫成HEAD~100

回到上一個版本:

git reset --hard HEAD^

或者經過git reset --hard [commit id]回到指定版本號的版本。

git版本的回退速度很快,由於git內部有個指向當前版本的HEAD指針。git僅僅是經過修改HEAD指向就能夠完成版本切換的工做。

git reflog用來查看命令歷史。經過這個,就能夠查到以前的版本號啦!

工做區和暫存區

工做區(Working Directory)

例如咱們建立的demo文件夾,他就是一個工做區。

版本庫(Repository)

工做區有一個隱藏目錄.git,這個不算工做區,它是git的版本庫。

git的版本庫裏存了不少東西,最重要的是稱爲stage的暫存區,還有git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD

版本庫示意圖
說明:

  • git add實際上就是把文件修改添加到暫存區;

  • git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。

由於咱們建立愛你git版本庫是,git自動爲咱們建立了惟一一個master分支,因此,如今git commit就是往master分支上提交更改。(由於之後還有可能往分支上提交啊!)

+ `git status`能夠查看狀態。若是有文件歷來沒有被添加過,那麼它的狀態是:`Untracked`。

    + 提交成功後,若是沒有對工做區作任何修改,那麼工做區就是`working directory clean`

管理修改

  1. git diff HEAD -- README.md 命令查看工做區和版本庫裏最新版本的區別。

撤銷修改

分爲兩種狀況的修改:

修改了工做區某個文件的內容,想直接丟棄修改:

git checkout -- filename

注:--先後都有空格。

當修改了工做區內容,同時,添加到了暫存區,分兩步:

  • 用命令git reset HEAD filename,回到場景1

  • 用場景1的方法操做。

刪除文件

當刪除了工做區的文件,git知道刪除了文件,所以,工做區和版本庫就不一致。git status命令會馬上告訴那些文件被刪除了。有兩個選擇:

  1. 確實要從版本庫裏刪除該文件,用命令git rm fimename,以後git commit提交。

  2. 誤刪,由於版本庫裏還有,能夠很輕鬆的把誤刪的文件恢復到最新版:git checkout -- filename

注:git checkout實際上是用版本庫裏的東西替換工做區的版本。不管工做區是修改仍是刪除,均可以一鍵還原。

附件

Git圖譜

歡迎來個人博客:Michael翔的小窩

參考

  1. 廖雪峯git教程
  2. 21分鐘入門Git
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息