git 分支?
對git不是很熟悉,有個問題要弄清楚一下。
假如遠程倉庫有 dev 和 master 兩個分支,master 作為一個穩定版分支,可用於直接發布產品,日常的開發則 push 到 dev 分支,那我本地是不是要從 dev 分支中創建一個本地分支,然後在這個分支的 push 的動作是默認推到遠程 dev 分支上?可以的話簡單寫一下命令,謝謝
分一二兩點回答,建議都看。
第一點是回答你的問題,第二點是更加全面的了解和其他推薦。一、遠程倉庫有master和dev分支1. 克隆代碼
git clone https://github.com/master-dev.git
# 這個git路徑是無效的,示例而已
2. 查看所有分支
git branch --all
# 默認有了dev和master分支,所以會看到如下三個分支
# master[本地主分支] origin/master[遠程主分支] origin/dev[遠程開發分支]
# 新克隆下來的代碼默認master和origin/master是關聯的,也就是他們的代碼保持同步
# 但是origin/dev分支在本地沒有任何的關聯,所以我們無法在那裡開發
3. 創建本地關聯origin/dev的分支
git checkout dev origin/dev
# 創建本地分支dev,並且和遠程origin/dev分支關聯,本地dev分支的初始代碼和遠程的dev分支代碼一樣
4. 切換到dev分支進行開發
git checkout dev # 這個是切換到dev分支,然後就是常規的開發
5. 為了更好的理解,最好繼續看看下文。
二、假設遠程倉庫只有mater分支1. 克隆代碼git clone https://github.com/master-dev.git
# 這個git路徑是無效的,示例而已
2. 查看所有分支
git branch --all
# 默認只有master分支,所以會看到如下兩個分支
# master[本地主分支] origin/master[遠程主分支]
# 新克隆下來的代碼默認master和origin/master是關聯的,也就是他們的代碼保持同步
3. 創建本地新的dev分支
git branch dev # 創建本地分支
git branch # 查看分支
# 這是會看到master和dev,而且master上會有一個星號
# 這個時候dev是一個本地分支,遠程倉庫不知道它的存在
# 本地分支可以不同步到遠程倉庫,我們可以在dev開發,然後merge到master,使用master同步代碼,當然也可以同步
4. 發布dev分支
發布dev分支指的是同步dev分支的代碼到遠程伺服器
git push origin dev:dev # 這樣遠程倉庫也有一個dev分支了
5. 在dev分支開發代碼
git checkout dev # 切換到dev分支進行開發
# 開發代碼之後,我們有兩個選擇
# 第一個:如果功能開發完成了,可以合併主分支
git checkout master # 切換到主分支
git merge dev # 把dev分支的更改和master合併
git push # 提交主分支代碼遠程
git checkout dev # 切換到dev遠程分支
git push # 提交dev分支到遠程
# 第二個:如果功能沒有完成,可以直接推送
git push # 提交到dev遠程分支
# 注意:在分支切換之前最好先commit全部的改變,除非你真的知道自己在做什麼
6. 刪除分支
git push origin :dev # 刪除遠程dev分支,危險命令哦
# 下面兩條是刪除本地分支
git checkout master # 切換到master分支
git branch -d dev # 刪除本地dev分支
7. 推薦書籍 progit.pdf
書籍格式和語言:中文、英文、PDF、ePub下載地址:http://git-scm.com/book8. 還有不理解的地方可以提問 $_^寫在前面:
1. 建議使用source tree或者其他的gui工具。2. 安裝oh-my-zsh開始回答問題:
最近在看git關於分支的管理,發現可以用git-flow用來管理分支。先貼上項目地址nvie/gitflow · GitHubgit-flow主要有5中分支:master、hotfix、release、develop、feature。feature分支開始於develop分支,完成以後合併到develop分支。
當完成一定數量feature分支以後,從develop再開一個release分支出來,這些特性將被更行到下一個發布的版本中,之後的feature將不會被合併到release中。
之後在release分支中,只修改bug,然後完成release分支。完成release分支會完成以下三個操作:1、合併release分支到master;2、給master打上版本的標籤;3、release回歸到develop分支。
當發現master上有bug時,開一個hotfix,完成後合併到master分支。
基本的開發流程就是這樣,不清楚的可以看看文檔Gitflow Workflow
PS:source tree中已經集成了git-flow使用感受良好最近在最新的博客上寫了關於git初學者的系列文章,可以看一下: http://hanfu.space/learning/2015/10/26/git-tutorial-2/
遠程分支upsteam一般由倉庫管理員來維護,merge的許可權也可以設。發布的話不一定是按master來,很多是按穩定的tag來發布的。
網上推薦的工作流一般是用fetch+rebase (相比pull+merge工作流更乾淨,不容易出錯)比如dev是你的公共開發分支git checkout dev # 本地切到公共分支
git pull # 將本地的dev更新
git checkout -b bug_101026 # 新建一個主題分支(一個bug,一個功能什麼的)
... # 改動.. commit.. 測試...
git fetch origin # 更新upstream
git rebase origin/dev # 將你的commits移到的末尾
git checkout dev # 切換到公共分支
git pull # 更新公共分支
git rebase bug_101026 # 將你的主題分支加到公共分支的末尾
git push # 推送
我說的不是如何做 而是做什麼 不做什麼
------------------以下是答案---------------
你的問題是要不要 我給出的答案是不要永遠不要這麼推送 本地和遠程分支名嚴格保持一致
分支名應該能表示兩件事
who 誰負責
what 做什麼------------------ 以上是答案 ----------------如果在我的團隊有人非要這麼干 我保證後面會有人拿分支名來猜謎語 本地的分支是謎底 遠端別人看到的是謎面 大家一起猜猜猜
吐槽時間結束 下面是原因
如果不一致 單獨維護映射關係
也就是自己用一套混淆機制增加開發維護成本不清楚是誰 不清楚做什麼最後告訴你怎麼做
1 從dev開本地新分支 featurebranch
2 日常工作保證提交到新分支 featurebranch3 如果需要多人共同開發,推送到遠端 featurebranch4 開發完畢 將feachbranch合併到dev分支5 推送dev到遠端,此處應該需要重新拉取dev分支fast forward到最新 或者fetch rebase6 刪除本地 和 遠端 featurebranch如果有code review 4、5應該通過merge request來實現以上各步驟命令 其它答案都有 就不寫了
等你理解問題究竟是什麼 能夠明確思考問題的細節 如何做就自然會浮現
這裡說比較全:
http://aissues.com/m/book.php?id=31622EF2-11DD-4CFD-9616-9283B202A5BE
不用,master就是團隊的開發測試了,qa測試了。認可的比較穩定的代碼,所以你可以直接從遠程clone下master分支,再從本地master創建你的開發分支開發測試等,等測試差不多了和master合併進行發布,如果不滿意這次發布,公司可以回退的,當然你需要本地master和遠程保持一樣就需要經常pull下別人發布的代碼。
1. 安裝oh-my-zsh2. git fetch origin 獲取最新版本到本地3. git branch -a(all的縮略寫法) 查看所有分支,包括本地和遠程4. git checkout origin/dev (遠程分支) -b dev(本地分支) 新建本地分支並切換過去
推薦閱讀: