Git遠程協做和分支

1、遠程基本操做

基本的配置遠程倉庫有兩個命令:html

  • git remote add origin git@github.com:ZXZxin/gitlearn.git 
  • git push -u origin master

這裏先演示環境搭建,也就是和github上一個倉庫遠程關聯起來,這裏遇到了一些坑,記錄一下:java

《Git遠程協做和分支》

坑解決的兩篇文章:git

普及:github

  • 可使用git remote show origin,查看詳細的遠程remote信息(注意origin是一個別名,不必定要這個名字)
  • git commit am '....'只會將已經歸入版本庫的文件add並提交,新增的文件不會add

2、協做

一開始masterorigin/master同樣。架構

《Git遠程協做和分支》

而後咱們須要再調用一次git push來同步遠程,這樣id就會相同了。併發

《Git遠程協做和分支》

解釋:分佈式

git內部會本身維護origin/master這個分支,咱們不能操做,可是能夠執行git checkout origin/master,雖然這個命令不會報錯,可是咱們實際上只是切換到了提交的那個點(commit-id)的位置上,也就是和以前那個遊離的狀態同樣。咱們能夠在這個commit-id位置上進行修改,可是切換的時候要先stash一下。高併發

來看一下上面的原理和過程:測試

初始狀態:fetch

《Git遠程協做和分支》

 

而後咱們調用了增長或者修改元素,調用git addgit commit以後(這時候尚未push),就會變成下面這樣: (這時候git會告訴咱們masterorigin/master提早了一步)

《Git遠程協做和分支》

 

而後咱們調用git push,注意這個過程作了兩步:

  • 將本地的內容push到遠程了;
  • origin/master由上面的指向了

《Git遠程協做和分支》

 

3、Git協做實戰

模擬環境:

  • 有兩我的協做,一個張三,一個李四,張三的倉庫就是咱們以前用的那個gitlearn,李四是直接從張三的遠程倉庫git clone下來的;
  • 而後咱們再將張三的gitlearn和李四的gitlearn2都設置一下user.nameuser.email

李四先git clone下來:

《Git遠程協做和分支》

而後將張三和李四的用戶名和密碼配置一下:

《Git遠程協做和分支》

如今咱們在gitlearn添加一個c.txt文件,而後git push到遠程倉庫,而後在gitlearn2這邊輸入git remote show origin來查看區別:

《Git遠程協做和分支》

remotes/origin/HEAD -> origin/master 啥意思呢?

在clone完成以後,Git 會自動爲你將此遠程倉庫命名爲originorigin只至關於一個別名,運行git remote –v或者查看.git/config能夠看到origin的含義),並下載其中全部的數據,創建一個指向它的master 分支的指針,咱們用(遠程倉庫名)/(分支名) 這樣的形式表示遠程分支,因此origin/master指向的是一個remote branch(從那個branch咱們clone數據到本地)

也就是origin/master是用來追蹤遠程分支的。

而後咱們在gitlearn2裏面執行git pull,將遠程的最新更新拉去過來。查看最新的更新信息。

《Git遠程協做和分支》

上圖的過程:

《Git遠程協做和分支》

下面展現會發生衝突的狀況:

  • 張三先修改了a.txt的第二行,而後push到了遠程;
  • 李四也修改了a.txt的第二行,而後也想push到遠程,就會報錯;

《Git遠程協做和分支》

此時李四要先git pull

如今展現李四的操做:

《Git遠程協做和分支》

可是此時還不夠,咱們須要調用git add來標識已經解決了衝突;

《Git遠程協做和分支》

總結git add的三個做用:

  • 將未追蹤的文件(新建的文件)加入到暫存區;
  • 將已追蹤的文件(修改的文件)加入到暫存區;
  • 解決完衝突以後,調用git add標識這個文件已經解決了衝突(git merge的時候)。

此時咱們還須要將解決衝突以後的代碼git push 到遠程.

《Git遠程協做和分支》

整個過程的流程:

《Git遠程協做和分支》

通常在git push以前都要進行git pull操做。

git pull = git fetch + git merge

git fetch會直接將代碼拉到origin/master,可是和當前本地的master不會衝突。可是git merge就會產生衝突。

下面展現分別使用git fetchgit merge來操做:

先使用git fetch,不會產生衝突:

《Git遠程協做和分支》

接下來咱們在李四這邊使用git merge手動解決衝突並push

《Git遠程協做和分支》

最後在張三也進行git pull便可。

關於遠程git分支,遠程(注意不是本地分支)一般有以下幾種:

  • 一、master分支: 很穩定的分支;
  • 二、test分支: 測試分支;
  • 三、develop分支: 變化最頻繁的分支;s
  • 四、hotfix分支: 緊急bug須要修復;

原文:Java架構筆記

免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。 
傳送門:  https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
相關文章
相關標籤/搜索