一、如何安裝git
下載地址:
https://git-scm.com/download/win
根據自己的電腦選擇是32位的還是64位的。下載完后直接運行,之后一直next就好了。安裝成功后,會有這樣一個標志。
二、如何使用git
(1)首先你要點進去https://github.com/這個網站,注冊一個github賬號。注冊好之后,要記住郵箱和密碼。
(2) 打開之前的那個圖標就是這樣一個窗口,首先Git是分布式版本控制系統,所以需要填寫用戶名和郵箱作為一個標識,分別輸入這兩個命令,用戶名和郵箱需要換成自己的。
(3) 打開之前的那個圖標就是這樣一個窗口。現在比如我在我的C:/wamp/www/aaa有一個項目,我要對它進行管理怎么辦呢。直接在控制台里面輸入 cd c:/wamp/www/aaa 之后你就會在aaa這個目錄里面了。那如何對它進行管理呢。直接在控制台輸入git init
之后你去查看aaa目錄里面發現里面多了這樣一個東西。
這是一個隱藏文件夾,有點電腦看不見,是因為文件夾選項設置的隱藏文件不可見,這個去控制面板里的文件夾選擇設置一下就好了。
下面我們接着來操作,試着開始寫我們的項目。
首先我寫一個首頁叫index.html
現在我在我的頁面里寫好了這樣一段話,保存之后我們接着來進行操作。
現在我們開始在git里面輸入一段話 git status
我們可以看到index.html這個文件是紅色,這是說明我們這個文件已經做了修改,但是還沒保存到本地倉庫里面。現在我們接着執行操作 git add index.html 敲完這個命令接着git status發現index.html變成綠色的啦。
接着我們敲命令 git commit -m “the first time”
敲完之后,接着使用git status發現上面說工作區很干凈,沒有文件要被提交。現在我來解釋一下這幾個命令。
首先你得明白這幾個概念,工作區就是你現在編輯器所處的那個工程里面,在這個指的就是aaa這個文件夾。剛才你寫了一個index.html寫完之后就是往工作區增添了一個文件,然后你用git status查看狀態發現,index.html是紅色的。git status是什么意思呢,就是查看你工作區和暫存區有沒有文件沒被提交到本地倉庫,如果有工作室未向暫存區保存的就顯示紅色,如果有暫存區沒提交到本地倉庫的就是綠色。那么什么是本地倉庫呢,就是一開始說的那個不可見的文件夾,你一執行git init命令就會有一個本地倉庫出來。
現在我們接着來看,如何從工作區把文件提交到暫存區,就是使用命令git add index.html就可以了。把文件從暫存區提交到本地倉庫呢,就是使用命令git commit –m “the first time” 這個引號里面的內容是隨意的,就是自己添加一個備注,比如自己改動了什么東西。理解了這句話,我們接着進行操作,我們我的index.html里面繼續添加一段話。我再git status查看一下當前的狀態,發現有未向暫存區提交的保存,接着我們采用 git commit –m “the second time”命令將暫存區的文件提交到本地倉庫。之后再用git status來查看一下,發現已經沒有文件要提交了。
(4)版本回退
到目前為止,我們已經向工作區提交了兩次修改。Git給我們提供了一個git log 可以查看我們最近的提交歷史。
如果看的很亂,可以使用這個命令,git log -–pretty=oneline
可以看出來我們的兩次提交,前面那串黃色的就是我們的版本號。現在我發現我第二次提交的代碼運行不好使,想回到我原來的那個版本怎么辦呢
可以使用命令git reset –hard HEAD^這個命令是回退到上一個版本。
執行完之后,我再回頭看看我的index.html發現已經變成了我第一次提交時的樣子。
接着繼續。萬一要回退到上上個版本呢,可以使用命令git reset –hard HEAD^^,那要是回到到一百個版本就要寫100個^嗎,也太麻煩了吧
現在我們通過git log –pretty=oneline已經獲取到了每次修改的版本號。那么我們就可以使用git reset –hard 版本號就好了。比如剛才我要回退到上個版本就可以使用git reset –hard 21a77
發現也同樣有效果。這里版本號不用寫全,寫一部分能表示這個就行。現在我們再用git log來查看一下現在的狀態,發現我們現在的版本只剩下一個了
但是我現在又發現,我知道原來新版本的解決方法了,我又想回到新版本去怎么辦呢,現在用git log已經看不到新版本的版本號了。只能采用新的命令了叫做git reflog查看命令歷史。
在這里發現他記錄了我們所有的操作,現在我們繼續使用git reset –hard e2f3發現我們又回到新版本了。我們發現index.html已經回到原來的狀態了。
現在我們接着往下面進行。在index.html里面我們接着添加一行。
后來發現這句話不是很合適,當然這個時候我們可以把這句話直接刪掉,然后再git add ,就好了。但也可以通過git checkout – index.html。此時我們發現那句話已經沒有了。這種情況適用於我們沒有git add到暫存區之前。如果我們已經git add到暫存區了,怎么撤銷修改呢。我們可以使用命令 git reset HEAD index.html先撤銷暫存區的修改,然后我們可以通過命令git diff查看暫存區和工作區有什么不同,之后我們可以通過命令git checkout –index.html 發現已經修改好了。但是萬一我們已經提交到倉庫里呢怎么辦呢,也就是我們git commit了,那就要使用我們上面所說的版本回退了。
(5)刪除文件
現在我們在aaa目錄下新建一個文件叫test.txt。我們在里面隨便寫幾個字之后,通過git add text.txt 已經git commit –m “the third time”就已經把test.txt已經寫入本地庫里了。
假設現在我們發現我們已經不需要test.txt這個文件了,所以我們把它給刪了。這個時候你通過git status發現工作區和本地庫里的文件不一樣了。
現在我們有兩種選擇,一種是我們確實要刪除。使用git rm test.txt 之后再git commit –m “remve test.txt”發現我們的本地庫里的文件已經被刪除了。那么另外一種情況就是我刪錯了,我想還原回來怎么辦呢,使用命令git checkout – test.txt就發現這個文件已經還原了。
(6)遠程倉庫
到目前為止,我們已經學會了如何在本地庫和工作區之間進行操作,那這時你就會說我沒有看到如何分工協作呢,別着急,遠程倉庫還幫你解決這個問題。
首先你要點進去https://github.com/這個網站,登錄你剛才注冊的github賬號。
ssh-keygen -t rsa -C youremail@example.com
把這個郵箱替換成自己的
之后一路回車,如果一切順利的話你去你的C盤下去找你的user文件夾,有的叫用戶,你在里面搜索一下有沒有一個.ssh的文件夾,把它打開之后,里面有這幾個文件
之后接着打開那個https://github.com/網站,登錄進去。
點擊右邊這個綠色的圖表,點開下拉框之后里面有個setting。
之后會出來這樣一個頁面,點擊左邊的ssh keys,
打開之后是這樣的一個頁面,隨便寫入一個title,然后打開你剛才找到的再C盤里的那個id_rsa.pub.把里面的內容復制到那個key里面去,之后點擊添加即可。
之后回到一開始的這個頁面,
點擊中間的那個加號
選擇第一個,這就相當於你自己在遠程建了一個倉庫。
點擊之后,會出來這樣一個頁面。現在我們在那個名字哪里寫上aaa,直接點擊創建就好。
目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然后,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的aaa倉庫下運行命令:
$ git remote add origin git@github.com:BrouceLee/aaa.git
請千萬注意,把上面的BrouceLee替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫。
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
接着執行命令git push -u origin master
執行完之后,我們發現我們的遠程庫和本地倉庫已經同步了。
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分布式版本庫!
(7)從遠程庫克隆
上次我們講了先有本地庫,后有遠程庫的時候,如何關聯遠程庫。
現在,假設我們從零開發,那么最好的方式是先創建遠程庫,然后,從遠程庫克隆。
首先,登陸GitHub,創建一個新的倉庫,名字叫gitskills:
我們勾選Initialize this repository with a README,這樣GitHub會自動為我們創建一個README.md文件。創建完畢后,可以看到README.md文件:
現在,遠程庫已經准備好了,下一步是用命令git clone克隆一個本地庫:
我們在想要創建項目的地方執行下面的命令
git clone git@github.com:BrouceLee/gitskills.git
現在去你你想要建工程的地方開始,就可以發現大體上已經建好了。
(8)分支管理
分支在實際中有什么用呢?假設你准備開發一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。
現在有了分支,就不用怕了。你創建了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發完畢后,再一次性合並到原來的分支上,這樣,既安全,又不影響別人工作。
首先我來創建一個分支
執行命令git checkout -b dev 這樣就創建好了一個dev分支。
我們來介紹一下,最開始的時候我們的所有操作都是默認在一個叫做master的分支上操作的,包括提交到遠程庫,等等。關聯遠程庫的時候也是從遠程關聯master分支。當我們用dev這個分支寫完一個項目之后,我們要把這個分支所做的工作向master分支進行靠攏.
我們現在可以通過命令git branch來查看一下所有的分支。
git branch命令會列出所有分支,當前分支前面會標一個*號。
然后,我們就可以在dev分支上正常提交,比如對index.html做個修改,加上一行
然后我們執行git add index.html以及 git commit –m “use the dev first”
現在我dev的分支工作已經做完,現在我可以切換回master分支。利用命令
git checkout master
切換回master分支之后,我們發現index.html里面我們新加的那句話不在了。因為我們剛才是在dev分支上做的提交。現在我們要把分支合到master上,就利用命令 git merge dev就可以了,此時再去查看index.html發現我們在dev里面做的操作已經在master里面了。現在我們可以使用命令git branch –d dev來刪除dev這個分支,之后再使用git branch來查看分支發現只有master一個分支了。因為創建、合並和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務,合並后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。
三、解決沖突
現在我們考慮這樣一種情況,我們新建了一個分支feature1,利用feature1來進行把index.html里面再加一行,首先切換到feature1這個分支,然后修改index.html,之后提交。
然后我們切換回master分支,現在我們在master里的index.html里面加一句話,之后進行提交。之后我們按照剛才的那種方式合並兩個分支。git merge feature1會發現有沖突出現
此時應該怎么解決呢,此時必須手動解決沖突。
四.分支策略
在實際開發中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合並到master上,在master分支發布1.0版本;
你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合並就可以了。
所以,團隊合作的分支看起來就像這樣:
最后推薦一個詳細的分工合作的網站,一定要看。https://segmentfault.com/a/1190000002413519#articleHeader2