我有兩個git分支。一個是 "master",它有很多材料。另一個叫 "simple"。當我最初從 "Master "克隆 "Simple "時,我從 "Simple "中洗掉了很多檔案,所以 "Simple "是 "Master "的一個精簡版本。幾周后,"simple "已經做了一些作業,當我切換到 "master "分支并嘗試
時git merge simple
我注意到,我的一些代碼,但不是所有的代碼(不在 "simple "分支中)目前都不見了。我必須重設到一個預合并的承諾,才能找到所有的檔案
。讓我知道該怎么做
。uj5u.com熱心網友回復:
當Git執行合并時,它正好考慮三個點:被合并的兩個頭(在這個例子中,simple和master),以及第三個點,稱為合并基礎,它通常是這些提交的共同祖先。
如果你在合并基點和該頭之間的一個分支上做了改動,而你在另一側沒有做改動,那么該改動將被包含在最終的合并中。 在你的例子中,這個改動是洗掉一個檔案,而結果是檔案被洗掉。 這是在按計劃作業。
如果您想將simple的修改應用到master,而不包括被洗掉的檔案,那么您需要將simple簽出到另一個分支(git checkout -b temp simple),并做一個互動式重定向(git rebase -i master),排除洗掉這些檔案的提交。 然后,temp將是master的一個擴展,上面應用了simple的相關提交。 然后您可以檢查出master并運行git merge temp(可以使用--ff-only或--no-ff,這取決于您是否需要合并提交),然后您的修改將被納入`master.
uj5u.com熱心網友回復:
如果你想合并到simple上的所有提交都發生在洗掉simple分支上的檔案的提交之后,(從你的描述來看,這似乎是真的),那么有一個簡單的解決方案:
使用 git log simple 來確定最后的提交 ID,其中包含了您不希望在分支 master 上發生的洗掉。讓我們把這個提交ID稱為abcd1234。
現在,簽出master,并按照這個順序執行以下兩項合并:
git switch master
git merge --strategy=ours abcd1234 -m "合并簡單分支,不洗掉檔案"
git merge simple
第一條合并命令告訴Git將simple上的所有提交ID帶入,直到X,但不采取任何這些變化。第二條合并命令將合并simple上的其余提交,其中有你希望帶入master的實際修改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325281.html
標籤:
