這個古老的分支都有,我想和這樣做類似
git difftool oldbranch
和手動複製了一個可視化difftool的變化比清理殘局方便很多隻有幾個變化自動合併造成的。
由於這個分支是舊的,只有一些你想要的改變,你可以做的就是嘗試將改變重新映射到master
,然後合併到更新的分支中。
但是,既然你提到老分支不知何故也帶來了你不想要的舊變化,那麼讓我們對你變基點的東西稍微有所選擇。
讓我們假設您實際上想要的所有更改都是在原分支的原始提交中,我們將其稱爲分支old
。因此,對於old
歷史看起來有點像這樣:
I J master
o---------o----------o
\
\
o K
\
\
o L
\
\
o old
比方說,你想通過old
合併提交L
爲master
,但不知何故J
是一個壞的承諾包括已經在master
修正,但不知何故當您運行
# With master checked out
git merge old
讓我們也假設K
也有「壞」的承諾,你不希望添加到master
仍然被合併。
然後,你可以做的是使一個新的分支關閉當前提交的master
,並選擇性地通過old
變基承諾L
到新的分支:
# Make a new branch off current commit of master
git branch new-branch master
# Now rebase L through old onto new-branch
git rebase --onto new-branch K old
這告訴Git是採取的提交K
和old
,並將它們以不同的形式複製到new-branch
的末端,而不包括K
,因爲它是該範圍的專用末端(根據數字行,這將類似於(K, old]
)。
所以,現在你的分支是這樣的:
I J master
o---------o----------o
\ \
\ \
o K o L`
\ \
\ \
o L o new-branch (same commit as where old branch was at)
\
\
o old
現在你可以使用一個快進或快不進合併在新的分支合併:
# From master branch, use fast-forward merge
git merge new-branch
# Or force a merge-commit with non-fast-forward
git merge --no-ff new-branch
代替使用rebase,你也可以通過使用cherry-pick
代替new-branch
來提高選擇性,這將允許你選擇一系列提交以及單個提交,從而爲你提供更細化的控制。
這看起來像會起作用,但看起來很髒。 – 2013-07-13 17:36:03