Git--团队开发必备神器
花了兩天時(shí)間專(zhuān)門(mén)搞了一下git。整理一下分享給大家。以下我們開(kāi)始。。
。
- 轉(zhuǎn)載請(qǐng)注明出處:
- http://blog.csdn.net/Hello_Chillax/article/details/47405887
- 很多其它精彩請(qǐng)?jiān)L問(wèn):http://blog.csdn.net/hello_chillax,謝謝
一.學(xué)習(xí)使用git之前的準(zhǔn)備(Windows環(huán)境下)。
在本地裝一個(gè)git,并裝上GitBash。(不會(huì)?會(huì)裝QQ就會(huì)裝git。。
)
去GitHub官網(wǎng)上注冊(cè)一個(gè)賬號(hào)。
給個(gè)傳送門(mén)GitHub官網(wǎng)
二.做好準(zhǔn)備之后,咱們先來(lái)掃一下盲。講講概念。
- git和GitHub有什么差別?(已淚奔。。。
)
答:git是本地代碼版本號(hào)管理工具,我們寫(xiě)項(xiàng)目時(shí),難免會(huì)要進(jìn)行代碼管理吧。比方我們每天寫(xiě)完代碼之后,總要把它備份一份吧,原因非常easy。萬(wàn)一你的工作空間(workspace)所在的硬盤(pán)突然掛了呢,不要說(shuō)幾率非常小。可是,萬(wàn)一發(fā)生呢。。
我們總能感覺(jué)到git和GitHub之間好像是有什么關(guān)系。上面我們提到,git是本地代碼管理工具。為了防止我們的工作空間(workspace)所在的硬盤(pán)突然掛掉。可是,你就不操心整塊硬盤(pán)都掛了嗎。。當(dāng)然,這僅僅是個(gè)小概率事件。更重要的是:我們?cè)趫F(tuán)隊(duì)開(kāi)發(fā)時(shí),須要多人合作開(kāi)發(fā)同一個(gè)軟件,不可能我寫(xiě)了代碼拷給你,你寫(xiě)了代碼拷給我吧。我們須要一個(gè)統(tǒng)一的遠(yuǎn)程版本號(hào)控制倉(cāng)庫(kù):GitHub
三.我們開(kāi)始GitHub之旅。
1.首先解釋幾個(gè)單詞的意思(⊙o⊙)…
后面會(huì)用到的。并且非常重要的:
- pull:拉
- push:推
- repository:倉(cāng)庫(kù)
- branch:分支
- status:狀態(tài)
- commit:提交
- config:配置
- global:全局的(屬性,變量等)
2.畫(huà)一張圖來(lái)解釋git本地操作,以及遠(yuǎn)程操作的邏輯流程
從上圖中能夠看出。我們?nèi)粘>幋a時(shí)。首先是把工作空間里的更改的代碼通過(guò)操作①來(lái)推送到暫存區(qū)(index。stage),然后假設(shè)我們確認(rèn)這些代碼正確。無(wú)須改動(dòng)。那么就能夠把它通過(guò)②推送給本地master分支。這里我們能夠把master分支理解成本地的暫時(shí)倉(cāng)庫(kù),我們能夠從這里恢復(fù)代碼,也能夠通過(guò)這個(gè)分支進(jìn)行提交到遠(yuǎn)程GitHub上的master分支,把你的代碼提供給別人。
上圖我們僅僅是描寫(xiě)敘述了由本地逐步推向遠(yuǎn)程的過(guò)程。我們先將這個(gè)高明確,后面我會(huì)反過(guò)來(lái)再操作一遍。
3.我們先實(shí)現(xiàn)步驟①
1.假設(shè)我們對(duì)代碼進(jìn)行了更改。這里我們以一個(gè)文件readme.txt為例。來(lái)解說(shuō)。
(也就是說(shuō)我們?nèi)缃窆ぷ鲄^(qū)間假設(shè)是E://firstrep。里面有一個(gè)文件readme.txt)
2.首先我們打開(kāi)D://firstrep。在該文件夾下在空白處點(diǎn)擊右鍵打開(kāi)給Git Bash.exe,初始化一個(gè)本地倉(cāng)庫(kù)。
Administrator@HJQ1EBGYSWRMA1K /e/firstrep
$ git init
Initialized empty Git repository in E:/firstrep/.git/(master)
注意:僅僅有以“$”開(kāi)頭的才是我們寫(xiě)的命令。其它的都是系統(tǒng)自己主動(dòng)生成的提示信息,當(dāng)中運(yùn)行初始化命令之后我們能夠看到路徑名后面多了一個(gè)“master“,這說(shuō)明我們初始化成功。
3.我們?nèi)缃駚?lái)找一下工作區(qū)間,版本號(hào)庫(kù),暫存區(qū),以及本地master分支
工作空間:E:/firstrep
版本號(hào)庫(kù):E:/firstrep/.git/(master)注意,這里.git文件夾是隱藏的,不可見(jiàn),能夠更改文件夾屬性使其顯現(xiàn)出來(lái)。
暫存區(qū)和master分支:這兩個(gè)東西都存在版本號(hào)庫(kù)文件夾下
4.我們先對(duì)該文件進(jìn)行更改:
git is very easy.
然后。我們把它提交到版本號(hào)庫(kù)的暫存區(qū)里(index,stage),運(yùn)行例如以下代碼,查看git狀態(tài)
$ git status
On branch master
Initial commit
Untracked files:
(use “git add …” to include in what will be committed)
nothing added to commit but untracked files present (use “git >add” to track)
這里會(huì)提示我們說(shuō):在工作空間多了一個(gè)文件。我們還沒(méi)有加入到版本號(hào)庫(kù)
5.以下我們把它加到版本號(hào)庫(kù)里的暫存區(qū)。
git add –all
這樣,我們第①個(gè)環(huán)節(jié)已經(jīng)運(yùn)行結(jié)束。
4.以下我們來(lái)運(yùn)行步驟②
1.我們剛剛把更改的readme.txt.加入到暫存區(qū)(index。stage),如今我們把再把它加到本地master分支。
$ git commit -m “測(cè)試
[master (root-commit) 74c27df] 測(cè)試
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
我們?nèi)缃裢ㄟ^(guò)上面一行命令。講readme.txt提交到本地master分支(事實(shí)上這么說(shuō)不是非常準(zhǔn)確,事實(shí)上提交的是改動(dòng)。而不是全部?jī)?nèi)容。這里我們能夠先這么簡(jiǎn)單地理解)。以下我們來(lái)查看一下git的狀態(tài)
$ git status
On branch master
nothing to commit, working directory clean
OK。至此,我們已經(jīng)成功完畢了本地代碼的提交。
即①②兩步。
以下我們進(jìn)行第三部。
5.運(yùn)行步驟③
如今應(yīng)該是遠(yuǎn)程有一個(gè)分支,本地有一個(gè)分支,我們?cè)贕itHub創(chuàng)建一個(gè)倉(cāng)庫(kù)(repository)。假設(shè)倉(cāng)庫(kù)地址為:https://github.com/hellochillax/Yard.git
以下我們進(jìn)行推送:
1.加入遠(yuǎn)程倉(cāng)庫(kù)的地址:
$ git remote add origin https://github.com/hellochillax/Yard.git
這里就產(chǎn)生了一個(gè)相應(yīng)關(guān)系:origin–>https://github.com/hellochillax/Yard.git
2.進(jìn)行推送操作:
$git push origin master
然后系統(tǒng)會(huì)提示你輸入GitHub的賬號(hào)password,輸入正確的賬號(hào)password后。點(diǎn)擊回車(chē),系統(tǒng)就會(huì)進(jìn)行提交工作。并且會(huì)顯示運(yùn)行進(jìn)度。當(dāng)然,我這里就不演示了,以防把我原來(lái)的項(xiàng)目覆蓋掉了。(上面的GitHub地址是我在GitHub上的一個(gè)項(xiàng)目,不可隨便推。。。當(dāng)然你看到這里也別想著去搞破壞,由于你不知道我的GitHub的賬號(hào)password。
。。)
我們上面全部的內(nèi)容攻克了本地推送到GitHub。以下我們發(fā)過(guò)來(lái)解說(shuō)從GitHub上拉取被人寫(xiě)的內(nèi)容到本地倉(cāng)庫(kù)。
6.我們還是先搞一張圖,有句話說(shuō)的好。沒(méi)圖你說(shuō)個(gè)。**
以下。我們還是分三步來(lái)講:
7.運(yùn)行步驟①
有了上面的經(jīng)驗(yàn),我們就能夠快一點(diǎn)了~
上命令:
$ git pull origin master
上面的命令是,從遠(yuǎn)程拉取文件到本地。(相同的。我就不點(diǎn)回車(chē)給大家演示了
8.運(yùn)行步驟②③
在運(yùn)行之前。我們先查看一下git的狀態(tài):
$ git status
On branch master
nothing to commit, working directory clean
呦呦呦,什么情況,怎么是“nothing to commit”呢。怎么回事,不應(yīng)該是再?gòu)陌姹咎?hào)庫(kù)中復(fù)制內(nèi)容到工作空間嗎,怎么能是不須要提交呢。
別急。你打開(kāi)工作文件夾,發(fā)現(xiàn)。工作文件夾里已經(jīng)存在了GitHub上的全部文件。
也就是說(shuō),步驟①,事實(shí)上已經(jīng)幫我們搞定了①②③要做的事。所以,②③步驟事實(shí)上不要我們做不論什么事情。。
四.git的使用之細(xì)節(jié)補(bǔ)充
五.最后貼一下我平時(shí)總結(jié)的git經(jīng)常使用操作
git init 初始化一個(gè)本地倉(cāng)庫(kù)
git add –all 加入全部文件到暫存區(qū)(stage,index)
git commit -m “描寫(xiě)敘述信息” 提交更改到本地master分支
git status 查看git當(dāng)前狀態(tài)
git diff 查看改動(dòng)后和改動(dòng)前的不同之處
git log 獲得文件更改的歷史記錄
git reset –hard HEAD^ 回退本地分支到上一個(gè)版本號(hào)
git reset –hard HEAD~n 回退本地分支到上n個(gè)版本號(hào)
git checkout – readme.txt:把readme.txt文件在工作區(qū)的改動(dòng)全部撤銷(xiāo)
git remote :獲得遠(yuǎn)程庫(kù)列表
- git remote -v :獲得遠(yuǎn)程倉(cāng)庫(kù)的具體信息
- git remote rm [name] :刪除相應(yīng)的遠(yuǎn)程庫(kù)
- git remote add origin git@github.com/hellochillax/SoftWareYard.git 關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù)
- git push -u origin master 第一次推送master分支的全部?jī)?nèi)容
- git push origin master 推送最新改動(dòng)
git branch -u origin/master master 本地跟蹤遠(yuǎn)程
Git鼓舞大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch
切換分支:git checkout
創(chuàng)建+切換分支:git checkout -b
合并某分支到當(dāng)前分支:git merge
刪除分支:git branch -dssh-keygen -t rsa -C “hello@example.com” 創(chuàng)建SSH Key
- git config –global user.name “Your Name” 設(shè)置username
- git config –global user.email “email@example.com” 設(shè)置password
命令行通用操作:
pwd:顯示當(dāng)前路徑
ls -ah:顯示文件列表(包含隱藏文件)
cat readme.txt:顯示文件內(nèi)容
rm readme.txt: 刪除文件
==========================我是華麗的分隔符==========================================
時(shí)間過(guò)得真快,轉(zhuǎn)眼半年多過(guò)去了。實(shí)驗(yàn)室里的人都在忙著各種內(nèi)推面試。
我也不例外。總體復(fù)習(xí)啊。這樣的酸爽。
本來(lái)能夠不用考慮git的。可是內(nèi)推時(shí)手殘?jiān)诤?jiǎn)歷的個(gè)人技能部分寫(xiě)了一句“熟悉git、svn等版本號(hào)管理工具。
”所以還是再來(lái)復(fù)習(xí)一下git,并且再補(bǔ)充一點(diǎn)半年前沒(méi)有提到的知識(shí)點(diǎn)。
也算為了面試官問(wèn)到時(shí)能不掉鏈子了。
git的基本知識(shí)和經(jīng)常使用命令,上次都寫(xiě)得幾乎相同了。
這次講講git分支的合并。
一. fetch和pull的差別。
這兩個(gè)命令的功能都是從遠(yuǎn)程的分支獲取最新的版本號(hào)到本地。可是有一定的差別。
- 1.git fetch:相當(dāng)于是從遠(yuǎn)程獲取最新版本號(hào)到本地。不會(huì)自己主動(dòng)merge
- 2.git pull:相當(dāng)于是從遠(yuǎn)程獲取最新版本號(hào)并merge到本地
我們能夠用以下的三個(gè)命令來(lái)體會(huì)二者的差別:
git fetch origin master:tmp
git diff tmp
git merge tmp
在實(shí)際使用中,git fetch更安全一些
由于在merge前,我們能夠查看更新情況,然后再?zèng)Q定是否合并.
二. merge和rebase的差別。
關(guān)于這個(gè)問(wèn)題,在stackoverflow上有個(gè)非常清晰明了的解釋,感興趣的能夠看一下:http://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase
貌似須要梯子才干看。
沒(méi)梯子也沒(méi)關(guān)系,我把內(nèi)容翻譯一遍。
首先,假設(shè)我們的版本號(hào)庫(kù)眼下有三個(gè)提交。A,B,C,如圖:
然后,此時(shí)有兩個(gè)開(kāi)發(fā)人員同一時(shí)候開(kāi)發(fā),當(dāng)中小王開(kāi)發(fā)了D,小李開(kāi)發(fā)了E,如圖:
非常顯然,眼下已經(jīng)發(fā)生了沖突(合并時(shí)出現(xiàn)故障),我們解決這個(gè)沖突,有兩種方法:merge和rebase。
假設(shè)採(cǎi)用merge:
假設(shè)採(cǎi)用rebase:
可是。有個(gè)小問(wèn)題:採(cǎi)用rebase時(shí)。可能會(huì)使虛線部分的提交丟失。所以有一定風(fēng)險(xiǎn)性,建議新手都用merge。
轉(zhuǎn)載于:https://www.cnblogs.com/llguanli/p/8916819.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Git--团队开发必备神器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CF385C Bear and Prim
- 下一篇: c++ shared_ptr的使用