以github爲例,因爲你的本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的,因此,須要一點設置:git
第1步:建立SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,若是已經有了,可直接跳到下一步。若是沒有,打開Git Bash,建立SSH Key:github
$ ssh-keygen -t rsa -C "youremail@example.com"
你須要把郵件地址換成你本身的郵件地址,而後一路回車,使用默認值便可,因爲這個Key也不是用於軍事目的,因此也無需設置密碼。ssh
若是一切順利的話,能夠在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,能夠放心地告訴任何人。fetch
登錄GitHub,打開「Account settings」,「SSH and GPG keys」頁面:點擊「New SSH key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容,點擊「Add Key」完成添加。加密
Key能夠有多個,對應多臺電腦(公司、家用等)。code
克隆遠程庫進程
首先進入本身的github建立一個倉庫,複製倉庫地址,克隆至本地:開發
$ git clone git@github.com:ydtname/test.git Cloning into 'test'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 Receiving objects: 100% (6/6), done.
目錄名與遠程庫目錄同名,也能夠自定義目錄名:rem
$ git clone <版本庫的網址> <本地目錄名>
用於管理遠程庫名it
不帶選項的時候,git remote命令列出全部遠程庫。
$ git remote origin
使用-v選項,能夠參看遠程庫的網址。
$ git remote -v origin git@github.com:ydtname/test.git (fetch) origin git@github.com:ydtname/test.git (push)
克隆版本庫的時候,所使用的遠程庫自動被Git命名爲origin。若是想用其餘的遠程庫名,須要用git clone命令的-o選項指定。
$ git clone -o MyName git@github.com:ydtname/test.git $ git remote MyName
git remote show命令加上遠程庫名,能夠查看該遠程庫的詳細信息。
$ git remote add <遠程庫名> <遠程庫網址>
git remote rm命令用於刪除遠程庫。
$ git remote rename <原遠程庫名> <新遠程庫名>
一旦遠程倉庫的版本庫有了更新(Git術語叫作commit),須要將這些更新取回本地,這時就要用到git fetch命令。
$ git fetch <遠程倉庫地址>
上面命令將某個遠程倉庫的更新,所有取回本地。
git fetch命令一般用來查看其餘人的進程,由於它取回的代碼對你本地的開發代碼沒有影響。
默認狀況下,git fetch取回全部分支(branch)的更新。若是隻想取回特定分支的更新,能夠指定分支名。
$ git fetch <遠程倉庫名> <分支名>
所取回的更新,在本地倉庫上要用"遠程倉庫名/分支名"的形式讀取。好比origin倉庫的master,就要用origin/master讀取。
$ git branch -r origin/master
取回遠程倉庫的更新之後,能夠在它的基礎上,使用git checkout命令建立一個新的分支。
$ git checkout -b newBrach origin/master
此外,也可使用git merge命令或者git rebase命令,在本地分支上合併遠程分支。
$ git merge origin/master # 或者 $ git rebase origin/master
取回遠程倉庫某個分支的更新,再與本地的指定分支合併。
$ git pull <遠程倉庫名> <遠程分支名>:<本地分支名>
若是遠程分支是與當前分支合併,則冒號後面的部分能夠省略。實質上,這等同於先作git fetch,再作git merge
$ git pull <遠程倉庫名> <遠程分支名>
在git clone的時候,全部本地分支默認與遠程倉庫的同名分支,創建追蹤關係,也就是說,本地的master分支自動"追蹤"origin/master分支
因此若是當前分支與遠程分支存在追蹤關係,git pull就能夠省略遠程分支名
$ git pull <遠程倉庫名>
若是當前分支只有一個追蹤分支,遠程倉庫名均可以省略
$ git pull
若是合併須要採用rebase模式,可使用--rebase選項。
$ git pull --rebase <遠程倉庫名> <遠程分支名>:<本地分支名>
若是遠程倉庫刪除了某個分支,默認狀況下,git pull 不會在拉取遠程分支的時候,刪除對應的本地分支。這是爲了防止,因爲其餘人操做了遠程倉庫,致使git pull不知不覺刪除了本地分支。
可是,你能夠改變這個行爲,加上參數 -p 就會在本地刪除遠程已經刪除的分支。
$ git pull -p # 等同於下面的命令 $ git fetch --prune origin $ git fetch -p
將本地分支的更新,推送到遠程倉庫。
$ git push <遠程倉庫名> <本地分支名>:<遠程分支名>
若是省略遠程分支名,則表示將本地分支推送與之存在"追蹤關係"的遠程分支(一般二者同名),若是該遠程分支不存在,則會被新建。
$ git push <遠程倉庫名> <本地分支名>
若是origin遠程庫不存在 <本地分支名> ,則會被新建
若是省略本地分支名,則表示刪除指定的遠程分支,由於這等同於推送一個空的本地分支到遠程分支。
$ git push origin :master # 等同於 $ git push origin --delete master
若是當前分支與遠程分支之間存在追蹤關係,則本地分支和遠程分支均可以省略。
$ git push origin
若是當前分支只有一個追蹤分支,那麼倉庫名均可以省略。
$ git push
若是當前分支與多個倉庫存在追蹤關係,則可使用-u選項指定一個默認倉庫,這樣後面就能夠不加任何參數使用git push。
$ git push -u origin master
上面命令將本地的master分支推送到origin倉庫,同時指定origin爲默認倉庫,後面就能夠不加任何參數使用git push了。
不帶任何參數的git push,默認只推送當前分支,這叫作simple方式。此外,還有一種matching方式,會推送全部有對應的遠程分支的本地分支。Git 2.0版本以前,默認採用matching方法,如今改成默認採用simple方式。若是要修改這個設置,能夠採用git config命令。
$ git config --global push.default matching # 或者 $ git config --global push.default simple
還有一種狀況,就是不論是否存在對應的遠程分支,將本地的全部分支都推送到遠程倉庫,這時須要使用--all選項。
$ git push --all origin
若是遠程倉庫的版本比本地版本更新,推送時Git會報錯,要求先在本地作git pull合併差別,而後再推送到遠程倉庫。這時,若是你必定要推送,可使用--force選項。
$ git push --force origin
上面命令使用--force選項,結果致使遠程倉庫上更新的版本被覆蓋。除非你很肯定要這樣作,不然應該儘可能避免使用--force選項。