如何通过移动头指针来消除在功能分支上完成的工作?

时间:2017-10-05 17:33:55

标签: git gitlab

我有一个同事希望在功能分支上有效地“消除”他的更改并将另一个分支的HEAD提交放在最前面。这是因为他的特征分支对于已创建的每个其他分支都变得如此陈旧。然后,他将他已经保存的代码的各个方面合并到这个功能分支中。我想我们试图避免在这里创建另一个分支。

我对这种做法持怀疑态度。也许我不应该。在任何情况下,这不是一个rebase或合并,它甚至不是挑选。我想我想做什么(我不知道这是我想做什么,BTW,你们告诉我),是改变这个功能分支的分支指针,但是HEAD存在于另一个分支中并且不是这部分功能的一部分。

我们在Eclipse&中使用EGit。 Gitlab,如果这是相关信息。

1 个答案:

答案 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之后的清理既费时又难看。