2014-04-22 96 views
0

我有2個分支 - master和development 雖然我在開發分支上,但我已經提交併推送了一個更改(已添加到文件中)並且成功。Git合併和提交問題

然而,當我鍵入git checkout master,其次是git merge develop ...非但沒有輸出消息像(我複製從我做了先前的合併此消息),並做了git push

Updating 325ac4a..51ffb06 
Fast-forward 
Test_Folder/Images/Img_01.jpg | Bin 0 -> 4224 bytes 
2 files changed, 1 insertions(+) 
create mode 100644 Test_Folder/Images/Img_01.jpg 

我被要求在終端本身添加一個提交消息... 這和我以前做過的所有合併都是非常不同的,這是我第一次看到它。雖然我設法通過了commit,然後是git push,但是我在某種程度上做錯了嗎?

即便如此,如果上述「問題」似乎是正確的,有沒有什麼辦法可以在不通過終端風格的情況下提交消息? (順便說一句,我試圖使用git gui,但顯然我沒有看到任何文件或任何東西)

回答

1

看起來你正在這個時候獲得真正的合併和以前的快速合併。

查看git docs查看二者的區別。 PS:完成真正的合併是完全正常的。然而,許多合作環境傾向於禁止它們,因爲這些合併實際上會導致衝突。快進合併永遠不會發生衝突。但是,兩者都很正常。

編輯:這是在特定種類的合併能夠完成情況:

1)快進合併:這是當你的master是您要合併分支的直接祖先執行它。

--*--*--*(master, HEAD)--*--*--*(dev) 

在這種情況下,執行合併裝置只移動master參照dev。最終的結果會是什麼樣子:

--*--*--*--*--*(master, dev, HEAD) 

2)真正的合併:這發生在master不是你想合併分支的直接祖先。

--*--*--*--*(master, HEAD) 
     \ 
      --*--*--*(dev) 

在這種情況下,master已經從在其上創建該dev分支點向前移動。因此,在合併期間,我們還必須在master上包含新提交的更改。所以git會嘗試創建一個全新的提交,它從兩個分支繼承並將master移動到它。

-*--*--*--*---------*(master, HEAD) 
     \  /
      --*--*--*(dev) 

將此與ff合併進行比較,您會看到它們爲什麼如此命名。 HEAD表示當前分支。

我希望我這次解釋清楚一點。

+0

謝謝你回到我身邊。就像知道Git如何或何時知道Git要執行真正的合併還是快速合併?這似乎是一個隨機的Git對我的堵嘴...... – dissidia

+0

@ user3212246每當您的開發分支和主分支並行發展時,總是需要一個真正的合併,因此將始終創建一個合併提交。 –

+0

@ user3212246我在編輯上面的答案。 –