使用git rebase删除提交

时间:2018-07-09 15:42:21

标签: git

我有一个使用此配置的git分支(假设为“ dev”)

...- before - A - B - HEAD

B是A的还原提交。这意味着A和B没有用,只有头很重要。

我想删除A和B并将HEAD设置为before - HEAD

但是我无法找到如何使用rebase进行此操作,因为我根本不想使用这些提交。

NB:一种方法是回到“之前”并将HEAD应用于新分支,但这不是我在这里寻找的。我不想创建另一个分支。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在这里进行交互式变基是一个不错的选择(git rebase -i before,并删除AB行),但是如果您希望避免这种情况,这里的方法会更简单一些方法:

首先,跟踪您的头提交的SHA。我们称之为123

git reset --hard before # move your HEAD pointer back to the "before" commit
git cherry-pick 123     # copy back over your original HEAD commit

由于AB相互抵消,因此在此操作期间应该没有冲突。

然后,如果您已经按下ABgit push -f origin master,则需要强制按下。如果您的项目有队友,则应在强行按下按钮之前告知他们。

答案 1 :(得分:1)

您的Git图不是很清楚。在Git仓库中,HEAD是指向当前分支的引用(又是指向提交的引用)。

假设您的回购协议的结构是这样的(字母表示提交)

... X - Y - A - B - Z    (<--dev)

...当前分支指向Z,并且您希望摆脱提交AB(并使Z为{{1}的孩子) }),您要查找的Git命令是:

Y

此命令将所有可从当前分支(git rebase --onto Y B 指向dev到达但不可从Z到达的所有提交移至提交B之上。

详细了解git rebase


无论您如何实现目标,如果已经将提交Y推送到远程存储库,该操作都会使当前分支的历史记录行与已发布的分支不同。

您需要使用A来将您的版本设为正式版本,但这会使您的同事感到困惑,Git无法帮助您。沟通是解决这种情况的关键。