将当前的Git分支“重置”为主分支的内容

17

在工作中,每个开发人员都有自己的开发分支,例如:branch = dev_name_of_employee(分支名称为dev_jon)。

dev_jon创建了一个新功能,包含100多个提交,并且还没有准备好进行测试或部署,因此我创建了另一个分支staging_jon(可以称其为holding_jon或其他名称),以放置该新功能。

现在我需要开始另一个新功能,并使dev_jon包含master的内容。这有点像回滚到master的操作。

如何在不删除dev_jon及其远程分支的情况下完成此操作,而是从master重新创建呢?因为这些更改已经被推送过,所以无法暂存所有这些更改。

或者是否有更好的方法让每个员工在开发过程中使用自己的一致性分支呢?


7
不要给开发人员个人分支,而是使用按功能的分支。这样,开发人员可以共享分支,无需问“你的还是我的”。 - Fred Foo
1
从我发布这篇文章以来的经验来看,通过开发人员名称进行分支是一个不好的想法。最好通过前缀类型进行分支,然后引用到票务管理系统的票证ID,并以简短的描述为后缀,例如:bug/3452-table-search-brokenfeature/89756-add-the-things - Jon
幸运的是,我看到你能够找到正确的方式来处理你的分支。每个开发人员的分支理念应该是什么?我想知道这是否会是将来在该项目上工作最有效的方式。另外,在硬重置你的分支时要小心,如果你的方法改为基于feature的git流,那么有多个开发人员在上面工作。 - Ara Kokeba
3个回答

23

1
GitHub Flow建议不要为每个开发人员保持一个一致的分支名称,例如dev_jon,而是为每个新功能创建一个新的分支。这可能是正确的做法。我将尝试git reset --hard master,看看它是否能实现我想要的效果。谢谢。 - Jon

7

我认为你目前的模型并不是最理想的,开发人员应该能够同时开发多个功能,因此每个开发人员只有一个分支并不是最灵活的。无论如何,在你的情况下,我会假设dev_jon正在跟踪origin/master,采取以下措施:

git reset --hard origin/master

假设您当前正在dev_jon分支上,希望这对您有所帮助。

2
是的,我也不认为这是理想的。 - Jon

2
您可以执行硬重置操作,使您的 dev-jon 分支与主分支相同,但在发布新工作时必须小心。远程分支 origin\dev_jon 将是旧的功能,当您来推送时,您将会得到以下警告:
 ! [rejected]        dev_jon -> dev_jon (non-fast-forward)
error: failed to push some refs to '/tmp/example'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

考虑按照larsmans的建议创建一个功能分支。

在这种情况下,如果您需要发布更改,“git push --force-with-lease”是您的好帮手。 - szeryf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接