2013-09-29 30 views
1

假设一个有一个名为分支我的分支有三个提交这样的:混帐:设置一个分支的一个特定的尖端提交

aaa 
bbb 
ccc 

截至第一尖端我的分支是指着aaa。如果有人提示git reset --hard HEAD^,提示将开始指向bbb。相同的命令将导致my-branch的提示指向ccc。如何再次指出提示aaa或bbb?

一个办法是到结账AAA或BBB(分离HEAD),然后签一个新的分支,说新分支,删除我的分支,并使用新的。我还假设像git branch -f my-branch bbb应该工作,但是当我尝试,我得到

fatal: Cannot force update the current branch. 

任何其他的想法?

回答

3

您可以运行git reset --hard <commit-ID>重新调整当前分支。如果需要,使用reflog查找ID,或者甚至更简单,如果reflog说这是(例如)[email protected]{2},只是git reset --hard [email protected]{2}(注意每个git reset重新编号为@{n}的)。

git merge方法在Francisco Puga's answer也工作正常,如果该合并是一个快进合并。 (如果你选错了,你会得到一个真正的合并,如果这是你想要的,那么你可以用git reset --hard HEAD^来撤消它)。你可以再给出原始的SHA-1或reflog名字。作为额外的奖励:

git merge --ff-only id

“向前滑动分支名称”(迈向一个新的针尖状aaabbb),从来没有做一个“正规”的合并,所以这是一个很好的方式以确保您使用的是适当的ID。

2

如果这些提交存在于另一个分支,比方说,你可以使用git合并拿回来给我分支

要恢复与哈希BBB提交到我的分支,使用

git checkout my-brach 
git merge bbb 

如果这些承诺都没有在你的分支,你必须使用git reflog了介绍。

1

可以分支的顶端设置为特定承诺使用基于日期SHA1诸如“BRANCHNAME @ {昨日}”

例如,git的结帐testbranch @ {昨日}

然而,这将会导致脱离HEAD状态,正如您已经提到的那样。

+0

取代检出新分支以避免分离的HEAD状态,您可以使用结帐的“-B”选项。 git checkout -B testbranch – Shunya

0

首先,您必须检查出bbb以避免“致命错误:无法强制更新当前分支。”消息。然后你可以用branch -f将HEAD更改为bbb。最后,退房到这个分支,否则你是在一个分离的头。

所以,做到以下几点:

git co bbb 
git branch -f my-branch bbb 
git co my-branch 

Before:   After: 
>aaa   aaa 
bbb   >bbb 
ccc   ccc 
相关问题