2014-12-05 90 views
0

我在我們的Git倉庫中有兩個目錄,在兩個目錄中的文件更新之間有大量的提交(大約400)提交,儘管沒有提交包括在同一提交中的兩個目錄的更改。如何在合併時保護目錄免受提交更改?

我們需要將我們的功能分支提交合併到主分支只有一個這些目錄,保持另一個目錄中的文件不變。這意味着我們不希望大約一半的提交適用於master。

什麼是這樣做的推薦方法?

回答

0

您無法合併單個提交,但您可以將git cherry-pick單獨提交到您的主分支。使用git log來找出你想在主服務器上提交的SHA1,並使用git cherry-pick來應用它們。

這不是一個理想的解決方案,因爲cherry-pick引入了一個與原始提交不同的新提交,因此您將在主分支和功能分支上提供基本上重複的提交。我儘量避免使用櫻桃。它似乎可以解決您的問題,但請謹慎行事。

+0

我原計劃用摘櫻桃,但這種做法一對夫婦的問題是提交的數量龐大,而且不知道一個辦法只能獲取專門應用於功能部件的提交 – draca 2014-12-05 23:10:31

+0

您可以使用'git branch --contains '來確定提交所在的分支。但我同意,我不想在許多承諾中使用櫻桃樹。 – 2014-12-05 23:14:00

+0

關於只是複製目錄的副本我不想更新,並在合併功能分支之後將其恢復......但我會通過執行「git reset directoryname; git checkout directoryname」來獲取任何內容嗎?我們真的不想添加不必要的增量,隨後會取消。 – draca 2014-12-05 23:42:24

0

要合併所有dir1變更msater..featuremaster。合併只關心從合併基礎到合併提示的內容差異,它並不關心你如何到達那裏。因此,請提交具有正確的合併基礎,只有內容的變化要合併:

git checkout -b feature-dir1-extract $(git merge-base master feature) 
git checkout feature -- dir1 
git commit -m "extracting dir1 changes from [email protected]$(git rev-parse feature)" 

你想現在你已經得到了所有的變化,您可以合併只是那些:

git checkout master 
git merge feature-dir1-extract 

這足以讓git直接瞭解已合併的內容 - 當前內容的所有當前更改均顯示在中,這正是具有正確合併基礎的原因 - 但讀取提交圖(通過git log --graph或任何gui工具)也可以更容易地添加一經祖先合併記錄,而不是僅僅不予置評事實上,同樣的內容在兩個分支截至目前:

git checkout feature 
git merge feature-dir1-extract # recording common content only, no changes 

無論如何,提取分支的名字和歷史,現在有意思的唯一的人閱讀提交歷史本身,和名稱和歷史都記錄在合併提交中。沒有必要繼續廣告的名稱大家無謂地想知道:

git branch -d feature-dir1-extract