在github上創(chuàng)建第一個(gè)工程切省,添加一個(gè)README.md
在本地新建一個(gè)文件夾最岗,同步遠(yuǎn)程代碼
git init #在目錄中初始化本地git倉(cāng)庫(kù)
git remote add origin url #本地和遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)
git pull origin master #將遠(yuǎn)程倉(cāng)庫(kù)的代碼pull到本地
在本地添加文件dairy.txt,并提交
git status #查看目前git的狀態(tài)
git add dairy.txt #git add . 添加全部朝捆,其實(shí)是將工作區(qū)的內(nèi)容提交到暫存區(qū)
git commit -m "add dairy.txt "
git push origin master
查看github般渡,在本地新建的文件已經(jīng)同步
回到歷史 && 來(lái)到未來(lái)
git log #查看日志
git reset --hard ba4241e83647dbe85f9705b42b06cf918e878fa4
可見(jiàn)此版本沒(méi)有myself.txt的文件,用vi編輯器查看歷史內(nèi)容
git reflog #查看未來(lái)的版本
分支開(kāi)發(fā) && 分支合并
git branch test #新建分支test
git branch #羅列出所有的分支
git checkout test #//切換到test分支
git checkout -b dev #創(chuàng)建并切換到dev分支
將本地新建的分支同步到遠(yuǎn)程
TIPS:在實(shí)際開(kāi)發(fā)的很多IDE芙盘,可以自動(dòng)創(chuàng)建遠(yuǎn)程分支驯用,這一步往往可以省略。
git push origin test
git push origin dev
然后將本地dev分支上上傳的圖片push到github上
merge
在gitlab上面操作儒老,進(jìn)入項(xiàng)目下蝴乔,點(diǎn)擊merge request選項(xiàng),然后選擇你之前推到遠(yuǎn)端的dev branch和你要合并到哪個(gè)分支驮樊,比如你要合并到master上,點(diǎn)擊merge request
解決沖突
沖突原因:
- 多個(gè)成員修改不同文件
- 多成員修改相同文件不同區(qū)域
- 同時(shí)修改文件名和文件內(nèi)容
在一些情況下薇正,git可以智能合并,有些時(shí)候需要手動(dòng)合并
上訴三種情況都可以用一種方式解決巩剖,就是在push之前先pull
手動(dòng)合并
git status #查看版本庫(kù)狀態(tài)
git mergetool #使用工具
出現(xiàn)kdiff3圖形界面铝穷,其中A區(qū)為修改前,B區(qū)為本地(local)版本庫(kù)修改佳魔,C區(qū)為遠(yuǎn)程版本庫(kù)(remote)信息曙聂,在最下方點(diǎn)擊右鍵選擇需要使用的版本庫(kù),修改后保存退出即可鞠鲜。之后:
git commit -m ""
git push origin master
這里就完成了conflict的手動(dòng)合并
查看提交日志:
git log --graph --online
建立里程碑
所謂里程碑宁脊,就是版本號(hào),每一個(gè)版本代表開(kāi)發(fā)人員一段時(shí)間的工作贤姆。
在master merge分支代碼之后的工程下,選擇relsease
選擇 public release之后榆苞,可以看到如下界面:
可以直接下載打好的包,很多開(kāi)源項(xiàng)目就是可以這樣直接下載去項(xiàng)目中使用霞捡。
Fork Other's Repository
很多時(shí)候坐漏,我們需要拿到別人的倉(cāng)庫(kù),進(jìn)行后續(xù)或者協(xié)作開(kāi)發(fā)
在對(duì)應(yīng)的項(xiàng)目工程下碧信,在github的左上角選擇 fork赊琳,工程就會(huì)出現(xiàn)在我的github的主頁(yè)上:
然后我們需要再本地新建一個(gè)文件夾,將項(xiàng)目拉倒本地
git remote -v #查看遠(yuǎn)程倉(cāng)庫(kù)的版本
git remote add upstream url
git pull upstream master
git push origin master
本人修改的代碼可以通過(guò)pull request 請(qǐng)求合并砰碴,提交貢獻(xiàn)
寫(xiě)在后面的話
1.origin
代碼庫(kù)(repository)可以存放在你的電腦里躏筏,同時(shí)你也可以把代碼庫(kù)托管到Github的服務(wù)器上。在默認(rèn)情況下呈枉,origin指向的就是你本地的代碼庫(kù)托管在Github上的版本趁尼。
2.FETCH_HEAD
是一個(gè)版本鏈接埃碱,記錄在本地的一個(gè)文件中,指向著目前已經(jīng)從遠(yuǎn)程倉(cāng)庫(kù)取下來(lái)的分支的末端版本酥泞。
3.git fetch 有四種基本用法
- git fetch:這將更新git remote 中所有的遠(yuǎn)程repo 所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中
- git fetch remote_repo :這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的所有branch的最新commit-id砚殿,將其記錄。
- git fetch remote_repo remote_branch_name :這將這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的分支: remote_branch_name
-
git fetch remote_repo remote_branch_name:local_branch_name :這將這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的分支: remote_branch_name 婶博,并在本地創(chuàng)建local_branch_name 本地分支保存遠(yuǎn)端分支的所有數(shù)據(jù)瓮具。
4.暫存區(qū)的概念很重要,了解了這個(gè)概念凡人,git的很多命令你就知道在干什么了名党。
stage1.png
stage2.png
stage3.png
5.在每次提交代碼前,養(yǎng)成使用 git diff 的好習(xí)慣
6.每天下班前挠轴,清空你的工作區(qū)传睹,給明天一個(gè)愉快的開(kāi)始!
7.如果你的項(xiàng)目組有很多同學(xué)岸晦,或者是你為很大的開(kāi)源項(xiàng)目做貢獻(xiàn)欧啤,建議你將每次提交的代碼描述詳細(xì),盡量精確到第幾行启上,實(shí)現(xiàn)什么功能邢隧。
FAQ
- Access denied
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://git.xx/xxx/xxx.git/'
需要重新設(shè)置用戶(hù)名和郵箱:
$ git config --global user.name "xxx"
$ git config --global user.email "xxx@xxx"
- git pull 失敗 ,提示:fatal: refusing to merge unrelated histories
在git pull 時(shí),增加一個(gè)可選項(xiàng)
git pull origin master --allow-unrelated-histories
- 本地同步遠(yuǎn)端的git分支
在本地新建并切換到dev分支冈在,和遠(yuǎn)程的dev分支進(jìn)行關(guān)聯(lián)
git branch -b dev /origin/dev
上訴操作等同于:
git branch --all #查看所有分支倒慧,發(fā)現(xiàn)只有master
git checkout dev #在本地創(chuàng)建dev分支
git branch dev #本地切換到dev
git push origin dev:dev #本地dev和遠(yuǎn)端dev進(jìn)行關(guān)聯(lián)
查看本地分支和遠(yuǎn)程分支的對(duì)應(yīng)關(guān)系:
git branch -vv
程序媛小白一枚,如有錯(cuò)誤包券,煩請(qǐng)批評(píng)指正纫谅!(#.#)