Making a branch equal to another branch
我有两个git分支,一个是branch_,另一个是branch_,都是从branch master分支出来的。
我已经推了branch_a。但是,我想重置branch_a上的所有更改,并将它们替换为branch_b上的更改。
我可以使用reversion commits将branch_a恢复到分叉点,然后合并branch_b,或者在branch_b中重新设置branch_a。有更简单的方法吗?有没有办法说:"创建一个提交,使分支A中的文件完全等于分支B"?我不想解决冲突。分支机构A是错误的,分支机构B是正确的。但是我不能重置为分支,因为我已经推过分支了。
如果你不想从分支A中得到任何改变,那么我认为除了将分支A中的所有内容恢复到分叉点,然后将分支B合并到分支A中,没有其他方法。下面是一个简单的方法,摘自以下答案:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
即使已经推过分支,仍然可以将分支"A"重置为与分支"B"相同的值,但有一些警告。基本上,如果这个分支只由你使用,那么做是相当安全的,但是如果其他人也在这个分支上工作,你需要与他们协调,步骤取决于你的具体情况,所以我不能在这里给出一个一般的答案。
如果你想走那条路,下面是怎么做的:
1 2 3 | git checkout branch_a git reset --hard branch_b git push -f origin branch_a |
。
回复:"有更简单的方法吗?"
这不会像这样重置。但是,您应该能够使用"我们的"合并策略,用这样的分支覆盖分支A:
1 2 3 4 | git checkout branch_b git merge -s ours branch_a git checkout branch_a git merge branch_b |
结果应该是你的分支A现在基本上是分支B。
我是个新手,所以要注意空行者
Git俱乐部的第一条规则是,一旦历史被推送,就永远不会改变它(参见http://git scm.com/book/ch3-6.html重新平衡的危险)。如果删除公开的提交,则可能会使其他开发人员的状态混乱,因此它们是变更集,挂起孤立的提交,这是一个很难处理的问题。
不幸的是,如果有任何常见的更改,那么只应用恢复提交,然后合并您的分支_B就有问题了。根据您何时进行了分支操作,还原操作可能会撤消随后可能无法重新应用的更改。
Git分支实际上只是提交的指针,与标记的方式相同,因此如果您真的想使分支A完全是分支B(并且您没有其他人使用存储库),您可以使用
1 2 | git push remote :branch_a # removes branch_a git push remote branch_a |
号
上述方法的优点是您不会合并,并且保证不会发生冲突。只需确保没有其他人根据旧分支进行更改。