簡體   English   中英

將git分支的一部分合並到master

[英]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中。

那是這樣做的方式嗎? 以及我該如何正確執行呢?

如果我們解決您的問題,您需要:

  1. 拆分4(E,F,G,H)從Foo提交到2個分支中,Foo將只有:E,G,但是Bar將擁有全部4,E-> G-> F->H。
  2. 刪除一些提交:即在Foo上,刪除提交F和H。
  3. 我不確定您是否要“重新排序”分支Bar上的提交,即具有E,G,F,H->我假設這沒有任何目的,所以我將其排除在答案之外。

這樣做的方法很多,但由於您是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM