2在错误的分支中提交后要做什么

时间:2016-05-07 08:45:00

标签: git git-branch

我有一个包含masterbranch1branch2分支的回购, all 指向同一个提交(让我们称之为aaaaaa1)。

我想结帐branch1并进行一些更改。但是,我忘记了。相反,我做了2次提交来掌握(aaaaaa2aaaaaa3没有在任何地方推送任何东西(这只是本地的)。

我该怎么做才这样做,以便master重置为aaaaaa1branch1设置为aaaaaa3,因为它本来应该是第一个?< / p>

2 个答案:

答案 0 :(得分:2)

git checkout branch1
git rebase master

在这里,您branch1指向aaaaaa3 ...然后:

git checkout master
git reset --hard aaaaaa1

在这里,您master指向aaaaaa1

编辑:

Rebase接受来自指定分支(在本例中为master)的提交,这些提交不在当前分支中(在本例中为branch1)并在此处提交。

Reset --hard可以用来清空工作树,因为你已经使用了alredy。此外,使用commitID参数(在本例中为aaaaaa1),您可以将分支重置为特定提交,就好像之后的提交永远不会存在一样。

在您提出的问题中,您没有将提交推送到远程服务器,所以此段落现在不需要关注您...但是在代码上使用reset --hard时要小心你已经推到了远程服务器。您必须使用-f(强制)参数进行推送,因为您基本上正在更改分支结构。

答案 1 :(得分:1)

如果我理解你的问题,你想交换分支android:layout_width="wrap_content"master。你可以通过很多方式做到这一点。最简单的方法之一是创建第三个(临时)分支,并使用相同的技术来交换两个变量(branch1)的值。

由于您已经tmp = a; a = b; b = tmp指向与branch2相同的提交,因此您可以将其用作临时分支(但之后不要删除它)。在上面交换代码的变量中,branch1branch2tmpbranch1amaster。)

b分配已经发生在过去的某个时间(tmp = a已指向与branch2相同的提交。您所要做的就是分支操作等同于上面的其他两个分配。

更改分支点的位置的一种方法是删除并重新创建它。另一个是使用branch1。删除&amp;重新创建方式有一个缺点:它打破了reset --hard与它在远程存储库中跟踪的分支的链接。

让我们这么简单:

master

警告!

在其他所有事情之前,请确保您没有未提交的更改。任何未提交的更改都将在# a = b (branch1 = master) git checkout branch1 git reset --hard master # Here branch1 moved to master # b = tmp (master = branch2) git checkout master git reset --hard branch2 # Here master moved to branch2 (where branch1 was before too) 上丢失。

如果您有更改,但无法提交,stash他们:

git reset --hard

完成交换后,您可以签出git stash 并取消暂停更改,将工作树设置为与启动程序时相同的状态:

branch1