2015-07-03 66 views
0

所以首先檢查下面的圖片,我想代表我需要什麼 git situation如何在git中將文件歷史從分支合併到另一個分支?

的綠色方塊是提交,黃色,棕色和紅色是這些提交的部分(在我的情況提交具體的3個文件通過提交傳播)。

上有開發

實際發生的事情沒有做進一步的更改:我工作的一個分支,並發現了一些變化是在dev支真正有用的,並沒有真正涉及到dev2分支。所以我想要在dev分支上進行這些更改。

git checkout 
git merge 

其實我是想修改走出dev2分支並進入dev分支,所以如果我做結賬>提交的修改將在兩個分支,這就是爲什麼我不喜歡做到這一點。

這甚至可能嗎?我該怎麼做?

回答

1

你能夠找到最後的使用git logsha承諾,應該是在開發中(紅方),然後去你的主分支checkout master,只是說git merge SHA其中紅色正方形的SHA。這在git中很常見。它發生了很多分叉式回購,以合併原始更新。

請記住,這將得到整個提交,我不知道如果這是你想要的。如果你只想從這些提交中獲得一些文件,那將會困難得多。那麼你應該看看this question

+0

我不想要整個提交,只是其中的一部分,因爲我試圖解釋我希望對3個文件所做的所有修改都發送給dev分支,並且它們不會出現在dev2分支中,如果這甚至是可能的話。但似乎我必須去結帳>承諾方式 – Robson

1

是的,這是可能的。你需要做三件事情:

  • 結帳原來的分支:git checkout dev
  • 應用所需的提交:git cherry-pick yellowgit cherry-pick browngit cherry-pick red
  • 再次基於dev2devgit checkout dev2git rebase --onto dev
+0

感謝您的答案,但黃色,棕色,紅色是提交的一部分,而不是單一提交,所以櫻桃選擇將從這些提交中獲得所有更改,而不僅僅是我需要的東西 – Robson

+1

在這種情況下,您將不得不手動執行這些更改。您可以做一個櫻桃選擇,重置一步(即HEAD ^),然後執行git checkout - 文件 - 您想要恢復並使用'git status'來確定要保留哪些部分以及哪些部分你不會 - 但是在任何情況下你都會得到一個不同的提交,所以這樣做並沒有什麼區別。這也是爲什麼分開承諾個別承諾而不是全部承擔一個巨大承諾是有意義的,所以你可以選擇有效的櫻桃。 – AlBlue

+0

當然我沒有正確的提交,我當然應該沒有提交這些文件thogheter,並應該創建一個單獨的提交 – Robson

相關問題