使分支等于另一个分支

Luí*_*rme 6 git git-branch

我有两个git分支,branch_a和branch_b,两者都是分支主机.

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

我可以使用reversion提交将branch_a恢复到分歧点,然后在branch_b中合并branch_b或rebase branch_a.有更简单的方法吗?有没有办法说:"创建一个提交,使branch_a中的文件变得完全等于branch_b"?我不想解决冲突.branch_a是错误的,branch_b是对的.但是我无法重置为branch_b,因为我已经推送了branch_a.

hta*_*ata 7

如果你不想从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
Run Code Online (Sandbox Code Playgroud)

即使它已被推动,仍然可以将branch_a重置为与branch_b相同,但有一些警告.基本上如果分支仅由你使用,那么这样做是非常安全的,但是如果其他人也在这个分支上工作,你需要与它们协调,步骤取决于你的具体情况,所以我不能真的在这里提出一般性答案.

如果你想走那条路,这是怎么做的:

git checkout branch_a
git reset --hard branch_b
git push -f origin branch_a
Run Code Online (Sandbox Code Playgroud)


Nei*_*son 6

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

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

git checkout branch_b
git merge -s ours branch_a
git checkout branch_a
git merge branch_b
Run Code Online (Sandbox Code Playgroud)

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

我是一个 git 新手,所以请注意 emptor