我有一个包含master
,branch1
和branch2
分支的回购, all 指向同一个提交(让我们称之为aaaaaa1
)。
我想结帐branch1
并进行一些更改。但是,我忘记了。相反,我做了2次提交来掌握(aaaaaa2
和aaaaaa3
,没有在任何地方推送任何东西(这只是本地的)。
我该怎么做才这样做,以便master
重置为aaaaaa1
而branch1
设置为aaaaaa3
,因为它本来应该是第一个?< / p>
答案 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
相同的提交,因此您可以将其用作临时分支(但之后不要删除它)。在上面交换代码的变量中,branch1
为branch2
,tmp
为branch1
,a
为master
。)
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