简单地说,我已经这样做了:
A------B-------C
\
\
B2
现在,我想将B更改为B2。
A------B2-------C
有可能吗?
解决方案历史:
我刚刚添加了我的工作经历。
$ git log
commit b671c70b C
commit f4acdc2b B
commit 56f38939 A
$ git checkout f4acdc2b
我修改了一些东西......然后使用-amend选项进行了修改。
$ git commit -amend
$ git log
commit e2fd729 B'
commit 56f3893 A
现在,它变成了这样:
A------B-------C
\
\
B'
将B重新定位为B'
$ git checkout b671c70b
$ git rebase -i 56f38939
打开交互式编辑器
pick f4acdc2b B
pick 56f38939 A
只需删除行pick f4acdc2b
,然后保存并退出。
如果有错误error: could not apply b671c70b... C
,
编辑所有合并冲突然后,
$ git add .
$ git rebase --continue
$ git log
commit 914c6bc C'
commit 56f3893 A
$ git checkout 914c6bc
$ git rebase e2fd729
$ git log
commit 5c65190 C''
commit e2fd729 B'
commit 56f3893 A
现在,它看起来像这样。
A------B'-------C''
答案 0 :(得分:3)
要完全删除B
,您必须重新B2
A
和C
B2
上的git checkout C
git rebase B2
。
C
在B2
A-------B------B2-------C'
B
(注意C'是新提交)
但是现在你在历史上仍然有git rebase -i A
提交。您可以使用交互式rebase删除它。
pick 05c98ef B
pick e31d9f0 B2
pick 5d30d05 C
打开交互式编辑器
pick 05c98ef B
删除行B
,保存并退出。删除此A------B2'-------C''
后,您的历史记录如下所示
{{1}}
答案 1 :(得分:2)
您可以在B2
之上交互式地修改您的分支(实际上在A
之上,因为您希望B2
消失):
git checkout yourBranch # which references C)
git rebase -i A
# drop B
这会给:
A------B2'-------C'
(请注意,C'
是C
,其中包含不同的SHA1,因为其父级已更改)
(B2
的评论相同,因为其父级也已更改)