2013-01-05 83 views
394

我在GitHub存儲庫中有兩個分支,即masterdevelopment。如圖所示,我正在開發分支中進行所有的開發。合併開發分支與主

git branch development 
git add * 
git commit -m "My initial commit message" 
git push -u origin development 

現在我想合併所有的development分支變成了master。我目前的做法是:

git checkout master 
git merge development 
git push -u origin master 

請讓我知道如果我下面的做法是正確的。

+4

'git pull -u'設置分支的上游跟蹤(如果推送多個分支,則爲所有分支)。一旦設置,跟蹤依然存在。沒有理由不斷使用它。 –

+7

@YoushaAleayoub爲什麼呢? – Lukon

+1

不錯的工作...保存我的時間。 –

回答

617

我一般喜歡合併masterdevelopment第一,這樣,如果有任何衝突,我可以在development分支本身解決,我的master保持清潔。

(on branch development)$ git merge master 
(resolve any merge conflicts if there are any) 
git checkout master 
git merge development (there won't be any conflicts now) 

沒有太多的兩種方法的差異,但我有時會注意到,我不想合併分支到master然而,合併後的他們,或者說還有更多的工作在這些可以合併之前完成,所以我傾向於保留master直到最後的東西。

編輯:從意見

如果你想跟蹤誰做了合併和時,您可以使用--no-ff標誌,同時合併這樣做的。這通常僅在將development合併到master(最後一步)時纔有用,因爲您可能需要在工作流中多次合併masterdevelopment(第一步),並且爲它們創建提交節點可能不會很有用。

git merge --no-ff development 
+42

這種方法存在一個缺點:實際合併到主機最有可能是快進合併,因此不會創建任何提交節點。這對分支上的實際代碼沒有任何問題,但後來很難發現,誰做了真正的合併掌握和在哪個時間。爲了解決這個問題,需要一個明確的「--no-ff」來合併爲主。 – michas

+8

是的,這就是'--no-ff'的意思。 :) – michas

+12

這就是'git merge --no-ff development'只是爲了糾正@ elect的用法。 –

6

是的,這是正確的,但它看起來像一個非常基本的工作流程,當你只是緩衝的變化,他們已經準備好整合之前。你應該看看git支持的more advanced workflows。您可能會喜歡topic branch的方法,它可以讓您並行處理多個功能,或graduation approach,它可以擴展您當前的工作流程。

59

就我個人而言,我的方法與您的方法類似,只有更多的分支和一些壓倒性的提交時,他們回到主人。

我的一位同事不喜歡必須如此切換分支機構,並在開發分支上留下類似於以下內容的所有內容,這些內容都是從開發分支執行的。

git fetch origin master 

git merge master 

git push origin development:master 

第一行確保他已作出掌握自上次更新了本地倉庫任何上游提交。

第二拉動從主這些更改(如果有的話)轉換成發展

第三推動發展分支(現在主完全合併)到原點/主。

我可能有他的基本工作流程有點不對,但這是它的主要要點。

13

如果您可以使用Git Flow命令,那將會很棒。它輕鬆地將開發分支合併到Master。

你想要做的只是跟着這裏的git的流指令提什麼,

http://danielkummer.github.io/git-flow-cheatsheet/

步驟。

  • 設置git的流量工程
  • 建立分支機構,並承諾一切發展
  • 運行命令「混帳流釋放開始」
  • 然後給含義完整消息發佈
  • 運行命令「git流發佈完成」
  • 它將合併所有內容到主並將分支更改爲主。
  • 運行命令「GIT中推」提交更改到主站。

檢查上面的鏈接獲取更多信息。

+0

解決方案如果有人使用git flow! –

5

來自底部的說明,來自這裏誰不知道分支的人。

基本主分支開發邏輯是:您僅在另一個分支上工作,並且僅使用主分支來合併另一個分支。

你開始以這種方式來創建一個新的分支:

1)克隆庫需要在Web根:

$ cd /var/www 
$ git clone [email protected]:user_name/repository_name.git 

2)創建一個新的分支。它將包含您的主分支庫的最新文件

$ git branch new_branch 

3)變更的git分支到new_branch

$ git checkout new_branch 

4)完成編碼,提交,像往常一樣...

$ git add . 
$ git commit -m 「Initial commit」 
$ git push (pushes commits only to 「new_branch」) 

5)當這個分支上的工作完成時,與「主」分支合併:

$ git merge master 
$ git checkout master (goes to master branch) 
$ git merge development (merges files in localhost. Master shouldn’t have any commits ahead, otherwise there will be a need for pull and merging code by hands!) 
$ git push (pushes all 「new_branch」 commits to both branches - 「master」 and 「new_branch」) 
+0

我喜歡你的方法,不要在主人身上工作。但今天當我玩gitflow時,我創建了'develop'的'release'分支。然後添加發布說明文件並提交。然後完成合併到'master/develop'的發佈。但我的主分支只有新增的發行註釋。在之前的開發提交中沒有其他文件被更新。 –

+0

如果您在另一個分支上工作,請確保您已提交併將更改推送到該分支。你可以看看github.com或bitbucket.com的圖形界面上的文件是如何顯示的,並嘗試點擊網站上的Merge。它應該更新從分支到主的所有內容。 如果主文件具有較新的文件,則應該是衝突,您將收到錯誤消息。 不知道我有足夠的回答,請給我留言,如果不是:) – Gediminas

+0

我使用sourcetree作爲GUI和github存儲庫。我嘗試了兩次釋放測試。主從未更新最新的開發分支。 –

2

1)在分支發展,使用以下命令來檢查git的狀態:

git的狀態

不應該有任何未提交的代碼。如果是,推動發展的分支代碼:

git的添加*

git的承諾-m 「我最初提交信息」

混帳推起源發展

2)在發展分支,運行以下兩個命令:

GIT中分支-f主HEAD

GIT中推-f原點主

它會將您的開發分支代碼推送到主分支。

+0

這是否會推動所有開發提交以及主控? – rolls

2

GIT中拉(當前開發分支)

GIT中結帳主

GIT中拉

GIT中合併發展

GIT中推原點主

1

步驟1

創建並切換到新的「開發」分支,您的本地git文件與遠程同步,但「dev」分支尚不存在。

git branch dev # create 
git checkout dev # switch 
# No need to git add or git commit, the current 
# branch's files will be cloned to the new branch by-default. 
git push --set-upstream origin dev # push the "dev" branch to the remote. 

步驟2

進行更改的「開發」分支(當前的,如果你遵循步驟1),提交併推送到遠程的「開發」分支。

git add . 
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github) 
git push -u origin dev # push the changes to the remote, -u origin dev is optional but good to use. 

步驟3

合併的 「開發」 分支到 「主人」。

git checkout dev # switch to "dev" branch if you're not already. 
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit. 
git checkout master # switch to "master", which is the branch you want to be merged. 
git merge --no-ff dev # merge the "dev" branch into the "master" one. 
1

如果您在Mac或Ubuntu上,請轉到分支的工作文件夾。在終端

假設harisdev是branchname。

git checkout master 

如果有未跟蹤或提交的文件,你會得到一個錯誤,你必須提交或刪除所有未跟蹤或提交的文件。

git merge harisdev 

git push origin master 

最後一條刪除分支的命令。

$ git branch -d harisdev 
+0

這裏是特定於Mac或Ubuntu的? – talonx

+0

對不起。其他答案都沒有提到應該在終端中給出這些命令以及刪除該分支的命令。實際上,我只是想添加刪除分支的命令,以便開發人員不會在將來弄亂同一分支。我正在使用Mac,所以我提到了它。你的問題是有效的,這些命令都不是特定於Mac或Ubuntu的。 –

+0

謝謝澄清。 – talonx