我是一个新手,所以不要笑得太厉害......
我在分支A上做了一些工作并做了一些提交。然后,不得不进行修补程序更改,所以我创建了分支B并更改了一些文件。然后,因为主人没有改变我认为如果我这样做会更简单和更清楚:
git rebase master
git checkout master
git merge B
但是,这应用了分支A的变化。我不理解什么?这不可能是它应该工作的方式,是吗?
答案 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
。