2011-03-30 169 views
0

我正在嘗試使用git進行本地工作流管理,並着眼於爲我的團隊提出建議。所以我想充分了解我的頭腦,然後我會反駁一些我不明白的事情。Rebase,但忽略一個上游提交?

在我進入git-land的時候,我有一個SVN倉庫,讓我和另外一個開發人員開始工作。我們的PM改變了項目的時間表,以便他的子項目幾乎立即投入生產,然後在大約一個月內投入生產。我們都在開發相同的SVN回購協議,我的東西已經開始對用戶可見,所以需要爲即將到來的生產遷移而退出。

我更新了我的SVN工作目錄。我在同一個目錄中創建了一個git倉庫(忽略.svn等)。我做了git branch map-dev爲我的(地圖相關的)子項目創建開發分支。我做了git checkout master回到SVN-synced分支,並編輯這些文件來取出我的工作。一旦我的項目的早期部分不再可見,我就承諾將git(評論「地圖搜索的東西呈現爲不可見」)提交給SVN,並將SVN內容推送到分段。所以現在在分段/測試服務器上有什麼東西沒有我的東西和他所有的,這很好。

幾天後,我開發了map-dev分支,我的同事檢查了一些SVN的東西,它並沒有真正影響我在做什麼,但我想保持同步用。

I git checkout master。我svn up。 I git commit -a,註釋「來自SVN的更新」。

現在我想,好吧,rebase map-dev跟那些主人的變化吧?所以我這樣做,我解決了一兩個衝突,而且一切都顯得格格不入。然後我注意到我在master上所做的更改稱爲「地圖搜索呈現不可見」,這是目前的情況。在我的開發分支上沒有更近的提交,它只是在回購首次提交時的情況。

所以。我用git revert --hard ORIG_HEAD來回到rebase之前的位置。我想要的是我剛剛在master中輸入的CSV更改,但不是讓我的作品隱形的提交。我應該怎麼做?

回答

1

我建議合併他的代碼到您的Dev分支:

git checkout map_dev 
git merge master 

然後恢復你的承諾是刪除代碼:

git revert <sha1> 

哪裏是的SHA1的承諾,從刪除您的代碼master。現在你的map_dev分支中會有他的代碼,減去你的清理。當你到達那裏時,它會使你的代碼更容易地合併到master中。

編輯:或者,它可能會更容易(導致一個更清潔的合併),如果你做更多的事情是這樣的:

git checkout master -b temp 
git revert <sha1 of code removal> 
git checkout map_dev 
git merge temp 
git branch -d temp 

這將使代碼去除還原在你的分支上,這可能會導致更少的合併衝突。我不能肯定地說。

+0

謝謝!每次我引入SVN更新時,我需要這樣做嗎?因爲這將繼續發生。 – 2011-03-30 14:03:28

+0

之後,你應該能夠將'master'合併到'map_dev'中,而不需要經過所有額外的步驟。那些步驟是從'master'中刪除您的代碼刪除提交,不應該再次執行。 – Jonathan 2011-03-30 14:05:07

+0

...因爲它的恢復將在合併提交中的map_dev的頂端。得到它了。 – 2011-03-30 14:10:40