git使用(2)
1.遠(yuǎn)程倉庫
a SSHKEY
第1步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認(rèn)值即可,由于這個(gè)Key也不是用于軍事目的,所以也無需設(shè)置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個(gè)文件,這兩個(gè)就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
然后,點(diǎn)“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容
b 添加遠(yuǎn)程庫
現(xiàn)在的情景是,你已經(jīng)在本地創(chuàng)建了一個(gè)Git倉庫后,又想在GitHub創(chuàng)建一個(gè)Git倉庫,并且讓這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得。
首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個(gè)新的倉庫:
在Repository name填入learngit,其他保持默認(rèn)設(shè)置,點(diǎn)擊“Create repository”按鈕,就成功地創(chuàng)建了一個(gè)新的Git倉庫:
目前,在GitHub上的這個(gè)learngit倉庫還是空的,GitHub告訴我們,可以從這個(gè)倉庫克隆出新的倉庫,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的learngit倉庫下運(yùn)行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git請千萬注意,把上面的michaelliao替換成你自己的GitHub賬戶名,否則,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫,關(guān)聯(lián)沒有問題,但是你以后推送是推不上去的,因?yàn)槟愕腟SH Key公鑰不在我的賬戶列表中。
添加后,遠(yuǎn)程庫的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫。
下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。
由于遠(yuǎn)程庫是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡化命令。
推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣:
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫,使用命令git remote add origin git@server-name:path/repo-name.git;
關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
c 從遠(yuǎn)程庫克隆
現(xiàn)在,假設(shè)我們從零開發(fā),那么最好的方式是先創(chuàng)建遠(yuǎn)程庫,然后,從遠(yuǎn)程庫克隆。
首先,登陸GitHub,創(chuàng)建一個(gè)新的倉庫,名字叫g(shù)itskills:
我們勾選Initialize this repository with a README,這樣GitHub會自動為我們創(chuàng)建一個(gè)README.md文件。創(chuàng)建完畢后,可以看到README.md文件:
現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是用命令git clone克隆一個(gè)本地庫:
$ git clone git@github.com:michaelliao/gitskills.git注意把Git庫的地址換成你自己的,然后進(jìn)入gitskills目錄看看,已經(jīng)有README.md文件了。
2.分支管理
HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。
首先,我們創(chuàng)建dev分支,然后切換到dev分支:
$ git checkout -b devgit checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:
$ git branch dev $ git checkout dev然后,用git branch命令查看當(dāng)前分支:
git branch命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個(gè)*號。
然后,我們就可以在dev分支上正常提交,比如對readme.txt做個(gè)修改,加上一行:
Creating a new branch is quick.然后提交:
$ git add readme.txt $ git commit -m "branch test"現(xiàn)在,dev分支的工作完成,我們就可以切換回master分支:
$ git checkout master切換回master分支后,再查看一個(gè)readme.txt文件,剛才添加的內(nèi)容不見了!因?yàn)槟莻€(gè)提交是在dev分支上,而master分支此刻的提交點(diǎn)并沒有變:
現(xiàn)在,我們把dev分支的工作成果合并到master分支上:
$ git merge dev注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非常快。
當(dāng)然,也不是每次合并都能Fast-forward,我們后面會講其他方式的合并。
合并完成后,就可以放心地刪除dev分支了:
$ git branch -d dev查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
3.合并沖突
git log --graph --pretty=oneline --abbrev-commit看到分支合并圖 ?
4.分支管理策略
通常,合并分支時(shí),如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。
如果要強(qiáng)制禁用Fast forward模式,Git就會在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看出分支信息。
下面我們實(shí)戰(zhàn)一下--no-ff方式的git merge:
$ git merge --no-ff -m "merge with no-ff" dev
5.多人協(xié)作
當(dāng)你從遠(yuǎn)程倉庫克隆時(shí),實(shí)際上Git自動把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin。
要查看遠(yuǎn)程庫的信息,用git remote:
$ git remote origin或者,用git remote -v顯示更詳細(xì)的信息:
$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)上面顯示了可以抓取和推送的origin的地址。如果沒有推送權(quán)限,就看不到push的地址。
推送分支
推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫。推送時(shí),要指定本地分支,這樣,Git就會把該分支推送到遠(yuǎn)程庫對應(yīng)的遠(yuǎn)程分支上:
$ git push origin master如果要推送其他分支,比如dev,就改成:
$ git push origin dev抓取分支
多人協(xié)作時(shí),大家都會往master和dev分支上推送各自的修改。
現(xiàn)在,模擬一個(gè)你的小伙伴,可以在另一臺電腦(注意要把SSH Key添加到GitHub)或者同一臺電腦的另一個(gè)目錄下克隆:
$ git clone git@github.com:michaelliao/learngit.git當(dāng)你的小伙伴從遠(yuǎn)程庫clone時(shí),默認(rèn)情況下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:
$ git branch * master現(xiàn)在,你的小伙伴要在dev分支上開發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地,于是他用這個(gè)命令創(chuàng)建本地dev分支:
? git remote update?
? git fetch?
現(xiàn)在,他就可以在dev上繼續(xù)修改,然后,時(shí)不時(shí)地把dev分支push到遠(yuǎn)程:
$ git commit -m "add /usr/bin/env" $ git push origin dev你的小伙伴已經(jīng)向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,并試圖推送:
$ git add hello.py $ git commit -m "add coding: utf-8" $ git push origin devGit已經(jīng)提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合并,解決沖突,再推送:
git pull也失敗了,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示,設(shè)置dev和origin/dev的鏈接:
$ git branch --set-upstream dev origin/dev-
查看遠(yuǎn)程庫信息,使用git remote -v;
-
本地新建的分支如果不推送到遠(yuǎn)程,對其他人就是不可見的;
-
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;
-
在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;
-
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;
-
從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。
6.github使用
-
在GitHub上,可以任意Fork開源倉庫;
-
自己擁有Fork后的倉庫的讀寫權(quán)限;
-
可以推送pull request給官方倉庫來貢獻(xiàn)代碼。
轉(zhuǎn)載自http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
? ??
轉(zhuǎn)載于:https://www.cnblogs.com/yltyy/p/6492355.html
總結(jié)
- 上一篇: POJ 1797 Heavy Tran
- 下一篇: Spark常见问题解决办法