如何在完全保留分支历史记录的同时将分支状态重置为master?

时间:2020-09-16 18:14:34

标签: git github

基本上,我想将分支状态重置为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)的副作用,以及不得不强制执行以下操作,我将无法在线找到此类解决方案对我来说似乎很危险。

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)

您可以在branchmaster之间创建差异,并将其作为一次提交应用于branch

git diff --binary HEAD..master | git apply --index

这将更新工作目录和索引。然后,您可以git commit进入新状态。