我有一个同事希望在功能分支上有效地“消除”他的更改并将另一个分支的HEAD提交放在最前面。这是因为他的特征分支对于已创建的每个其他分支都变得如此陈旧。然后,他将他已经保存的代码的各个方面合并到这个功能分支中。我想我们试图避免在这里创建另一个分支。
我对这种做法持怀疑态度。也许我不应该。在任何情况下,这不是一个rebase或合并,它甚至不是挑选。我想我想做什么(我不知道这是我想做什么,BTW,你们告诉我),是改变这个功能分支的分支指针,但是HEAD存在于另一个分支中并且不是这部分功能的一部分。
我们在Eclipse&中使用EGit。 Gitlab,如果这是相关信息。
答案 0 :(得分:0)
git中的分支很便宜,你可以在本地创建它们,而不必每次都将它们推送到服务器上,如果你担心服务器充满了问题。
首先,开始运行
git checkout -b <backup-branch-name>
保存当前分支,以防您以后想要恢复它。 (这不会将分支推送到服务器,并且当您决定不再需要它时可以使用git branch -d <backup-branch-name>
)
接下来,签出原始分支并运行
git reset --hard <master-branch-name>
删除所有更改并与您的主分支(或您使用的任何一个)同步。
如果您的同事决定他们想要一些原始提交,他们可以使用
git cherry-pick <commit-hash>
将该提交中的更改应用于新分支。
最后,由于您已经有效地完全改变了当前分支的历史记录,因此您无法使用标准git push
。您需要使用
git push --force
如果其他人在这个分支上完成了工作,这将会搞砸。在你的情况下,这样的声音不会成为问题,但要非常谨慎。拙劣push --force
之后的清理既费时又难看。