標籤:

Github使用系列(三):Github分支操作

Github分支操作

基本操作

  • 定位到需要創建分支的本地倉庫
  • git branch <分支名> 創建分支
  • git checkout <分支名> 切換到分支
  • git push <遠程地址別名> <分支名> 推送分支到遠程倉庫
  • git merge <分支名> 合併分支代碼

場景演示1 簡單的分支創建與合併

  • 定位到test4,並打開文件夾資源管理器
  • git branch dev1 創建分支
  • git checkout dev1 本地倉庫切換到dev1分支
  • touch dev1.html
  • git add dev1.html
  • git commit -m create dev1.html
  • 完成: 在分支中創建新文件並提交
  • 查看文件夾test4, 此時多了一個新文件: dev1.html
  • checkout master 切換回master分支
  • 查看資源管理器,此時顯示的是master分支的內容,所以就沒有dev1.html文件了
  • git push origin dev1 推送分支dev1到test4的遠程倉庫中
  • 查看Github,發現現在有兩個分支了:master,dev1
  • git checkout master 切換到master分支,準備合併dev1.html
  • git merge dev1 此時test4本地倉庫的master分支也有了dev1.html
  • git push origin master 推送master分支到遠程倉庫
  • 刷新Github頁面後,master分支也有了dev1.html文件

場景演示2 多人協作,代碼衝突時的合併與回滾

假設有兩個程序員tony,mary在操作同一個項目test4,他們各自從遠程倉庫中克隆了一個本地倉庫。並且各自建立了一個分支:branchTony, branchMary

  • tony: git checkout branchTony
  • tony: 編輯文件a.html. 在第一行輸入"tony"
  • tony: git add a. html git commit -m edit a
  • tony: git checkout master
  • tony: git merge branchTony 合併分支的更新到master
  • tony: git push origin master 推送master分支
  • 查看遠程倉庫master分支的a.html, 內容是tony

    此時,test4遠程倉庫中的master分支的a.html已經被tony修改了。但是mary並不知情
  • mary: git checkout branchMary
  • mary: 編輯文件a.html. 在第一行輸入「mary」
  • mary: git add a. html git commit -m 」edit a「
  • mary: git checkout master
  • mary:git pull origin master mary意識到遠程倉庫的master分支可能已經被人修改了,為了安全起見,先獲取一下最新代碼
  • mary: git merge branckMary 報錯:a.html中有衝突,自動merge失敗,不能merge

    打開a.html, 會發現有如下內容。其中HEAD到 =======之間的內容是master中最新更新的內容, =======到branchMary之間的就是mary更新的內容。可以根據實際需要進行手動合併。 <<<<<<< HEAD tony

    =======

    mary

    >>>>>>> branchMary

  • mary: 手動合併代碼

tony maryn

  • mary: git commit -am 」merge ok「 處理完衝突後,提交
  • mary: git push origin master 推送到遠程倉庫
  • 查看遠程倉庫的a.html, 內容是tony, mary

    過了一會兒,mary發現tony的更新才是對的,需要把自己推送的代碼回滾到tony的最新版本
  • mary: git log 查看tony最新推送代碼的commit id。其實就是在決定要回滾到哪個版本
  • mary: git revert <commit id> 報錯:不能revert <commit id> ........... 提示:文件有衝突 提示: revert時有衝突是很正常的,不用擔心
  • mary: 打開 a.html. 解決衝突。把「mary」刪掉,只留下「tony」,因為「tony」才是正確的代碼
  • mary: git add a.html
  • mary: git commit -am "revert to tony"
  • mary : git push origin master
  • mary: 查看遠程倉庫的a.html現在只有「tony」了。同時,commits中又多了一條mary的推送記錄

幫助命令

  • git log 查看每次提交的日誌,按回車可以看更多

    每條記錄都有一個commit id, 它和Github中的提交記錄的id是對應的(點擊commits選項可以查看)

推薦閱讀:

圖文詳解如何利用Git+Github進行團隊協作開發
有什麼高質量的現代C++風格的開源代碼?
機器之心GitHub項目:從零開始用TensorFlow搭建卷積神經網路
GitHub|2017年 倫敦深度學習研討會資料庫(附資源)
這是github被中間人攻擊了嗎?

TAG:GitHub |