2014-02-26 48 views
4

我有两个git分支branch_a和branch_b,它们都与分支主分离。使一个分支等于另一个分支

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

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

回答

3

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

这不会重置为这样。但你应该能够使用“我们”合并策略覆盖branch_a与branch_b这样的:

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

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

我是一个git的新手,所以买者自负

0

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

不幸的是,只需将逆转提交,然后如果有任何常见的变更合并的branch_b的问题。回复可能撤消更改然后可能不会重新应用,具体取决于您何时进行分支。如果你真的想让branch_a成为branch_b(并且你没有其他人使用仓库),你可以删除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进行更改。

5

如果你不想从branch_a任何改变,那么我不认为有任何其他方式比在恢复了branch_a的发散点一切,然后合并成branch_b branch_a。这里有一个简单的方法来做到这一点,从这个answer采取:

git checkout branch_b 

git reset <the common ancestor commit> 

# Move the branch pointer back to the previous HEAD. 
git reset --soft [email protected]{1} 

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

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

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

如果你想要去的路线,这里是如何做到这一点:

git checkout branch_a 
git reset --hard branch_b 
git push -f origin branch_a 
相关问题