2014-02-09 66 views
0

我有一個項目正在工作。每次我想創建一個新功能時,我都會從其主分支中分支並創建一個名爲FeatureX的新功能,稍後我會將其合併到主功能中。幾個修改後的文件。只提交branchA中的fileA,branchB中的fileB,

讓我們假設我創建了一個名爲featureA的分支,最後我修改了featureA(它在fileA.py中)並修改了featureB(它在fileB.py中)。

在branchA上,如果按照我通常的方式進行提交,那麼我會在branchA中包含在fileA中完成的更改,這是我不想要的。我想要在branchA中的fileA中完成所做的更改以及在branchB中的fileB中完成的更改。

我如何在branchA中只提交在fileA.py中完成的更改,然後簽出到branchB並僅提交對fileB.py所做的更改?

編輯:

我沒有在我的原始郵件指定這一點,也許我應該澄清:的fileA和FILEB在兩個分支(branchA和branchB)存在。

但是,當我在branchA中提交時,我只想提交在fileA中完成的更改,並且不修改fileB。然後結帳到branchB並僅提交對fileB所做的更改,並保持fileA的版本不變。

回答

2

確保你在爲特徵的分支,在右側:

git checkout featureA 

添加更改並提交他們

git add fileA.py # use correct path to the file, of course 
git commit -m "Glorious updates to fileA" 

現在,把你的改變fileB.py一起另一個功能分支,有一個簡單和更復雜的情況。

易於情況:fileB.py不分支之間

切換到其他分支不同,並且執行相同

git checkout featureB 
git add fileB.py 
git commit -m "Fabulous bugfixes to fileB" 

(略)更復雜的情況下:fileB.py不同

如果fileB.py不同,結帳featureB將失敗(Git將中止簽出一條消息,說明未改變的改變將被覆蓋)。所以你可以試試結帳,你不會失去改變,除非你使用-f/--force開關或使用git clean之類的東西。你會得到這個錯誤:

error: The following untracked working tree files would be overwritten by checkout: 
    fileB.py 
Please move or remove them before you can switch branches. 
Aborting 

你將不得不暫存你的改變。像這樣:

git stash # will save all uncommitted changed into a temporary space 
git checkout featureB 
git stash pop # will try to apply your saved changes; there may be a conflicts 
    # if there are conflicts (Git will tell you), go through normal resolution 
git add fileB.py 
git commit -m "Incandescent stash of bugfixes to fileB" 
+0

感謝您的回答Nevik。我編輯了我原來的消息,因爲我不確定如果兩個文件中都存在這兩個文件,但是我只想更新分支A中的fileA和分支B中的fileB,就可以工作。會嗎? – Xar

+1

剛剛更新我的答案,以包括問題的情況,以及:) –

+0

非常感謝Nevik再次。你的回答非常有幫助! – Xar

相關問題