Git遠程操做

遠程操做

添加SSH

以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

git clone

克隆遠程庫進程

首先進入本身的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 <版本庫的網址> <本地目錄名>

gir remote

用於管理遠程庫名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 show命令加上遠程庫名,能夠查看該遠程庫的詳細信息。

git remote add命令用於添加遠程倉庫。

$ git remote add <遠程庫名> <遠程庫網址>

git remote rm

git remote rm命令用於刪除遠程庫。

git remote rename

$ git remote rename <原遠程庫名> <新遠程庫名>

git fetch

一旦遠程倉庫的版本庫有了更新(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 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 <遠程倉庫名> <本地分支名>:<遠程分支名>

若是省略遠程分支名,則表示將本地分支推送與之存在"追蹤關係"的遠程分支(一般二者同名),若是該遠程分支不存在,則會被新建。

$ 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選項。

相關文章
相關標籤/搜索