1
jsz 2013-03-30 11:12:05 +08:00 1
git reflog
reset 到两个commit都没有的状态,然后再 cherry-pick 回来。 |
2
pythonee OP @jsz 哦? 我还没有用过cherry-pick,不晓得cherry-pick回来之后,所有后续commit是否都还在,还是说仅仅到reset的那个commit
|
3
jsz 2013-03-30 11:33:57 +08:00 1
@pythonee cherry-pick 只是拿指定的那些commit.
假设你是把 A B 两个 commit rebase 成了一个 C。那么, git reset --hard HEAD^ 把 C 删除 git cherry-pick A B 把 A B 拿回来 |
4
pythonee OP @jsz 嗯,实际操作了一把,但是这样离我想达到的效果还是有差距的,我还想保留commit的时间顺序
举个例子,现在我的commit是这样 A --> B --> C --> D rebase后,我把B删掉了,现在是 A --> C --> D 而我想恢复B commit,还想把B放到A之前,C之后,也就是像原来一样 如果用cherry-pick,我觉得如果没有冲突的话,我可以直接cherry-pick回来,也就是 A --> C -->D 如果有冲突,大不了reset到A,然后一步一步cherry-pick回来,但是这样比较没有效率就是 |
5
pythonee OP 更正:
如果用cherry-pick,我觉得如果没有冲突的话,我可以直接cherry-pick回来,也就是 A --> C -->D --> B |
8
imcotton 2013-03-30 19:05:55 +08:00
|
9
imcotton 2013-03-30 19:06:35 +08:00
|
10
G_virus 2013-03-31 01:20:06 +08:00 via iPhone
用reflog找到最初的D,reset回到D就可以了。git的commit包含了整个历史,只要HEAD对就对了。
|
12
jsz 2013-03-31 21:12:23 +08:00 via Android
@pythonee 咱们说的好像是一个意思?就是reset到A,然后把后边的一次cherrypick回来。cherrypick可以一下指定多个commit,我可能把顺序说反了。
|
13
jsz 2013-03-31 21:13:18 +08:00 via Android
把后边的”依次”*
|
14
pythonee OP @jsz 嗯,通常这种情况是在不冲突的时候才能玩的转,后面想想,我不reset到A,直接在D之后cherry-pick,然后再rebase也行。谢谢你的回复
|