我有一个使用此配置的git分支(假设为“ dev”)
...- before - A - B - HEAD
B是A的还原提交。这意味着A和B没有用,只有头很重要。
我想删除A和B并将HEAD设置为before - HEAD
但是我无法找到如何使用rebase进行此操作,因为我根本不想使用这些提交。
NB:一种方法是回到“之前”并将HEAD应用于新分支,但这不是我在这里寻找的。我不想创建另一个分支。
感谢您的帮助。
答案 0 :(得分:1)
在这里进行交互式变基是一个不错的选择(git rebase -i before
,并删除A
和B
行),但是如果您希望避免这种情况,这里的方法会更简单一些方法:
首先,跟踪您的头提交的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
由于A
和B
相互抵消,因此在此操作期间应该没有冲突。
然后,如果您已经按下A
或B
:git push -f origin master
,则需要强制按下。如果您的项目有队友,则应在强行按下按钮之前告知他们。
答案 1 :(得分:1)
您的Git图不是很清楚。在Git仓库中,HEAD
是指向当前分支的引用(又是指向提交的引用)。
假设您的回购协议的结构是这样的(字母表示提交)
... X - Y - A - B - Z (<--dev)
...当前分支指向Z
,并且您希望摆脱提交A
和B
(并使Z
为{{1}的孩子) }),您要查找的Git命令是:
Y
此命令将所有可从当前分支(git rebase --onto Y B
指向dev
到达但不可从Z
到达的所有提交移至提交B
之上。
详细了解git rebase
。
无论您如何实现目标,如果已经将提交Y
推送到远程存储库,该操作都会使当前分支的历史记录行与已发布的分支不同。
您需要使用A
来将您的版本设为正式版本,但这会使您的同事感到困惑,Git无法帮助您。沟通是解决这种情况的关键。