Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 使一个分支等于另一个分支_Git_Git Branch - Fatal编程技术网

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

Git 使一个分支等于另一个分支,git,git-branch,Git,Git Branch,我有两个git分支,分支a和分支b,都是从分支主分支分离出来的 我推了一个分支。但是,我想重置分支_a上的所有更改,并将它们替换为分支_b上的更改 我可以使用恢复提交将分支a恢复到发散点,然后合并分支b,或者在分支b中重新设置分支a的基础。有没有更简单的方法?有没有办法说:“创建一个提交,使分支_a中的文件与分支_b完全相等”?我不想解决冲突。分支机构a是错误的,分支机构b是正确的。但我无法重置为分支_b,因为我已经按下了分支_a Re:“有没有更简单的方法?” 这不会因此重置。但是,您应该能够

我有两个git分支,分支a和分支b,都是从分支主分支分离出来的

我推了一个分支。但是,我想重置分支_a上的所有更改,并将它们替换为分支_b上的更改

我可以使用恢复提交将分支a恢复到发散点,然后合并分支b,或者在分支b中重新设置分支a的基础。有没有更简单的方法?有没有办法说:“创建一个提交,使分支_a中的文件与分支_b完全相等”?我不想解决冲突。分支机构a是错误的,分支机构b是正确的。但我无法重置为分支_b,因为我已经按下了分支_a

Re:“有没有更简单的方法?”

这不会因此重置。但是,您应该能够使用“我们的”合并策略将分支a覆盖为分支b,如下所示:

git checkout branch_b
git merge -s ours branch_a
git checkout branch_a
git merge branch_b
结果应该是您的分支a现在基本上是分支b


我是一个git新手,所以请注意,git club的第一条规则是,一旦历史被推了,你就永远不会改变它(请参阅)。如果您删除了公开的提交,您可能会搞乱其他开发人员的状态,因此他们的变更集挂起了孤立的提交,这是一个很难处理的问题

不幸的是,如果有任何常见的更改,只需应用恢复提交,然后合并分支就有问题了。根据执行分支的时间,恢复可能会撤消更改,然后可能不会重新应用这些更改

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

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

上述方法的优点是不进行合并,并且保证不会发生冲突。只要确保没有其他人在旧分支a的基础上进行更改。

如果您不希望分支a有任何更改,那么我认为除了将分支a中的所有内容恢复到分歧点,然后将分支b合并到分支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
git checkout branch_a
git reset --hard branch_b
git push -f origin branch_a