git 遠程分支操作

文檔 https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF 學習筆記,並以gitee.com爲例實踐。

git clone

在gitee.com上創建一個新倉庫A,勾選創建readme文件。

那麼 倉庫A 創建之後默認會有一個名爲master的分支。

在本地執行 git clone 之後,本地的分支情況如下:

創建一個名爲origin的本地倉庫,拉取遠程倉庫A的所有數據及提交。

分別創建一個名爲orign/master 和另一個名爲 master 的分支,和遠程倉庫A的master分支指向同一個提交。

關於master和 origin/master的區別,及origin的說明可以見上面文檔鏈接:

git push

當前所在分支爲master分支,嘗試在本地創建一個新提交。這樣本地的master比遠程倉庫的master分支多了一個提交。

將本地master的提交推到遠程master分支的操作:

git push origin master

git push 說明

根據以上描述,git push origin master 實際上等價於 git push origin  master:master

 

假如在本地創建了一個 a_branch分支(遠程沒有),那麼使用 git push origin a_branch  這個命令,那麼遠程倉庫會創建一個新分支,同樣的本地也會創建 origin/a_branch  分支。

git fetch

現在假如兩個人協同作業,兩個都clone了遠程倉庫,並在master分支上進行開發。

USERA 做了一個提交,git push origin master 成功。

假設USERB  這個時候不知道 USERA做了提交,USERB 也做了一個新提交,當userb執行 git push origin master的時候,會出錯:

截圖中的 hint 簡單翻譯如下:更新被拒絕了,這是因爲遠程倉庫裏有你本地沒有的work。這通常是由其它倉庫push到了相同的ref。你 may want to integrate遠程的改變,然後再嘗試做 push。

然後錯誤信息裏有 fetch first 和 git pull。

git fetch

執行 git fetch 之後,用gitg工具,可以看到本地的master分支和 origin/master 已經指向不同的提交。

origin/master指向的是userA最後的提交。而master是userb 最後的在本地提交。

再來嘗試一下 git pull

git pull

git pull 之後會提交你生成一個meger的提交:

git pull 之後的結果是:

git pull --rebase

不產生 mege提交,具體可以瞭解 https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章