遠程操作

使用Git管理源碼時,如果項目需要和他人協(xié)作,通常需要一個或多個遠程倉庫(remote repository)。
遠程倉庫作為項目的版本庫,可以托管在自己搭建的Git服務(wù)器上的,也可以是托管在互聯(lián)網(wǎng)上的(例如GitHub、AzureDevops等)。

1. 管理遠程倉庫

1.1. 查看遠程倉庫

  • git remote -v:查看本地倉庫所有的遠程倉庫。仍然以gitsample為例:
$ git remote -v
origin  https://github.com/efreykongcn/gitsample (fetch)
origin  https://github.com/efreykongcn/gitsample (push)

命令返回了兩行信息,分別列出了fetch和push命令的對應(yīng)remote。這兩個命令隨后會介紹。
每一行信息的第一列為遠程倉庫的別名(默認為origin),第二列為遠程倉庫的地址。

為什么我們并沒有對gitsample添加過任何遠程倉庫,而倉庫里就已經(jīng)由遠程倉庫了?這是因為項目是從github clone初始的,clone的時候git會自動將被clone的源設(shè)置為本地倉庫的remote。

  • git remote show <遠程倉庫別名>查看指定遠程倉庫?,F(xiàn)在查看下origin
$ git remote show origin
* remote origin
  Fetch URL: https://github.com/efreykongcn/gitsample
  Push  URL: https://github.com/efreykongcn/gitsample
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

1.2. 移除遠程倉庫

  • git remote rm <遠程倉庫別名>命令可以移除指定的遠程倉庫。
    現(xiàn)在我們來將gitsample默認添加的remote移除:
$ git remote rm origin

再來查看遠程倉庫:

$ git remote -v

命令返回的結(jié)果是空的,可以確認

1.3. 為本地倉庫添加遠程倉庫

  • git remote add <遠程倉庫別名> <遠程倉庫url>命令可以添加遠程倉庫。
    現(xiàn)在我們將github上的遠程庫添加回來:
$ git remote add githubek git@github.com:efreykongcn/gitsample.git

再查看遠程倉庫:

$ git remote -v
githubek        origin git@github.com:efreykongcn/gitsample.git (fetch)
githubek        origin git@github.com:efreykongcn/gitsample.git (push)

1.4. 修改遠程倉庫

  • git remote rename <當前遠程倉庫的別名> <想要改成的別名>:修改遠程倉庫的別名。
    遠程倉庫又添加回來了,只是這次的別名為“githubek”。通常推薦默認同步的倉庫別名為origin,現(xiàn)在我們將別名改回來:
$ git remote rename githubek origin
  • git remote set-url <遠程倉庫別名> <遠程倉庫url>:修改遠程倉庫的url。
    另外這次添加的遠程倉庫使用的是ssh,現(xiàn)在改回https:
$ git remote set-url origin https://github.com/efreykongcn/gitsample.git

再來查看:

$ git remote -v
origin  https://github.com/efreykongcn/gitsample.git (fetch)
origin  https://github.com/efreykongcn/gitsample.git (push)

2. 同遠程倉庫同步數(shù)據(jù)

2.1. 向遠程倉庫推送更新

使用git push命令可以向遠程倉庫推送更新。常見的幾種用法如下:

  • git push origin master
    將本地當前分支的更新推送到遠程倉庫origin的master分支。使用這個命令時,如果分之間沒有建立跟蹤關(guān)系會報錯:fatal: The current branch master has no upstream branch.

  • git push --set-upstream <遠程倉庫別名> <遠程分支名>
    為本地的分支同遠程倉庫的分支建立跟蹤關(guān)系并將本地分支的更新(提交)推送到遠程倉庫關(guān)聯(lián)的分支。

  • git push <遠程倉庫別名> <本地分支名>:<遠程分支名>
    將指定的本地分支的更新推送到遠程倉庫的指定分支。這個命令不需要本地分支和遠程分支建立跟蹤關(guān)系。

  • git push origin --delete feature-c3
    刪除遠程倉庫orgin的feature-c3分支。效果等同于git push origin :feature-c3(推送空的庫到遠程倉庫)。如果遠程倉庫只有一個分支(默認分支),那么這個分支不允許被刪除,使用推送刪除命令時git會報錯。

  • git push --all origin
    將本地所有的分支推送到遠程倉庫,包括本地新建但還沒有推送到遠程倉庫的分支。

  • git push -f origin master:強制將本地的更新推送到遠程倉庫origin的master分支。例如,當本地發(fā)生過提交的回撤時(被本地回撤的遞交已經(jīng)被推送到遠程倉庫),需要使用-f這個強制參數(shù),否則不會成功。

  • git push origin --tags
    將本地的tag推送到遠程倉庫。需要注意的是,在使用push命令但是沒有指定--tags參數(shù)的情況下,git是不會將tag推送到到遠程倉庫的。

接下來將本地的更新推送到遠程倉庫:

$ git push --set-upstream origin master
Enumerating objects: 14, done.
Counting objects: 100% (14/14), done.
Delta compression using up to 8 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (12/12), 1.22 KiB | 249.00 KiB/s, done.
Total 12 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To https://github.com/efreykongcn/gitsample.git
   4a567b9..23b2190  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

2.2. 從遠程倉庫獲取更新

使用git fetchgit pull都可以從遠程倉庫獲取更新(commit)。不同的是fetch操作只獲取更新,但是不會將遠程倉庫的更新合并到本地倉庫。pull操作獲取更新然后將更新合并到本地倉庫,并且會用合并的結(jié)果更新暫存區(qū)和工作區(qū)。

一般推薦使用git fetch + git merge的方式來獲取更新并合并到本地。這兩個命令組合使用效果等同于git pull,但是fetch和merge之間可以通過diff來查看差異,確認沒有問題了再merge。

2.2.1. git fetch

  • git fetch <遠程倉庫別名> [<遠程分支名>]:從遠程倉庫獲取更新到本地倉庫,但是不更新暫存區(qū)和工作區(qū)。如果不指定分支名則獲取全部分支的更新。這個命令通常用來查看遠程倉庫的更新情況。

從遠程倉庫獲取了更新后,可以使用git diff <本地分支名> <遠程倉庫別名>/<遠程倉庫分支名>命令來查看本地分支和遠程分支的差異。

如果本地分支同遠程分支的提交有差異,可以使用git merge [<本地分支名>] <遠程倉庫別名>/<分支名>命令將遠程分支的提交合并到本地的分支。

示例:

$ git fetch origin  #獲取origin全部分支的更新
$ git fetch origin master #獲取origin master分支的更新
$ git diff master origin/master
$ git merge origin/master   #省略本地分支名,則會將origin/master合并到當前簽出的本地分支。

2.2.2. git pull

  • git pull <遠程倉庫別名> <遠程分支名>[:<本地分支名>]
    從遠程倉庫指定分支拉取更細并合并到本地指定的分支。如果不指定本地分支名,則默認合并到當前簽出的分支。

示例:

$ git pull origin master
From https://github.com/efreykongcn/gitsample
 * branch            master     -> FETCH_HEAD
Already up to date.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容