[英]Merging part of git branch into master
我有一個帶有multiplpe更改的簡單分支:
Master ---A---B---C
\
Foo E---F---G---H
現在,我只需要將部分更改合並到Master中即可。 我是git的新手(目前在Windows上將其與SourceCode一起使用),並正在考慮這樣做:
Master ---A---B---C---?---J---?---?---
\ /
Foo E---G'
\
Bar F'---H'---
我只需要分支中的某些部分。 我一直在努力實現4種不同的制造商API。 現在,只有1個需要投入生產,其余的則被擱置。 假設總共修改了19個文件,但我只需要其中7個。 現在,我需要將這7個拆分,與master同步並作為另一個分支推送,以便CTO稍后可以將它們合並到Master中。
那是這樣做的方式嗎? 以及我該如何正確執行呢?
如果我們解決您的問題,您需要:
這樣做的方法很多,但由於您是git的新手,所以我將其保持在我能想到的最簡單的流程中。 因此,讓我們看一下拆分分支:
從您當前的Foo(head = H)執行git checkout -b Bar
這將創建帶有提交E,F,G,H的分支Bar
現在,有兩種方法可以重置Foo分支:
#1丟棄Foo並重新創建它 git branch -D Foo
(從本地刪除) git push origin :Foo
(從遠程刪除,如果您已經將其刪除)
然后,您需要根據主機的提交“ C”創建一個新的Foo:
git checkout -b Foo <CommitIdShaForC>
然后,您可以通過執行gitk Bar
從git gui來選擇提交E和G,然后右鍵單擊提交並選擇Cherry-pick,或者從控制台通過以下操作:
git cherry-pick <Commit Id for E> <Commit Id for G>
如果出現合並問題,請查看此答案
#2從Foo還原提交如果您不介意在foo中包含F和H的歷史記錄,則可以簡單地在git中還原它們,本質上git為您的提交F和H創建一個反向補丁,並將它們作為新的提交應用:
Foo
分支上,它具有E -> F -> G -> H
git revert F
E -> F -> G -> H -> F'
,其中F'撤消了F添加的內容 git revert H
將導致: E -> F -> G -> H -> F' -> H'
其在源代碼中的最終結果將是:與僅提交E和G相同。 另外,您也可以在git revert上使用--no-commit標志來在1次提交中同時還原F和H:
git revert --no-commit F
git revert --no-commit H
git commit -a -m "reverting commits F and H"
這將導致:
E -> F -> G -> H -> I
I是撤銷F和H的提交
#Update 1寫完冗長的答案后,我看到OP希望將“部分提交”放入幾個分支中。 對於這種情況,我強烈建議您使用交互式變基,以便可以拆分提交。 請參考有關git rebase的官方文檔 ,尤其是有關“拆分提交”的部分。 另外,我認為您會發現這個問題特別有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.