基本上,我想将分支状态重置为master而不删除其历史记录且不附加master的历史记录。我想在一次提交中重置分支的状态。
比方说master
处于状态A,而branch
处于状态B。master
具有提交<X1>
,<X2>
,{{1} },...,<X3>
,<X(N-2)>
,<X(N-1)>
。 <X(N)>
提交了branch
,<X(N-2+1)>
,因为它是在<X(N-2+2)>
仍位于master
时启动的。
(1)我希望<X(N-2)>
匹配branch
的状态,而无需附加<X(N)>
,<X(N-2)>
,<X(N-1)>
我的提交历史。 (2)另外,我希望<X(N)>
的差异显示0个文件已更改。我只想要一个新的提交branch
,用<X(N-2+3)>
状态完全替换我的分支状态。
为此,我想用<X(N)>
状态替换所有本地更改,并在不使用--force的情况下进行推送。如果没有(1)和(2)的副作用,以及不得不强制执行以下操作,我将无法在线找到此类解决方案对我来说似乎很危险。
答案 0 :(得分:2)
嗯...我想你可以
git checkout branch
git rm -r :/:
git checkout master -- :/:
git add :/:
git commit -m "reset state to match master"
我不确定您对diff
的含义,但是鉴于您已经描述了目标状态,diff
是给定的-这将是状态之间的差异您所描述的内容以及与diff
进行比较的内容。
答案 1 :(得分:1)
您可以在branch
和master
之间创建差异,并将其作为一次提交应用于branch
:
git diff --binary HEAD..master | git apply --index
这将更新工作目录和索引。然后,您可以git commit
进入新状态。