2017-03-03 28 views
4

我正在幫助一些人蔘與一個項目,而我之前沒有使用過Git,所以我很生疏,並希望得到正確的結果。我的git工作流是否正確並符合我的團隊?

背景

沒有分叉。我被建議直接複製回購,然後分支。

origin/master包含當前版本

origin/develop的產品代碼包含了下一個版本

我的Git的工作流程草案

  1. 克隆的最新發展變化的代碼回購本地機器:

    $ git clone <origin-url>

  2. 創建新的分支:

    $ git checkout -b newFeature develop

  3. 進行更改,階段和提交它們:

    $ git add . 
    $ git commit -m "<message>" 
    
  4. 更改推到遠程newFeature分公司(此分支不但在原產地回購存在):

    $ git push origin newFeature 
    
  5. 提交pull request將origin/newFeature合併爲origin/develop

  6. 在接受拉請求刪除本地分支:

    $ git branch -d newFeature

問題

  • 難道我就在想,我需要確保我的本地develop在推動我的之前,分支已經與origin/develop保持同步分支?這樣,我會幫助我的同事避免合併衝突,並允許快速合併?

  • 這樣做的最佳方法是什麼?我應該定期將origin/develop分支轉移到本地計算機嗎?

  • Will Git會通知我,當我嘗試推送分支時代碼不是最新的?它會阻止推動嗎?

  • 是否有必要在第2階段專門分支develop?如果我只是使用這個命令,這有什麼關係嗎?

    $ git checkout -b newFeature

+0

我在批准PR後做的事情是將我的分行與當前的分行重新分配。所以我可以在本地解決合併衝突,我的分支是最新的開發。在此之後,我強制推回到我的原點/ newFeature併合並。 –

+0

有一點需要注意,你可能需要'git push -u origin newFeature'來首次推送你的特性分支(儘管這取決於你的推送。默認'設置和Git版本:默認情況下這是自Git 2.0以來必需的,但在早期的Gits中不是這樣)。 – torek

回答

2

難道我就在想,我需要確保我的本地開發分支是最新的原產/開發之前,我推了我newFeature分支?這樣,我會幫助我的同事避免合併衝突,並允許快速合併?

是的。在你做你推:

git checkout develop 
git pull origin develop 
git checkout newFeature 
git rebase develop 

這假定沒有其他人作爲工作的newFeature,爲您的方案。如果其他人也得到了你的分支,那麼rebase可能需要與他們進行額外的溝通,否則你可能會(雖然我個人很討厭這個問題,儘管大多數人都是這樣做的),合併develop改爲newFeature

這樣做的最佳方法是什麼?我應該定期將原產地/開發分公司拉到本地機器嗎?

絕對。使用git,你可以儘可能頻繁地進行提交,拉取和推送。你越早做這件事,就越不可能得到一個怪物合併,這讓你毫無出路(因爲你無法理解巨大的變化是怎麼做的)。較小的單位更容易處理。

Will Git通知我,當我嘗試推送分支時代碼不是最新的?它會阻止推動嗎?

是的,它不會允許,並給你一個有意義的消息。你只能推動快進,或者如果快速前進是不可能的(例如,你分道揚,),你可以進行強制推進,就像替換目標一樣,並且會讓你與同事陷入困境除非你是「所有人的主人」。在推動時你永遠不能做隱式合併,它是「無論/還是」,按設計。

請注意,這裏的例外是「您的」newFeature分支,假設您是唯一處理它的分支。然後,如上圖所示,在您重新綁定之後,您將完全發生這種「被阻止」的情況,並且您必須使用「--force」才能將其發送到遠程。只要沒有其他人拉你的分支,並努力工作,這是好的,但。

第2階段是否需要專門分支開發?如果我只是使用這個命令,這有什麼關係嗎? git checkout -b newFeature

該命令將分支出工作目錄中當前分支的任何內容,因此從理論上說,如果您感到困惑,它可能會出錯。在克隆之後,默認情況下,master分支處於活動狀態。所以是的,你需要明確地指定develop,或者事先做一個git checkout develop