git rebase从不相关的分支中获取变化?

时间:2016-05-20 23:31:14

标签: git git-rebase

我是一个新手,所以不要笑得太厉害......

我在分支A上做了一些工作并做了一些提交。然后,不得不进行修补程序更改,所以我创建了分支B并更改了一些文件。然后,因为主人没有改变我认为如果我这样做会更简单和更清楚:

git rebase master
git checkout master
git merge B

但是,这应用了分支A的变化。我不理解什么?这不可能是它应该工作的方式,是吗?

1 个答案:

答案 0 :(得分:0)

当您创建分支B时,您在分支A上,因此分支B的基础包含您在分支A中执行的所有工作。这就是为什么这些分支A更改现在位于master。从图形上看,您有以下情况:

branchA: A -- B -- C
branchB: A -- B -- C -- D

master中制作修补程序的正确策略是从master创建分支:

# assuming you start on branch B
git checkout master
git checkout -b master_hotfix
# make the fix
git commit -m 'made the hotfix'
git checkout master
git merge master_hotfix
# carry on as you were
git checkout branchB

要撤消已完成的操作,可以尝试在发生错误合并之前将master分支重置为提交。输入git log并计算与branchB合并后提交的提交数量。然后输入:

git reset --hard HEAD~N

其中N是您要从master中删除的提交数。然后应用我上面给出的步骤正确地创建此修补程序。请注意,如果您已将本地git reset推送到遥控器,则不应使用master。在这种情况下,您可以尝试使用git revert,但保留master的方式可能是有意义的,只有在您完成工作后再合并branchB