使一个分支等于另一个分支

我有两个git分支,branch_a和branch_b,都与分支主分离。

我推送了branch_a。 但是,我想重置branch_a上的所有更改,并将它们交换为branch_b上的更改。

我可以使用reversion提交将branch_a还原到分支点,然后合并branch_b或branch_b中的分支branch_a。 有一种更简单的方法吗? 有什么方法可以说:“创建一个提交,使branch_a中的文件变得完全等于branch_b”? 我不想解决冲突。 branch_a错误,branch_b正确。 但我不能重置为branch_b,因为我已经推送了branch_a。


如果你不想从branch_a做任何更改,那么我认为除了将branch_a中的所有内容还原到分支点并将branch_b合并到branch_a之外,没有其他办法。 这是一个简单的方法来做到这一点,从这个答案:

git checkout branch_b

git reset <the common ancestor commit>

# Move the branch pointer back to the previous HEAD.
git reset --soft HEAD@{1}

git commit -m "Revert to <the common ancestor commit>"

# Update working copy to reflect the new commit.
git reset --hard

即使已经按下了branch_a,仍然可以将branch_a重置为与branch_b相同,但是有一些注意事项。 基本上,如果这个分支只被你使用,那么做这件事很安全,但如果其他人也在这个分支上工作,你需要与他们协调,这些步骤取决于你的具体情况,所以我不能真正的在这里给出一个一般答案。

如果你想走这条路线,下面是如何做到这一点:

git checkout branch_a
git reset --hard branch_b
git push -f origin branch_a

回复:“有没有更简单的方法”

这不会因此重置。 但你应该可以使用“我们的”合并策略来用branch_b覆盖branch_a,如下所示:

git checkout branch_b
git merge -s ours branch_a
git checkout branch_a
git merge branch_b

结果应该是你的branch_a现在基本上是branch_b。

我是一个混帐新手,所以要注意空手


Git俱乐部的第一条规则是,一旦推出它,你永远不会改变历史(参见http://git-scm.com/book/ch3-6.html#The-Perils-of-Rebasing)。 如果你删除了公开的提交,你可以搞砸其他开发者状态,这样他们的变更集就挂起了孤立提交,这是一个很难处理的问题。

不幸的是,如果有任何常见的更改,只应用回复提交,然后合并branch_b就会出现问题。 取决于你什么时候分支,回复可能会撤消那些不能重新应用的更改。

Git分支实际上只是指向提交的指针,就像标签一样,所以如果您真的想让branch_a成为branch_b(并且您没有其他人使用存储库),则可以使用git branch -D branch_a删除branch_a git branch -D branch_a ,然后执行git branch -m branch_b branch_a 。 然后,您最后剩下的任务就是清理遥控器,您可以通过以下方式执行此操作:

git push remote :branch_a  # removes branch_a
git push remote branch_a

上述方法的优点是你不合并,并保证不会发生冲突。 只要确定没有其他人根据旧的branch_a进行更改。

链接地址: http://www.djcxy.com/p/18835.html

上一篇: Making a branch equal to another branch

下一篇: Git change branch, but don't change files in workspace